一種高效的SSS模擬
次表面反射普遍用在皮膚, 植物葉子, 蠟燭和玉這類物體上. 之前在Signed Distance Fields in Real-time Rendering最後用SDF模擬過. 其他常規做法比較複雜, 我以為其中最為簡單的要數Eric Penner[2]的方法, 但是其計算量還不是最低的, 同年的GDC里, DICE的工程師Colin和Marc[1]給出了一個非常hack的快速模擬, 基本演算法僅消耗13個ALU指令, 雖然其基本物理不正確, 但是看起來的效果卻非常令人滿意.
他們的做法原理主要是利用AO, 一般情況下大家用AO模擬GI的陰影, 利用的是某一點被光線照到的概率. Colin和Marc根據Sousa[3]的啟發非常聰明的利用這個特性: AO也可以表示物體內部光線在物體內部穿射時候的概率, 來快速模擬BSDF(BRDF + BTDF). 這個方法的缺點是需要預先烘焙的一個AO圖, 並且對非凸包圖形效果模擬不夠好. 雖然如此, 但是這個方法對計算量的是所有SSS模擬中最少的, 所以還是非常推薦大家靈活使用。
下面是利用Colin的方法渲染的效果:
使用的shader指令統計:
一些製作tip:
- 物體的Reverse AO我是在Max里烘焙的.
- AO最好不要有「全黑」或者「全白」, 不然特定角度看起來會非常假.
- AO這張圖解析度不需要很高,但是採樣時候需要很高,不然噪點也會影響最終效果。
如果跟lightmap混合使用,可以做出非常精美的效果, 下圖是寒霜2里的效果:
Talk is Cheap, Enjoy Yourself!
[1] Colin Barré-Brisebois, Marc Bouchard, GDC 2011, Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look, 2011.
[2] Eric Penner, SIGGRAPH 2011, Pre-integrated Skin Shading, 2011.
[3] Sousa, Tiago. 「Vegetation Procedural Animation and Shading in Crysis,」 GPU Gems 3, Hubert Nguyen, Ed., Addison-Wesley, 2008: pp. 373-385.
推薦閱讀:
※遊戲性能優化(2)-budget
※讓角色半透明:樹形結構(三)
※作大死項目筆記 - 從掃描自己開始
※基礎5——FPS——對性能的測量
※《伏龍記》ea實錄(week6)