一文看懂材質/紋理 Material, Texture, Shading, Shader 的區別


一文看懂材質/紋理 Material, Texture, Shading, Shader 的區別

在計算機圖形學和三維設計中,有幾個容易混淆的概念。今天我們來一舉拿下。

概念整理

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

可以這么總結:

Material 是表現 Shading 的數據集。其他幾個概念都是生成這一數據集的資源或者工具。

這么多概念,無非是為了完成一個共同目標:用計算機表現真實可信的 Shading

Shading 是真實世界中的光影效果,它是由物體表面材質、燈光、觀察者的視角等多種因素共同決定的。要實現計算機的模擬生成,是一個非常復雜的過程。不過它的原理大概可以簡化為一個函數:

Intensity = Material (Light, Eye)

也就是說,光影的強度,是由 a.照在材質上的光 b.視線 共同決定的。

如何制造 Shading 效果?

萬物看起來不盡相同,它們有各自的材質和紋理。

紋理(Texture)是什么?

Texture is pattern or image applied to a surface to change its color, shininess or just about any other part of its appearance. —— Texture introduction - Udacity

紋理就是一段有規律、可重復的圖像。利用紋理,我們可以非常取巧地讓三維物體看起來更真實。

方法一:貼上皮膚

貼圖可以說是最簡單的材質方法:

  • 選定物體表面的某些區域
  • 更改這個區域的一些屬性(如顏色、反光度、透明度等)

那么 UV Mapping 又是什么?跟 Texture Mapping 有什么區別呢?

可以這么理解,Texture Mapping 是目標,把材質用一種規則映射到物體表面。而 UV Mapping 就是映射的規則。在這個規則中,給三維體每一個頂點增加兩個值 U 和 V,它們記錄了三維表面和二維表面的坐標對應關系:

via Texture UVs

有了映射關系,我們就可以分門別類地把影響光照的不同參數,都通過圖片映射到三維幾何體上。這些參數包括:

  • Diffuse Map 漫反射:模擬一個發光物對物體的方向性影響(Directional Impact)。它是光照模型中最顯著的組成部分

  • Specular/Reflection Map 鏡面:模擬有光澤物體上面出現的亮點,它的顏色更接近光而不是物體的顏色

  • Normal/Bump Map 法線:決定物體形狀的垂直於它的法線向量,提供有關物體表面深度的細節。每一種顏色代表了不同的軸向,看起來類似這樣:

  • Displacement Map 位移:使用高度圖將經過紋理化的表面的實際幾何點位置,沿着表面法線根據保存在紋理中的數值進行移位。相比法線,位移貼圖更多用於大規模的地形材質,包括懸崖、岩石等

  • Ambient Map 環境

  • Gloss/Roughness Map 光澤

方法二:長出皮膚

貼上皮膚的方法雖好,但是局限也很明顯。如果沒有合適的圖像,或者要創建真實世界中罕見的材質,皮膚就不好找了。這個時候需要讓程序幫忙「生長」出新的皮膚。

我們把這種程序叫做 Shaders。

如果你還記得,Shading 是始終如一的終極目標,那么應該就能明白為什么實現這個目標的程序叫做 Shaders 了。

它實際上是一個程序片段、一系列的指令,可以將三維 Mesh(網格)以指定方式與顏色、貼圖等組合,完成復雜的計算輸出(渲染器可讀取的點和顏色的對應關系),會對屏幕上的每個像素同時下達命令。也就是說,代碼必須根據像素在屏幕上的不同位置執行不同的操作。就像活字印刷,你的程序就像一個 function(函數),輸入位置信息,輸出顏色信息,當它編譯完之后會以相當快的速度運行。

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

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


好了,今天涉及到的概念實在太多了。希望對大家進入三維世界玩耍有所幫助。

Ref


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM