渲染场景坐标空间着色系统
在FAR CRY中,CRYTEK将视点跟光照位置转换至切线空间坐标系(相对于表面方向),因此所有的pixel shader数据都是基于切线坐标系,同时也是在该空间中进行计算。但是随着多重光照的运用,该系统开始在传递光照参数上受到限制。为了解决这一问题,CRYENGINE 2改用“渲染场景坐标空间着色系统”,该技术实际上已经被运用于立方体贴图反射特效上,所以代码没有兼容性上的问题,而且着色效果也比原先的切线坐标系空间系统更加准确。
光影系统
FAR CRY采用的光影系统
CRYTEK当年在FAR CRY的室外场景中主要采用了shadow map(阴影贴图/映射) + projected shadow(投射阴影)的方式,其中投射阴影用于室外的太阳光源在物体上的投影,而当时他们面临的最大问题就是阴影边缘难看的锯齿问题,不过在那个时代此举实属不得以而为之。对于植被的投影,考虑到性能问题,他们只能采用预计算的阴影贴图,但另一方面又受到显存容量的限制,只能采用分辨率低下的模糊阴影贴图,效果自然大打折扣。不过在高端硬件上,CRYTEK在植被上使用了阴影映射,但在跟预计算的阴影相结合的时候容易出现问题。
FAR CRY中实时阴影贴图与预计算阴影贴图混合使用
对于点光源,FAR CRY采用了与当时DOOM 3相同的蜡版缓冲阴影(容积阴影),因为容积阴影是更加简单高效的解决方案。CPU蒙皮可以在GPU渲染容积阴影的时候协助为物体的阴影轮廓挑边,但是显然对于细节精细、轮廓复杂的物体CPU将面临重大压力,因此容积阴影的缺陷也是明显的:对CPU蒙皮性能的依赖性、对GPU的负载以及额外的内存带宽需求;而更致命的是:缺乏对半透明物体的支持,这对于需要大量棕榈树和花草灌木等半透明叶子投影的热带岛屿场景是绝对无法容忍的,容积阴影技术给CRYTEK判了“死刑”也就不足为奇了。
更加先进的光影系统
此后CRYTEK仍希望容积阴影能够被用于没有多少半透明物体的室内场景,但是生硬的阴影边缘以及多重光源下的性能损失问题最终让CRYTEK不得不寻找更加合适的光影方案。
CRYENGINE 2的光影系统
对于今天的硬件机能,采用单一简洁的投影系统似乎已经时机成熟。容积阴影由于我们上面提到的种种弊端而惨遭淘汰,CRYENGINE 2彻底抛弃了容积阴影的代码。shadow mapping(阴影映射)能够提供高质量的柔和阴影,并且可以根据实际需要自由调节性能跟画质,因此成为CRYENGINE 2光影系统的不二人选。不过,shadow mapping只能涵盖直接光照部分,对于电影画质所必不可少的间接光照部门则需“另请高明”,因此CRYENGINE 2最终为直接光照跟间接光照分别采用了两套专门的解决方案。
Crysis中完全动态的实时阴影效果一流
直接光照
CRYENGIE 2在处理直接光照部分采用了shadow mapping(即将光照中的物体深度保存在一张2D贴图之中),而容积阴影则被彻底抛弃。虽然CRYTEK早在FAR CRY时代就采用了shadow mapping,但在FAR CRY中只有极少数的物体能够单独投影,对于大部分物体,通常是采用将大量物体的阴影合成为一张阴影贴图的做法。从光源发出的方向同步投射一张简单的阴影贴图可以做到不错的效果,但是在玩家视点附近的阴影贴图分辨率很低,造成难看的块状阴影。FAR CRY还试用了trapezoidal shadow maps(PSM)跟 perspective shadow maps(TSM)两种shadow map。
CRYENGINE 2采用了跟3DMARK 06相同的cascaded shadow maps (CSM),这种shadow map技术通过在玩家视点区域内投射同一分辨率的多张阴影重叠来实现细腻的阴影效果。