CompanyOfHeroes2渲染技术

文章链接:http://url.cn/OzAQM8

CompanyOfHeroes2渲染技术_第1张图片

主要讲即时战略游戏CompanyOfHeroes2在冬天环境下的一些渲染技术,文章结合硬件以及游戏的实际情况,在每一种方法背后,还列出思考和尝试的过程,很实战的一篇。

物件上的积雪

积雪

relic试图做geometry上的积累,但是这个要达到好的效果,就需要有一个很好的积雪边缘fading的效果,这个要做好,就需要offline工具来生成这些边缘和normal的信息。

并且需要在shader里面产生geometry,并且有很多例外,所以最后relic放弃了这个做法。

进而relic结合了company of heroes的特点,2.5d的上帝视角,所以其实做了geometry积累也没有那么大的意义,转而来让雪可以在color上fade掉就可以:

CompanyOfHeroes2渲染技术_第2张图片

那这个就容易太多了,在vertex shader里面计算出要积雪的distance,在pixel shader里面fade out即可。


snow shadow map

让最上面的地方才有积雪,这个用一个低精度的类似shadow map即可得到occlusion信息,潮湿什么的都可以这么做。

另外这个shadow map可以进行一些扩展,记录min/max height, relic使用这个做了边缘fade out的改进,使得效果更加的自然。


地形上的雪

地形上的雪是额外的一层,不属于地形标准层的一部分。

自己可以有高度。

dx11上面使用tesselation来提升效果。

CompanyOfHeroes2渲染技术_第3张图片CompanyOfHeroes2渲染技术_第4张图片


车辆在雪地上的痕迹通过一个track map来描述,dx11就是用tessellation来生成geometry,dx10(dx9已经去死了)上面只是normal变下。

CompanyOfHeroes2渲染技术_第5张图片


CompanyOfHeroes2渲染技术_第6张图片

这里着实让我兴奋了下:

冰使用类似地形的多层材质的方法来渲染,这样冰的破损,再冻回来都可以有一个很好的表示,realtime时候的做法就和编辑地形材质一样,在material mask上面修改即可。

但是冰的破损如果只是这样,边缘就太润滑了,而且mask精度低的话,还会有明显的“格子”感,这里relic使用类似shadow中poisson filter的方法,使用一个贴图扰动uv,来达成碎冰状的感觉:

CompanyOfHeroes2渲染技术_第7张图片


volume ambient occlusion

这里也展示了relic良好的技术结合产品的综合能力。

  • 雪地场景的ao是格外的重要----场景颜色简单,偏白色(简直就是展示ao的专用场景么)
  • rts游戏没有必要做到那么精细的ao
  • 重用snow shadow map来产生ao,而且这个ao是volume based,而不是screen space这种在理论上还是有不少信息缺失的情况
效果不俗:
CompanyOfHeroes2渲染技术_第8张图片

其他
暴风雪的优化
使用1/4 buffer,可以大幅度提高性能
deferred shading
和之前在本博客提到的多个地方也比较一致,deferred shading如果只是认为为多光源而生就太不到位了,它很好的简化了渲染pipeline,把geometry&material信息与shading分开,提升了整个pipeline的结构。
如果pipeline复杂到一定程度,那么选择deferred shading就是非常必要的了



你可能感兴趣的:(CompanyOfHeroes2渲染技术)