- 最后登录
- 2014-10-28
- 注册时间
- 2013-5-8
- 阅读权限
- 70
- 积分
- 2871
- 纳金币
- 2618
- 精华
- 14
|
一个典型的三维渲染程序有如下结构:
外部应用模块根据渲染引擎的要求,将三维数据组织成其识别的数据结构,然后传递给渲染引擎;渲染引擎根据需要调用设备管理模块;最后由对DirectX、OpenGL等硬件API进行了封装的虚拟设备将三维图形绘制在屏幕上。
其中渲染引擎的作用就是提供高效的显示大型场景的能力;其目的在是最小化处理过程,让GPU花费的时间和内存最小,同时还要在有限的时间范围内满足我们对图形质量的要求。为了达到这些目的,渲染引擎常常使用如下的一些技术:
l 平截体拣切,将屏幕之外的物体去掉
l 遮挡拣切,将被其他物体遮挡的物体去掉
l LOD选择,将远处的物体使用较少的三角面片来显示
l 由前至后渲染,这样就可以将需要着色的像素的数目减小到最小
对于某一个渲染引擎来说,这些技术并不一定都需要。渲染引擎的目的是加速遍历和显示三维物体,但是对于一些包含物体并不多的小场景来说,逐个遍历和显示所有物体也是可以接受的。比如说,一个地形渲染系统就不同于二维图形系统,同时它们跟CAD建模系统也不同。所以,我们需要根据所处理的场景来选择使用哪些渲染引擎技术。
设备管理模块维护着渲染引擎传过来的三维数据,比如网格、纹理。它是能够调用虚拟设备的唯一方式。虚拟设备是对DirectX、OpenGL等图形API的封装,一般都要求短小高效。而设备管理模块对向虚拟设备传递什么样的渲染数据是有策略的,比如说,如果两个要渲染的对象有相同的材质,那么设备管理模块就不会在渲染这两个对象之间重新设置材质数据,因为状态切换是非常消耗GPU资源的;另外,设备管理模块还能将很多小的对象合并成一个对象,从而提高GPU的效率。设备管理模块还有管理GPU资源,释放内存等功能。
|
|