Unity 的表面着色器 (Surface Shader) 是一種代碼生成方法,用它來編寫光照着色器比用低級的頂點/像素着色器程序容易得多
Normal-Diffuse 是一個簡單的光照模型,光照強度隨着物體表面和光入射角夾角的減小而減小。光照強度只和入射角度有關,與攝像機無關。
Bumped Diffuse 基於 Lambert 光照模型,同時使用了 normal mapping 技術來增加物體表面細節。相對於通過增加剖分來表現物體表面細節的方式,normal mapping 並不改變物體的形狀,而是使用一張稱爲 Normal Map 的特殊紋理來達到這種效果。在 normal map 中,每個象素的顏色代表了該像素所在物體表面的法線,然後通過這個法線(而不是通過物體模型計算而來的法線)來計算光照。可以說 Normal Map 在計算光照的過程中“高效地修改”了整個模型。
最簡單的一種Shader之一,所有照射在該物體上的光在一個Pass裏面渲染完,光源只在頂點計算。所以不會有任何基於像素渲染得效果
Specular 使用和 Diffuse 相同的光照模型,但是它添加了一個和觀察角度相關的反射高光。一個被稱爲 Blinn-Phong 的光照模型。這個光照模型包含了一個反射強光,使它與物體表面角度,光的入射角度以及觀察者角度都有關係。實際上這種高光計算方法是對實時光源模糊反射的一種具有可行性的模擬。模糊的等級通過 Shininess 變量控制。
和 Specular 一樣的光照模型,相比 Specular 而言,它額外使用一張 Tangent Space Normal Map 紋理貼圖來描述物體表面法向量的變化以及增加物體表面的細節。一般而言,這個 shader 的渲染代價會比較大。
這是一個普通的 diffuse shader 加上一些額外數據的 shader。它允許你定義第二張紋理,稱爲 Detail Texture。當 Camera 靠近時,Detail Texture 逐漸顯示出來,這個着色器一般用於地形。Detail 紋理是覆蓋在主紋理上面的。Detail 紋理中深色的部分將會使得主紋理變深,而淡色的部分將會使主紋理變亮,Detail 紋理通常是淺灰色。(與Decal 裏面 Decal 紋理不同的是,Decal 紋理是 RGBA,通過 alpha 控制 Decal Texture 與 Main Texture 的融合,而 Detail 的紋理是 RGB,直接是兩張紋理的 rgb 通道分別相乘再 *2,就是說,Detail 紋理中顏色數值等於 0.5 時不會改變主紋理顏色,大於 0.5 時會變亮,小於 0.5 時會加深)
Parallax Normal mapped 與傳統的 normal mapped 一樣,但是對“深度”的模擬更佳。額外的深度效果是通過 Height Map(高度圖)來實現的。Height Map 在 Normal map 的 alpha 通道里面保存。