文章链接:http://url.cn/OzAQM8
主要讲即时战略游戏CompanyOfHeroes2在冬天环境下的一些渲染技术,文章结合硬件以及游戏的实际情况,在每一种方法背后,还列出思考和尝试的过程,很实战的一篇。
物件上的积雪
积雪
relic试图做geometry上的积累,但是这个要达到好的效果,就需要有一个很好的积雪边缘fading的效果,这个要做好,就需要offline工具来生成这些边缘和normal的信息。
并且需要在shader里面产生geometry,并且有很多例外,所以最后relic放弃了这个做法。
进而relic结合了company of heroes的特点,2.5d的上帝视角,所以其实做了geometry积累也没有那么大的意义,转而来让雪可以在color上fade掉就可以:
那这个就容易太多了,在vertex shader里面计算出要积雪的distance,在pixel shader里面fade out即可。
snow shadow map
让最上面的地方才有积雪,这个用一个低精度的类似shadow map即可得到occlusion信息,潮湿什么的都可以这么做。
另外这个shadow map可以进行一些扩展,记录min/max height, relic使用这个做了边缘fade out的改进,使得效果更加的自然。
地形上的雪
地形上的雪是额外的一层,不属于地形标准层的一部分。
自己可以有高度。
dx11上面使用tesselation来提升效果。
车辆在雪地上的痕迹通过一个track map来描述,dx11就是用tessellation来生成geometry,dx10(dx9已经去死了)上面只是normal变下。
冰
这里着实让我兴奋了下:
冰使用类似地形的多层材质的方法来渲染,这样冰的破损,再冻回来都可以有一个很好的表示,realtime时候的做法就和编辑地形材质一样,在material mask上面修改即可。
但是冰的破损如果只是这样,边缘就太润滑了,而且mask精度低的话,还会有明显的“格子”感,这里relic使用类似shadow中poisson filter的方法,使用一个贴图扰动uv,来达成碎冰状的感觉:
volume ambient occlusion
这里也展示了relic良好的技术结合产品的综合能力。