2016年1月13日 星期三

Surface Shader-官方文檔中文翻譯

以下為我個人不負責任翻譯,有錯可以來信告知!
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


沒有留言:

張貼留言