http://www.guerrilla-games.com/presentations/GDC09_Valient_Rendering_Technology_Of_Killzone_2.pptx
http://www.guerrilla-games.com/presentations/GDC09_Valient_Rendering_Technology_Of_Killzone_2_Extended_Presenter_Notes.pdf
一个老文章了,不过有一些细节很不错。
killzone2,开发历时4年。
DeferredShading
deferred shading现在过于普遍了,基本相关的介绍直接跳过。
开始guerrila尝试了light prepass,但是对于kz来说,没有那么大的需求来做light prepass,如果像cryengine和bungie的确是最后的光照比较复杂,有必要走light prepass类的pipeline,kz就没有必要,在这种情况下,light prepass的效率还低于传统的deferred shading,所以最后就用了传统做法。
kz2的gbuffer格式:
lighting accumulation比较特殊,也说明了kz2的lighting到达什么级别,是用来存储
- indirect lighting,
- static object的indirectlighting是放在light map中
- dynamic object用的是spherical harmonics系数来存储间接光
- reflection map:也就是environment map
- 在render lighting的时候,使用zcull, depth bound test和stencil来尽量减少lighting的区域
- lighting的代码可以根据具体情况做一些简化,比如有的就不需要specular等
- 使用stencil mask来标记完全在shadow中的pixel,这样可以skip lighting
- 全屏的lighting的时候,也使用了depth bound test,这样去分几级的lighting可以进行lighting quality上的一些lod
shadow
- soft shadow filter是poisson disk filter,这个现在都这样了。
- 比较小的东西就不cast shadow,这个threshold可以per object的指定,也可以per light的指定
- 使用camera view frustum的bounding sphere来做为shadow view frustum构建的依据,而不是针对camera view frustum本身,因为camera会转,根据camera frustum构建会造成有闪烁出现