[gpu pro3]CryEngine3:ThreeYearsOfWorkInReview

来源:互联网 发布:mac无u盘安装win10 编辑:程序博客网 时间:2024/05/01 13:07

<gpu pro3>上crytek对cryengine开发方面的渲染工作做的一个总结。

里面的细节内容在以往放出的paper里面几乎都有提到,但是这篇文章注重整体上的一个回顾,相比以前的paper少了些学院派的理想化,更多了些实用性的东西,读来别有一番滋味。


跨平台

开始cryengine3向console上进发的时候,team里面有console经验的人还是很少。

开始做起来也是有比较多的困难,比如一上来发现没画什么东西呢,postfx花了30ms,particle50ms,帧数就10。。。

优化一些策略:比较通用,书里列了好多,稍微有意义的是:

  • 优化最差情况,好的情况优化了也没意义
  • 分帧计算,if possible

在整个team的视野上去优化,crytek提的这一个比较喜欢,这个就是engineer和researcher的最大区别,engineer必须有能力在一个更高更大的范围上去思考问题和寻求解决方案并且搞定它。编程和技术只是engineer的一个技能(当然是主要的技能),不是全部,在引擎和游戏的开发过程中,决定性的是最终产品而不只是使用的技术和代码,有些东西只有engineer能看到,这里就需要engineer有更好的综合能力。

crytek这里提到,要对需求进行过滤,一些会导致非常大消耗的设计就要和designer和artist进行探讨,设计层面上的修改是必须要纳入解决方案的,而且这个常常会导致非常大的提升。同时,engineer也在不停地像其他人灌输效率上的东西,效率优化是所有人的事情。

pipeline上,他们会有server来对每一个changelist进行监控,这个也比较常见了,不赘述。


PhysicallyBasedRendering

在crytek看来,PhysicallyBasedRendering包含了整个lighting系统,好吧,概念也没什么好抠的,这里就是ce3的lighting系统。

  • 使用deferred lighting(不是deferred shading),gbuffer2张:是depth&normal&gloss, lighting buffer2张:diffuse&specular,这里几个好处:
    • 降低了同时写入rendertarget的数量,显存峰值会降低
    • 有更大的自由度,deferred shading对于特殊material类型的处理还是比较乏力
  • hdr,crytek这个总结也挺好:准确的光照范围,减少色阶和color clipping
    • ps3上是rgbm,其他是float的render target
  • lighting
    • ambient pass:hemisphere lighting,其实就是一个(normal.z*0.7+0.3)*ambientLightColor这么个东西
    • environment lighting probe:image based lighting技术(就是把东西拍到texture里,然后拿texture来辅助光照),具体是拍一个cubemap,然后downsample一个8x8的diffuse cubemap,和一个specular用的cubemap(resolution没说),格式是rgbk(也就是rgbm)
      • cubemap需要用ati cubemapgen这种工具处理下,否则边缘会看起来不对
      • apply的时候用volume lighting
      • 根据gloss值来选取不同mipmap level
    • diffuse gi:light propagation volume
    • contact shadow:ssdo,ssao已经不给力了,ssdo里面多了一个方向信息,在算ao的过程中记录一个unoccluded direction信息(也叫bent normal),这样在计算ao的时候就有方向信息了
    • light pass:只是使用的blinn phong模型,其他的一堆东西没有使用。区域型的lighting(比如indoor的)使用volume来明确划分,进而避免bleeding。
    • shadows
      • cascaded shadow map : logarithmic distribution,
      • shadow frustum的朝向是固定的(避免精度不稳定),
      • shadow space snapping(避免闪烁)
      • shadow cascade caching,远处的cascade分帧update
      • shadow acne: sun shadow时候画前面,只是用slope scaled depth bias,在deferred shadow pass时候使用一个固定的depth bias
    • deferred decal
ForwardShadingPass

deferred skin shading:screen space subsurface scattering
soft alpha test:顺着头发的tangent方向做blur

随着对crytek的持续关注以及了解到越来越到宣传广告以外的信息之后,crytek在我眼中也变得越发真实,just human begings,希望crytek持续给力,一直做引擎市场中强有力的竞争者。