搞懂Material、 Texture、 Shader 在Unity世界的區別

簡介

在Unity的世界觀常常會發現除了Material這種常見的材質球以外,另外還有Shader、Shading 以及Texture等等不同的,在本篇文章會以Material、Texture、Shader作為主要的概念理解Unity裡面的Working Pipeline。

概念表格
英文中文本質釋義
Material材質數據集表現物體對光的交互,供渲染器讀取的數據集,包括貼圖紋理、光照算法等
Texture mapping紋理貼圖 圖像映射規則把存儲在內存裡的位圖,通過UV 坐標映射到渲染物體的表面
Shading底紋、陰影光影效果根據表面法線、光照、視角等計算得出的光照結果
Shader著色器 程序編寫顯卡渲染畫面的算法來即時演算生成貼圖的程序
GLSL程序語言OpenGL 著色語言

概念表格出處:https://www.uegeek.com/190608-material-texture-shaders.html

Texture

在Unity裡面Texture算是所有像是Shader 或是Material裡面不可或缺的“組件”,Texture可以包含對紋理的應用,以便材質的Shader可以在計算GameObject的表面顏色時使用紋理。 除了GameObject表面的基本顏色外,紋理還可以表示材質表面的許多其他方面,例如其反射率或粗糙度等等。

尤其是在PBR 世界裡面,這些Texture又可以說是各種map也可以說是channel的組件。

  • Base Color
  • Normal Map
  • Roughness Map
  • Height Map
  • Metallic Map

小結:依照你所要做的著色器或者材質,這些Texture就像是零件一樣等著被你放在對的位子上,並配合Shader著色器的各種屬性讓材質能夠在Unity裡面更完整的呈現真實世界的樣子。

Materials

在Unity裡面Material算是一種運用code實體化所集結而成的主體,在過去的Unity是沒有辦法直接使用Texture製作Material,而是要使用不同的Texture並寫下code串集而成,在現在3D流行著PBR世界的救贖下,Unity以更視覺化的形式方便我們製作材質球。

Materials用來把Mesh或粒子渲染器(Particle Renderers)貼到模型上。他們在定義對象怎麼被顯示發揮重要組成部分。

材質包括用於呈現網狀或顆粒著色器的參考,所以這些組件不能在沒有材質的情況下顯示出來。
Material這個需要結合Shader來講,計算機圖形學裡本身就沒有Material這個東西,引擎加入這個其實是在shader和主程序之間搭建了一座橋樑罷了,也可以說Material是一個著色器管理器,所以很多接口都是對shader的控制。這裡我們先講Material,後續章節會講到Shader。
Unity中材質和預設物是我們常用的兩種資源,可以在Project視圖中直接創建,非常好用,能夠簡化我們開發項目的過程。

以下可以用一張流程圖做個小結

Shader

Shader常被人叫做著色器,他包含用於計算每個像素顏色的數學計算和算法 ,根據照明輸入和Material配置進行渲染。簡單來說,用了Shader,一張圖(Image / Texture / ..) 可變成不同的材質(Material), 如圖片的效果。除了省了不少圖片外,還可以製造不同的質感,令場境更真實。

除了令Texture變成不同的Material,Shader還能應用在以下的情况:

  • 動態表面,例如水面、溶岩等等
  • UI動態特效,例如遊戲中的動態特效、酷炫過場等等
  • 提升Graphics Performance,例如減少realtime lighting
  • 圖片的Blending

在新版的Unity裡面已經將Shader更進化成為了Shader Graph,讓我們可以更視覺化的製作Shader Graph,當然這裡面包含了很多的數學以及物理上的知識需要思考進去。

Shader實際上是一個程序片段、一系列的指令,可以將三維Mesh以指定方式與顏色、貼圖等組合,完成複雜的計算輸出,會對螢幕上的每個像素同時下達命令。

也就是說,代碼必需根據像素在螢幕上的不同位置執行不同的操作。就像活字印刷,你的程序就像一個function(函數),輸入位置信息,輸出顏色信息,當它編譯完之後會以相當快的速度運行。

為什麼Shaders 運行特別快?因為它們常常運行在專門為並行處理(parallel processing)而設計的GPU 上面。

最後一個問題,用什麼來寫shaders 程序呢?答案是OpenGL 著色器語言(GLSL) 。GLSL 是用類C 語言寫成的,它為圖形計算量身定制,包含一些針對向量和矩陣操作的有用特性。

以下可以用一張圖作為整個流程的小結:

在其他情況下,可能需要使用其他內置著色器,甚至是自定義的書面著色器(例如液體,樹葉,折射玻璃,粒子效果,卡通效果,插圖效果或其他藝術效果,或其他特殊效果,例如夜視,熱視覺或X射線視覺)。

文獻參考:https://docs.unity3d.com/Manual/Shaders.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *