《赛车总动员2》的渲染技术

Rendering In Cars2,由disney旗下Avalanche Software的三个哥们带来。

Avalanche已经发布过toy story3,这次来到cars2,面临了很不一样的挑战,toy story里面是一些简单模型小可爱,所以里面的性能压力相对较小,就有较大的空间去提升光影。

cars2里面支持4个人同屏竞赛,也就是4分屏,所以很多东西要重新来平衡来达到一个好的品质。

                                                                                                                                                                                                             

LightProbe

光照使用到基于light probe的indirect lighting,

avalanche在light probe处使用

  • gpu来render出一个cube map,
    • cubemap使用atlas来提升性能
  • 使用dx的cubemap to sh projetion来得到spherical harmonics系数
    • sh存了3个order
    • 这里其实就是一个irradiance volume,不过cars2进一步玩转irradiance volume


cars2玩转irradiance volume:

  • 里面使用box structure来一下子很快捷的放很多light probe
  • 可以分一些box类型来禁止light leaking,有local的,有global的
  • cars2采用cpu sample的,当然也可以有gpu的,但是还没实现呢
  • irradiance volume的典型问题是大mesh的渲染,cars2采取把mesh拆分的办法来做

environment map对于cars2的最大意义似乎是很棒的reflection。


shadow

cars2把静态和动态物体的shadow分开搞,

  • 静态物体有lightmap
    • 投射到动态物体的shadow是实时算的
      • 使用256*256的buffer
      • 简单的low lod模型(proxy geometry)
      • 只是营造车子跑到阴影里,上面发暗这种感觉,不并要求准确
  • 动态物体是2个cascade的csm
  • shadow使用quater buffer来提升性能
  • 使用stencil cull来提升mlaa的性能
  • stencil shadow mask optimization
    1. 画一个1/16的low res shadow
    2. 把shadow的边缘做一个dilate(膨胀)
    3. fulll resolution, 开stencil write,如果在边缘dilate处就texkill
    4. full resolution,开stencil test,这样只有边缘的部分才会full resolution render
    5. cars2的数据是stencil干掉%70的pixel
    6. 降低pixel render数量也把bilateral filer pass的时间消耗从2.6ms降到1ms
    7. 但是有个artifact就是:

    8. 不过鉴于是4分屏的(还想怎么样),而且不容易看出来,就这样吧。





你可能感兴趣的:(buffer,optimization,structure)