2016/11/16

V-Ray導入alShaders shader

原文 / v-rays implementation of the anders langlands alsurface shader
略譯 / Hammer Chen

(圖片請見原文連結)
alSurface shader的歷史
alShaders中的“al”是以作者Anders Langlands來命名的。 他目前任職於Weta Digital的VFX sequence主管 。他寫了一系列針對Arnold渲染器的shaders Anders的動機是希望導入製作上需要的shaders到Arnold原本沒有的功能中。其中一個他寫的最重要的shaders就是alSurface shader 也被稱為uber-shader,這個shader被大家拿來用在實體 、金屬、 透明物、 反射物,甚至次表面反射, 例如皮膚材質。他寫的shaders一直在業界廣為推崇, 但是其中最為津津樂道的是能重現皮膚材質。最近他開放了shader的原始碼, 讓其他人可以植入到別的渲染器中。他甚至開了一個網頁專門介紹他的alShader。

V-Ray首次導入alSurface shader
由於許多V-Ray用戶的要求 Luc Begins在V-Ray論壇上, 加上這個shader現在已經是開放程式碼的。 Vlado決定要植入alSurface shader的部份功能, 特別是皮膚材質的部份。這個shader會考量到diffuse, 兩階的specular與次表面散射, 唯一缺乏的部份是折射與透明度, 可能之後會添加進去。以下是V-Ray的alSurface shader的分解說明:

由於導入alSurface shader的目的是圍繞在皮膚材質, 因此我們來看看跟其他的皮膚材質 Arnold中的aiSkin shader與VRay Skin Mrtl這三者有什麼差異 (事實上作法很類似)

以下是差異點:
Diffuse: 
VRay Skin Mtl: Diffuse 與 Sub-Surface color事實上是兩個不同的map然後以diffuse amount混合在一起。
alSurface: Diffuse與 Sub-Surface color用的是同一張map, 然後有一個SSS控制surface如何受到subsurface scattering與Lambertian diffuse的影響

Sub-Surface Scattering次表面散射:
VRay Skin Mtl:有三階的次表面散射, 每個都平等地混合在一起,使用了標準的dipole model計算SSS
alSurface:同樣也有三階的SSS, 但是每個各有權重控制, 也提供幾種SSS模式 。Vlado已經導入了其中兩種到V-Ray版的alSurface shader Diffusion法, 可以比標準的dipole model保留更多細節 Directional法 允許使用單一個Scatter maps 產生更多的細節保留。

Specular高光:
VRay Skin Mtl: 使用了兩個lobe specular模型, 具有銳利的 與廣的反射, 同時使用Phong作為reflective BRDF 。這個模型在很多狀況都很好用, 但是在平視(glancing angles)的角度時 他會因此減切到SSS 產生變暗的問題。 這是因為Fresnel效應是根據一個函數計算觀察角度與表面法線角度 ,而忽略了從光線照明表面的方向

alSurface: 這個模型也用了兩個lobe specular , 但是除了使用如Phong或Blinn的平滑BRDF 它還此用了微表面(microfacet) 。Fresnel效應則是根據一部分BRDF的計算(也就是所謂的glossy Fresnel) 並且會考慮到觀察的角度, 表面法線與光線的方向 ,使用者可以選擇GGX與 Beckmann BRDF兩種模型 根據微表面的特性 可以避免掉變暗的問題 從平視角度到逆反射(retro-reflection) 除此之外這個模型在同樣的平視角度不包含SSS。

其他明顯的差異
用在Fresnel的IOR在兩個shader都不同, 因為計算fresnel的方式有所不同。 因此, 如果用戶使用相同數值 alSurface shader的看起來會反射更強。

VRay Skin Mtl使用glossiness 因此高數值就更光亮 而alSurface shader使用roughness因此數值越高就越diffuse 因此貼圖就必須要先反轉 如果你要轉換套用的話

VRay Skin Mtl以diffuse混合 表示數值1等於100% diffuse,  alSurface shader則是根據SSS混合 表示數值1等於100% SSS 如果你有用到貼圖Single Scatter Map 可能也需要反轉才能套用

[相關資訊]
alSurface shader Wikihuman project

No comments: