2016年1月27日 星期三

Unity 5.3中的GGX著色器

作者:MORTEN MIKKELSEN 原文

在Unity 5.3的標準著色器中,我們改為使用GGX來實現BRDF,來進行點光源和平行光等光源的光照計算,當然也可以計算基於圖像的光照。此外,我們徹底修改了方體貼圖的計算,使其能夠以較少的執行時間達到精確無噪點的結果,這項功能將在Unity 5.4中完成。GGX與標準化的Phong算法最大的區別在於GGX所擁有的微表面分佈圖,有著更高更窄的峰值,且緊隨著更大更長的尾巴,如下圖所示。

這讓最後的光照效果變成:GGX具有更亮的高光部分並在周圍蔓延著光暈,給人以更加真實的視覺效果。
如下圖所示:


GGX與傳統的標準化Phong光照對比


跨行業也能相容的材質

在學術界基於物理的BRDF光照模型一般用roughness(粗糙度)這個參數來控制微平面分佈函數,而roughness被定義為分佈函數的均方根斜率。

一個常見的誤解是認為在CG中使用的粗糙度貼圖和學術上所說的roughness是一回事。之所以學術上的roughness沒被用在紋理貼圖或者是使用滑塊控制是因為它的“粗糙度”並不是均勻分佈的,導致難以操作,並且紋理貼圖的有限位精度難以達到比較好的效果。

為了避免誤解,Unity使用smoothness(平滑度)而不用roughness這個字眼,smoothness在shader中會使用公式(1-smoothness)^2來轉換為學術上的roughness參數。通過這個轉化,我們得到的結果和roughness一樣,只是剛好顛倒了一下,也就是說0.0對應於最粗糙的表面而1.0對應於最光滑的表面。
我們認為這樣的對應方式給人的感覺更為直覺。這樣一個標準化的分佈方式最大的意義在於我們可以在Unity中導入其它外部工具製作的材質,並在Unity中實現非常接近的效果。 

因為如今業界大部分的CG繪製工具都支持smoothness貼圖。不過光是這樣並不能保證可以達到一模一樣的效果,但是可以肯定的是,漫反射光與高光的比例以及整體的高光模糊度都會是非常接近的。

下圖是由Allegorithmic公司的Wes McDermott提供的Unity 5與Substance Painter的效果對比圖。從圖中我們可以看到兩者的視覺效果是非常相似的。



Unity 5.4中的改進


在Unity 5.4中我們將以改進方體貼圖計算速度與基於圖像光照的計算(IBL)達到一個無噪點的視覺效果。

如下圖所展示在Unity 5.4中一個球體的光照計算與傳統的光跡追蹤法的效果比較。

傳統的光跡追蹤法即使每個圖素執行了50000次的光追蹤,最終的光照還是帶有大量的噪點。追根究柢,光跡追蹤法在進行BRDF採樣時,對於環境貼圖中類似太陽這樣的奇點(Singularities)有著天生缺陷。這問題已在Unity 5.4版本中已經得到解決,並且方體貼圖的離線計算比Unity 5.2快了將近兩倍的速度。

沒有留言:

張貼留言

著作人