2010-11-24 190 views

回答

31

在OpenGL中,材質是定義照明模型如何與表面相互作用的一組係數。具體而言,定義每個顏色分量(R,G,B)的環境,漫射和鏡面係數並將其應用於表面並且有效地乘以撞擊表面的每種/顏色的光量。然後將最終的發射率係數添加到每個顏色分量,使物體看起來光亮,而不與其他物體發生實際的相互作用。

A 紋理另一方面,是一組1維,2維,3維或4維位圖(圖像)數據,根據紋理座標在表面上應用和內插到表面頂點。無論是否啓用了光照(並取決於紋理模式,例如貼花,調製等),紋理數據都會更改表面的顏色。經常使用紋理以向表面提供子多邊形級別細節,例如,對四邊形應用重複的磚和灰泥紋理以模擬磚牆,而不是模擬每個磚的幾何形狀。

在經典的(固定管道)OpenGL模型中,紋理和材質有些正交。在新的可編程着色器世界中,線條已經模糊不清。常常使用紋理來以其他方式影響照明。例如,凹凸貼圖是用於擾動表面法線以實現照明的紋理,而不是像常規「圖像」紋理那樣直接修改像素顏色。

5

雖然這些術語可以互換使用,但通常將位圖稱爲紋理。

雖然具有照明屬性,凹凸貼圖等的完全定義的紋理通常會被稱爲材質。

但是我應該強調,根據所使用的工具,它們的術語將被相關社區使用。

10

我認爲這些條款:

紋理是映射到3D對象的圖像。

材料模擬物理材料。以「玻璃」爲例。用普通紋理貼圖無法生成玻璃效果。它有像它如何在不同角度反射和折射光線的參數。材質也可以是簡單的紋理貼圖,所以有時這些術語意味着相同的東西。

13

這個問題表明對各種計算機圖形學概念的常見誤解。它是由着色器之前的思考和編碼產生的。

紋理不過是一系列一個或多個圖像的容器,其中圖像是一些值的維度(1D,2D等)的數組,其中每個值可以是介於1和4個數字。紋理也有一些特殊的技術來訪問它們的值,這些技術允許插值和最小化抽樣中的混疊僞像。

紋理可以包含顏色,但紋理不包含包含顏色的。紋理可以用來改變物體表面的參數,但並不是所有的紋理都可以用於。

紋理沒有直接與「材料」的關聯;你可以將它們用於各種各樣的事情(或者根本沒有)。

材料是照明中的概念。給定表面上的特定光線和點,從該表面反射的光線在該點處的強度(即:顏色)由光照方程控制。該等式是許多參數的函數。但是這些參數分爲兩類。

一類光方程參數是光參數。這些描述了光源的特性。點燈與定向燈對射燈。光強度(又是:顏色)是另一個參數。由於強度本身可能會根據表面點相對於光線的方向而變化(可能是手電筒或聚光燈),因此可以從紋理訪問強度。這就是有多少遊戲在黑暗的房間裏投射手電筒。

另一類光方程參數描述了該點表面的特徵。這些稱爲材料參數。材料參數或簡稱材料描述了所討論的表面的重要屬性。當時的正常情況非常重要。還有漫反射(彩色),鏡面反射,鏡面光澤(Phong/Blinn-Phong的指數)以及其他各種參數,具體取決於您的照明方程的綜合程度。

這些值從哪裏來?世界上的光參數往往是固定的。燈光不會移動每個物體(儘管如果您在物體空間進行光照,那麼每個物體都會有自己的光照位置)。光強度可能會有所不同。但是,這主要是它;幀之間發生任何其他事情,而不是在單個幀的渲染內。所以大多數燈光參數都是着色器制服。

材料參數可以來自各種來源。有效地使用着色器均勻意味着表面上的所有點具有相同的值。因此,您可以從制服中獲得漫反射顏色,這會使表面具有統一的顏色(當然,通過照明進行修改)。您可以通過將頂點屬性作爲頂點屬性或從其他屬性計算來改變每個頂點的材質參數。

或者您可以通過將紋理映射到曲面來提供參數。該映射涉及將紋理座標與頂點位置相關聯,以便紋理直接附加到曲面上。在渲染期間紋理在該位置被採樣,並且該值被用於執行照明。

您熟悉的最常見紋理「彩色紋理」僅僅是改變表面的漫反射率。紋理提供沿表面的每個點的漫反射顏色。

這不是只有紋理的功能。你可以輕鬆地改變表面上的鏡面光澤。或者光線強度。或其他任何東西。

紋理是工具。材料只是一組光參數。