精彩专题

文档资料

南大先腾3D游戏引擎主要技术特点

南大先腾3D游戏引擎主要技术特点

2015-10-31 10:25:39

         光影不分家,阴影技术一直是三维光照技术不可缺少的一部分。阴影就是光线直线传播无法到达的区域,当前应用最多的阴影技术分为两个种类,一种是基于几何框架运算的体积阴影(Volume Shadow),另一种是基于图像渲染的阴影映射贴图(Shadow Map)。
1、体积阴影
根据光线直线传播的原理,通过CPU计算,为每个遮光体(Light Occluder)生成与其同几何细节度的阴影体(Shadow Volume),将该阴影体渲染至模板缓存(Stencil Buffer),从而在屏幕上标识出处于阴影内的区域。该技术有以下几个特点:
1)通过该技术获得的阴影效果是与分辨率不相关的,不会产生像素瑕疵。
2)不需要显示硬件编程技术支持,完全使用固有的三维流水线控制方式,是在上一代显示硬件水平下实现动态阴影的最佳技术方案。
3)要对每个物体以及每个照亮它的光源分别生成同几何细节度的阴影体,数据量非常大,需要占用数量不菲的内存空间。
4)受限于模型的几何细节度,在模型几何数据量较大的情况下,计算和渲染阴影体的开销很大。对于静态物体,阴影体只需要生成一次;对于动态物体或动态光源,必须每帧都重新生成相关所有模型的阴影体,并且视野范围内所有阴影体的渲染必须每帧都进行
5)无法转入GPU运算,不能获得显示硬件的加速,需要消耗大量的CPU资源,与新一代图像技术的观念背道而驰。
6)完全基于模型的几何框架,无法实现对经过Alpha通道裁减(Alpha Test)的表面的投影,比如铁丝网、植被的叶片等,都是采用Alpha通道裁减来实现不规则边缘或镂空的图形,它本身没有相应的几何框架,无法为这种表面生成阴影体。
7)基于固有三维图形处理流水线的体积阴影无法实现柔和阴影(Soft Shadow),通过他获得的阴影效果都是边缘分明的(Hard Shadow),已经无法适应现在人们对图像效果的要求。
在体积阴影技术诞生之前,还不存在真正意义上的动态阴影,它使得可实时渲染的动态光影成为现实。但综上所述,体积阴影已经不再符合现代三维图像技术的要求,虽然有新的基于体积阴影的技术可以获得柔和阴影,但始终无法摆脱其受限于几何细节度以及无法获得硬件加速等弊端,体积阴影技术已经不再为新的三维图形引擎所采用,取而代之的就是阴影贴图
2、阴影贴图
同样是根据光线直线传播的原理,以光源为视角将光源视野范围内的景物渲染成一幅贴图材质,通过深度值检测,将离光源最近的物体表面与光源的距离保存在贴图中,从而在渲染场景时将不被光线照亮的区域标识出来,也就是光源能看到的地方被照亮,看不到的地方就是阴影。该技术有以下几个特点:
需要显示硬件编程技术支持。
1)与模型的几何细节度不相关,不需要进行CPU的运算,完全在GPU中实现,可以获得完全的显示硬件的加速,生成阴影图的效率很高。
2)对每个光源只需要一份阴影贴图,不需对每个物体生成额外的数据,节省内存空间。不需要渲染额外的阴影体,直接在光照着色程序中取样即可,开销很小。
3)基于渲染和贴图技术,可以实现对镂空和不规则边缘的表面进行投影,并且易于实现柔和阴影。
4)由于是基于贴图技术,所以受限于阴影图的尺寸限制。尺寸过小,对于照亮面积较大的光源会出现像素瑕疵,尺寸过大会超出显示硬件的支持能力并大大降低渲染性能。可以采用适当的小尺寸阴影贴图,通过对阴影图的多重采样和混合弱化这种瑕疵,并且同时获得柔和阴影的效果。
5)对于范围内只有静态物体的静态光源,阴影贴图只需要生成一次就可以一直使用,直到范围内有物体位置发生改变或者光源位置发生改变才需要重新生成。
6)因为要用光源的视角渲染阴影图,也就是要求能以一个透视矩阵来描述光源的朝向,所以一般的阴影贴图技术只适用于聚束光源(Spot Light),而对于全方向性的点光源(Omnidirectional Point Light)要用6个张角90度的聚束光源来覆盖所有的方向,将阴影图保存成立方贴图(Cubemap)的格式,也就是一个点光源需要生成6副阴影图,开销是聚束光源的6倍。优化办法:通过更细致的可视性判断尽量减少每个方向上的渲染数据量,忽略没有发生变化的方向。
未柔化的阴影贴图效果,左边和右边分别是聚束光源和点光源的投影
 

[上一页][1] [2] [3] [4] [5] [下一页]