● 一切只因有光
寒霜2的光照引擎并没有采用一般光栅化过程中常见的light pre-pass、mutil-pass或者其他forward rendering手段,它使用的是相对少见的Deferred Shading+Tile-based lighting,整个光照引擎的核心思路集中在大范围场景的正确光照效果表现以及细腻刻画方面。由于Deferred Rendering的比重达到了前所未有的高度,在寒霜2中的光源数量达到了令人震惊的程度。
寒霜2引擎Deferred Shading细节
我们知道在目前的光栅化过程中,“光线”这玩意其实是不存在的。由于某些历史性的原因,程序员们手中的光照模型因为缺乏正确全面的光线关系而变得漏洞百出,只能应付从光源到到物体表面而已,对于其后的光线变化以及由此导致的次生光源问题则束手无策。因此在真正的光线追踪算法到来之前,要解决这个问题唯一的办法就是大幅增加光源的数量,让更多的光线来“冒充”次生光源,以便为我们带来更加真实的视觉效果。
但是对光源的处理是一件极其消耗系统资源的事情,常见的multi-pass render或者multi-light single pass render在当前硬件环境下所能够执行的光源数极其有限,大量的无效渲染会让GPU提前进入到不堪重负的状态。因此DICE才会放弃常规的forward rendering手段,转而通过引入Deferred Shading来解决光源的问题。
寒霜2引擎采用的结合Tile-Based技术的Deferred Shading
Deferred Shading通过延迟处理的思路,将光照操作的步骤从传统的Pixel Shader前段直接转移到整个流水线后端的MRT(多目标渲染)里。这直接导致了像素可以在完成其他一切操作步骤并实现Z Occlusion Culling之后再集合在一起统一进行关于光照的运算和操作,从而避免了大量的无效光照计算。由于光照的最终表达需要借由像素来进行,需要进行光照操作的像素的大量减少能节约出很多可用资源,因此可以等效的被折合成可操作光源数的增加,场景的复杂度越高,Deferred shading所能够带来的效率提升也就越明显。
在寒霜2引擎中,Deferred shading透过延迟操作可以完成几乎全部涉及光照的处理过程,比如全局亮度调节,高动态范围(HDR)调节,光照探针,复杂多光源漫散射,甚至可以被用来处理半透明(Translucency)等极为复杂光线关系。Deferred Shading的介入让寒霜2引擎能够处理的光源数量显著增长,足以轻松的应付诸如颗粒光照(Particle lighting)之类过去很难实现的应用。
使用Deferred shading的killzone系列游戏
由于寒霜2引擎是以PC平台以及DirectX 11为出发点制作的,它在PC平台以及不同家用机平台上的执行方式和特点也有极大的不同,这些不同几乎完全集中在该引擎强大的光照系统中,甚至可以说完全是由Deferred Shading决定的。接下来,就让我们看看不同平台执行寒霜2引擎的不同特点吧。
三秦IT网的官方微信:更多资讯请关注:三秦IT网官方微博