文章鏈接: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良好的技術結合產品的綜合能力。
- 雪地場景的ao是格外的重要----場景顏色簡單,偏白色(簡直就是展示ao的專用場景么)
- rts游戲沒有必要做到那么精細的ao
- 重用snow shadow map來產生ao,而且這個ao是volume based,而不是screen space這種在理論上還是有不少信息缺失的情況
效果不俗:

**其他**
**暴風雪的優化**:
使用1/4 buffer,可以大幅度提高性能
**deferred shading**:
和之前在本博客提到的多個地方也比較一致,deferred shading如果只是認為為多光源而生就太不到位了,它很好的簡化了渲染pipeline,把geometry&material信息與shading分開,提升了整個pipeline的結構。
如果pipeline復雜到一定程度,那么選擇deferred shading就是非常必要的了
- 前言
- PracticalOcclusionCullingInKillZone3
- KillZone3的版本發布工具
- BattleField 3和NeedForSpeedTheRun中的渲染技術
- Shiny PC Graphics in Battle Filed 3
- Cascaded Light Propagation Volumes for Real-Time Indirect Illumination
- [crytek]Spherical Skinning withDual-Quaternions and QTangents
- [gdc12]神秘海域的水技術
- 《鋼鐵俠》等電影中的image based lighting和physical shading
- CompanyOfHeroes2渲染技術
- [sig13]Lighting technology of "The Last Of Us"