Unity3D中的shader基礎知識

xy849288321發表於2012-09-26

1.Unity中配備了強大的陰影和材料的語言工具稱為ShaderLab,以程式語言來看,它類似於CgFX和Direct3D的效果框架語法,它描述了材質所必須要的一切諮詢,而不僅僅侷限於平面頂點/畫素著色。

2.在Unity3D中建立一個Shader:Assets -> Create -> Shader

3.建立了Shader就可以應用到各個材質Material中,建立材質:Assets -> Create -> Material。然後就可以在材質的Inspector皮膚中,shader下拉框中可以找到新增加的shader

4.Rendering Paths是Unity3D中一個重要的概念,中文翻譯就是“渲染通道”。它可以很大程度上影響光線和陰影的渲染效果,但具體要依賴於具體的遊戲內容和硬體裝置,以及平臺。Unity3D中有三種渲染通道型別,從高到低分別為:Deferred Lighting,Forward Rendering,Vertex Lit。如果平臺或裝置顯示卡不能支援高階別的通道型別,Unity3D會自動選擇稍微低一些的型別。

三種型別的細節比較,詳情看參考手冊。

5.如何設定渲染通道:在Edit -> Project Setting -> Player中Inspector皮膚下面,三種釋出型別裡都有一個渲染通道的設定。

另外,每個攝像機的Inspector皮膚中,也都有一個渲染通道Rendering Path的設定。

6.渲染通道與shader的關係。

Deferred Lighting通道型別不關心有多少個光源會影響它,每個物體一般都會繪製兩次;類似地,Vertex Lit 只繪製一次。所以對於這兩種型別來說,shader對錶現效果的改變大多在於多重紋理方面。

Forward 通道型別的表現效果要取決於shader和場景中的光源。它有兩種基本的計算方式Vertex-Lit 和 Pixel-Lit。可以翻譯為逐頂點渲染法和逐畫素渲染法吧應該,對應著D3D中的頂點著色和畫素著色過程。

Vertex-Lit 用於對網格模型表面頂點進行光照計算,一次性將所有光源的影響都計算在內,所以無論場景中有多少個光源,這種方式繪製的物體只繪製一次。

Pixel-Lit 會計算每個畫素上面最終的光照,因此一個物體必須先唄繪製一次來獲得環境光和主方向光的光照資訊,再繪製一次來獲得其他每個額外的光源資訊。應用Pixel-Lit的物體的大小也會影響繪製的效率,越大的物體,繪製越慢。

Vertex-Lit 的開銷大於Pixel-Lit,但是Pixel-Lit可以提供很多非常好的效果。

7.Unity3D中的shader是通過改變那些直接影響遊戲物件的材質來使用的。

8.一個shader可以被應用於多個材質中,但一個材質只能應用一個shader。

9.一些shader被寫入了Unity3D底層裡,一部分作為內建shader被放置於standard assets裡,可供使用者使用


本文來自:http://blog.csdn.net/pizi0475/article/details/7647649