http://advances.realtimerendering.com/s2010/Kaplanyan-CryEngine3(SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course).pdf
siggraph10的paper。
总体看下来,crytek在处理很多我们还没发掘到的问题,看着有种无力感。
另外感觉crytek在逐渐从engineer升级到scientist,说是大师级也不为过。
texture compress improvement
看着就比较烦,
normalmap用3dc格式压缩---大家都这么干。
但是crytek又要改进算法,还是在很少的情况(很近很精细)下才会有不同可以看出来。
在看一些类似车的表面的时候,平滑中带着些许糙面的情况,16bit的normal优势很大。
occlusion culling
console上是把上一帧的zbuffer downsample几个mipmap,然后用hi-z的算法在cpu端针对obj的aabb做culling----省了大量的cpu和gpu的计算。
pc上是使用比较传统的手工occluder,因为cpu-gpu带宽太低,没法搞zbuffer的传输。
ssao
轻描淡写的一页,里面充满了名词,好几个不懂
最后是720p情况下:360 1.1ms, ps3 1.3ms,orz!
deferred pipeline
lighting model:
用24bit存normalized normal会精度很差:
其实24bit真的已经很多了,可以存储相当大的信息量,足够了。
之所以精度不够根本原因是我们存的是normalized normal,这样一来,只用了%1.73的理论存储能力。
crytek给了算法利用到了%98.2,因此也获得了非常高的精度:
算法和代码文中都给了,大致思路就是根据normal的方向取一个最接近的方向来存(因为最终存起来的是离散的定点数),存的这个不是normalized的。
然后在lighting的时候只要再normalize一下就可以了。
的确相当巧妙,这种高效利用存储的空间的思想真是太太太给力了。
后面一部分将phong brdf,这个目前的lighting model和这个在玩家看起来没有明显差距。
说实话关于这里,halo3在社区里画面质量和gears of war相提并论真是让我很不爽,甚至说gears更好。
halo3在理论上明显高出一截的。
需要硬件继续发展,到了更具区别能力的shading model的时候才行了。
hdr
力求在同样带宽上实现hdr效果,ps3上rgbm,360上用r11g11b10的格式。
最后tonemapping的时候有exponential tone mapping和film tone mapping,两者各有千秋吧。
clip volume
不用shadow的话,lighting容易出现bleeding的情况,解决办法是放置一个clip volume用stencil mask来解决。
anti aliasing
crytek上来说msaa和mlaa都没法解决画面在变化时候的闪烁问题。
尤其是在很细的地方,栏杆,草这些东西。
也就是说关注点已经不是静态画面,而是动态时候的画质问题。
这个我稍微抱有怀疑态度,找了些mlaa的video,觉得还是没有太大问题:
http://www.desivideonetwork.com/view/tji5w7378/incredible-killzone-3-mlaa-incorporated-gameplay-and-graphics-best-looking-game-ever-made/
还有战神的一些video。
crytek的解决方案是继续用reverse projection,记录变化的地方,然后对这些地方blur,来降低camera移动时候造成的flicker。
静态画面上是edge aa.
最后看credit:
•Vaclav Kyba from R&D for implementation of temporal AA