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/16的low res shadow
- 把shadow的边缘做一个dilate(膨胀)
- fulll resolution, 开stencil write,如果在边缘dilate处就texkill
- full resolution,开stencil test,这样只有边缘的部分才会full resolution render
- cars2的数据是stencil干掉%70的pixel
- 降低pixel render数量也把bilateral filer pass的时间消耗从2.6ms降到1ms
- 但是有个artifact就是:
- 不过鉴于是4分屏的(还想怎么样),而且不容易看出来,就这样吧。