1. 程式人生 > >Unity3D -- 圖形 -- Shader 與材質的關係

Unity3D -- 圖形 -- Shader 與材質的關係

在Unity中材質與Shader的關係很緊密。Shader中的程式碼定義使用什麼樣的屬性和資源。材質允許我們調整屬性以及指定資源。

上圖的Shader 是通過一個材質實現的

要建立一個新的材質,可以通過 Material, use Assets->Create->Material ,然後可以把它直接拖到遊戲物件上以應用之。

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 庫中還有更多。