以下為我個人不負責任翻譯,有錯可以來信告知!
Emal:ImL1s@outlook.com
Surface Shader:
編寫自定義光照的Shader是很複雜的一件事情,那必須牽扯到很多光照與材質的交互、不同光的類型,不同陰影的選擇,不同的呈現路徑(前向和延遲呈現),而且著色器必須以某種方式處理所有複雜的計算。
在Unity中,表面著色器是一個包裝過的API,使得Surface Shader比低級別的頂點/像素著色器程式更容易編寫。
請注意,他不是一個自定義程式語言,它只是將Vertex/fragment Shader包裝起來的一種API,如果不使用Surface shader,將必須手寫其他包裝過的程式碼。你仍須將Shader寫在:CG / HLSL程式碼區塊中。
運作方式:
定義一個“Surface Shader”,把你需要輸入任何的UV或數據,填入輸出結構SurfaceOutput 中。 SurfaceOutput基本上描述了物體表面的特性(它的albedo color-物體反射出的顏色,也就是物體的顏色、normal-凹凸,emission-自發光,specularity-鏡面反射 等).你必須將Shader寫在Cg/Hlsl區塊中.
表面著色器編譯,然後計算出需要怎麼樣的輸入、並且將需要的數據輸出… 等等,並產生實際的頂點和像素著色器,以及渲染通道處理方式是forward-前向渲染 還是 deferred-延遲渲染.
表面著色器的標準輸出structure(結構體)是這樣的:
struct SurfaceOutput
{
fixed3 Albedo; // diffuse color
fixed3 Normal; // tangent space
normal, if written
fixed3 Emission;
half
Specular; // specular power in 0..1
range
fixed Gloss; // specular
intensity
fixed Alpha; // alpha for
transparencies
};
|
待續....
translator:ImL1s
可轉載,但上要附上作者名稱+原文出處,感謝您:D
沒有留言:
張貼留言