Unity3D -- 圖形 -- Shader 與材質的關係
阿新 • • 發佈:2018-12-26
在Unity中材質與Shader的關係很緊密。Shader中的程式碼定義使用什麼樣的屬性和資源。材質允許我們調整屬性以及指定資源。
上圖的Shader 是通過一個材質實現的
要建立一個新的材質,可以通過 Material, use
,然後可以把它直接拖到遊戲物件上以應用之。Shader 的技術細節
Unity 中大量的 Shader 系統。讓我們可以調整遊戲的內建圖形效果。其工作原理是像這樣的:
Shader 從根本上說是為遊戲內建的shading外觀定義了一個公式。在Shader內部有一些屬性(典型地是紋理),Shader是通過材質實現的,材質是直接附加到每個GameObject上的。在材質內部,可以選擇一個Shader,然後定義Shader要用到的屬性(通常是紋理和顏色,但還有很多其他的)
過程相當複雜,流程是下面這樣的:
左邊的圖是Carbody Shader,2個不同的材質通過Blue car Material和Red car Material建立的,這2種材質都各指定了2個紋理:Car Texture 定義了車的主要紋理,另一個紋理是Color FX。Shader的這些屬性讓車看起來有兩種色調。
可以看到紅車的前面:面對攝像機的是黃色,然後角度越大就越褪成紫色。材質被附加到兩個車上。車輪,燈和車窗沒有變色效果,因為要用到不同的材質。
圖的底部是一個Simple Metal Shader,Wheel Material 用了這個Shader。
具體地說, Shader 定義了:
- 渲染物體的方式,包括根據使用者的不同的顯示卡使用不同的方式。
- 任何用於渲染的頂點和片斷的程式。
- 材質內部可賦值的紋理屬性。
- 材質內部可賦值的顏色和數量設定。
材質定義了:
- 用哪個紋理渲染。
- 用哪個顏色渲染。
- 任何其他資源,比如shader渲染要用到的Cubemap。
Shader是圖形程式設計師的命中註定。用ShaderLab語言建立,非常簡單。但是,要讓shader很好地執行在各種各樣的顯示卡上就不容易了。
Unity直接內建了大量的 shaders,在 Standard Assets Library 庫中還有更多。