CryENGINE 3: reaching the speed of light

http://advances.realtimerendering.com/s2010/Kaplanyan-CryEngine3(SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course).pdf

siggraph10的paper。

总体看下来,crytek在处理很多我们还没发掘到的问题,看着有种无力感。

另外感觉crytek在逐渐从engineer升级到scientist,说是大师级也不为过。

 

 

texture compress improvement

 

看着就比较烦,

  • 一顿搞---做的时候用16bit的texture,然后histogram normalize什么的,然后出来的效果得放大了才能看出些许优势。
  • srgb space的texture

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

轻描淡写的一页,里面充满了名词,好几个不懂

  • encode depth into 2 16bit channel
  • quater buffer
  • bilateral blur fetch----囧
  • Volumetric Obscurrance with 4! samples----囧
  • reprojection 

最后是720p情况下:360 1.1ms, ps3 1.3ms,orz!

 

 

deferred pipeline

 

lighting model:

Indirect lighting
Ambient term
Tagged ambient areas
Local cubemaps
Local deferred lights
Diffuse Indirect Lighting from LPVs
SSAO
Direct lighting
All direct light sources, with and without shadows
使用的是light prepass, format:
  • 24bit depth, 8bit stencil----各种mask信息的存储
  • 24bit normal, 8bit glossness

 

 

normal
这一块觉得巨给力。

用24bit存normalized normal会精度很差:

CryENGINE 3: reaching the speed of light_第1张图片

其实24bit真的已经很多了,可以存储相当大的信息量,足够了。

之所以精度不够根本原因是我们存的是normalized normal,这样一来,只用了%1.73的理论存储能力。

crytek给了算法利用到了%98.2,因此也获得了非常高的精度:

CryENGINE 3: reaching the speed of light_第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

Carsten Dachsbacher for suggestions on the talk
Holger Gruen for invaluable help on effects
Ivan Nevraev and David Cook for consulting on Xbox 360 GPU
Yury Uralsky and Miguel Sainz for consulting
Phil Scott, Sebastien Domine, Kumar Iyer and the whole Parallel Nsight team
Tiago Sousa, Sergey Sokov and the whole Crytek R&D department
这就是大师级crytek和其他工作室根本区别所在。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


原文链接: http://blog.csdn.net/ccanan/article/details/5974484

你可能感兴趣的:(CryENGINE 3: reaching the speed of light)