為了獲得更真實(shí)的細(xì)節(jié),一張或多張紋理映射將會(huì)應(yīng)用到物體的表面,正如下圖所顯示的。物體表面上每一點(diǎn)的紋理像素都能在紋理映射中找到,它們遵循光照公式以某種方式與光照結(jié)合在一起。在最簡單的情況下,一個(gè)從漫反射紋理映射得到的樣例可以用于調(diào)節(jié)漫反射的顏色。
讓顏色T代表表面上一點(diǎn)對應(yīng)的紋理映射中的過濾樣本。使用這個(gè)顏色來調(diào)節(jié)漫反射顏色將會(huì)產(chǎn)生漫反射光照方程的擴(kuò)展版本:
注:漫反射光照方程為:
正如紋理映射可以用于調(diào)節(jié)光照方程中的漫反射部分一樣,我們也可以使用紋理映射來調(diào)節(jié)鏡面反射。這樣的一個(gè)紋理有時(shí)被稱作高光貼圖(gloss map),它決定了表面上每一點(diǎn)的鏡面光澤程度。使用顏色來表示高光貼圖中的一個(gè)過濾樣本,我們可以這樣擴(kuò)展鏡面反射方程:
注:鏡面反射光照方程為:
從紋理映射得到的樣本真實(shí)顏色決定于其對應(yīng)的物體紋理坐標(biāo)。紋理坐標(biāo)要么是預(yù)先計(jì)算好的,存儲(chǔ)在三角形網(wǎng)格的每個(gè)頂點(diǎn)中,要么是在運(yùn)行時(shí)計(jì)算來產(chǎn)生一些特殊效果。在渲染三角形面片的的時(shí)候,紋理坐標(biāo)使用公式
來進(jìn)行紋理坐標(biāo)的插值。對于紋理圖的每個(gè)頂點(diǎn)而言,可能有1到4個(gè)坐標(biāo),它們被標(biāo)記為s,t,p和q。接下來的幾個(gè)章節(jié)將會(huì)介紹幾種不同的紋理映射,以及每種紋理映射中,我們?nèi)绾问褂眉y理坐標(biāo)在紋理映射中找到對應(yīng)點(diǎn)。
標(biāo)準(zhǔn)紋理映射
在一,二或三維的紋理映射,我們使用對應(yīng)的紋理坐標(biāo)來查找紋理像素。正如下圖所顯示的,紋理映射的整個(gè)寬度,高度以及深度分別對應(yīng)著s,t以及p方向0到1之間的坐標(biāo)值。
一個(gè)一維的紋理映射可以被看作一個(gè)只有單一高度方向像素的二維紋理映射。同樣地,一個(gè)二維的紋理映射可以被看作是一個(gè)只有單一深度方向像素的三維紋理映射。如果t和p坐標(biāo)沒有被特別標(biāo)注,那么我們就認(rèn)為它們?yōu)?。
投影紋理映射
第四個(gè)紋理坐標(biāo)將在投影紋理映射中使用,它的應(yīng)用將在這一部分介紹。q坐標(biāo)值和齊次坐標(biāo)中的w非常類似,在沒有特別說明的情況下,它的值一般是1。坐標(biāo)s,t,p的值將除以q的坐標(biāo)值。對于一個(gè)兩個(gè)端點(diǎn)紋理坐標(biāo)分別為(s1,t1,p1,q1)和(s2,t2,p2,q2)的掃描線,我們可以使用方程
來計(jì)算內(nèi)插值s3和q3,其中含中間參數(shù)這兩個(gè)值的商給出了紋理映射樣本中的s坐標(biāo):
類似的表達(dá)式可計(jì)算出投影的t,p的紋理坐標(biāo)。
一些投影坐標(biāo)映射是點(diǎn)光源投影周圍環(huán)境圖像的模擬,正如下圖所顯示的,圖像的投影隨著與點(diǎn)光源的距離增大而增大。這樣的效果是由使用一個(gè)4X4的矩陣把物體的頂點(diǎn)位置坐標(biāo)映射到紋理坐標(biāo)(s, t, 0, q)上得到的,這樣再除以q,就能產(chǎn)生正確的投影圖像的2D紋理映射坐標(biāo)(s,t)。
假設(shè)處在P點(diǎn)的點(diǎn)光源朝向?yàn)閆。讓單位向量S和T處在與向量Z垂直的平面上,讓它們與投影紋理圖像所處的s,t坐標(biāo)方向重合。點(diǎn)光源照射的表面上的每個(gè)頂點(diǎn)位置(x,y,z,1)首先必須被轉(zhuǎn)換到以點(diǎn)光源為原點(diǎn)的坐標(biāo)系統(tǒng)中,其中x,y和z坐標(biāo)對應(yīng)著S,T和Z向量的方向。使用列為向量S,T,Z和P的矩陣的逆可以實(shí)現(xiàn)這一點(diǎn)。如果向量S和T是相互垂直的(i.e.,投影圖像不是傾斜的),那么變換可以寫作:
注意這個(gè)矩陣轉(zhuǎn)換到了左手坐標(biāo)系,
因?yàn)镾 X T = - Z
現(xiàn)在,我們需要用第二個(gè)矩陣來乘以上面這個(gè)矩陣,來完成投影。正如我們定義視角平截體的焦距一樣,我們以頂端夾角a的形式來定義點(diǎn)光源投影的焦距:
令a為紋理映射的縱橫比,這等價(jià)于它的高度除以它的寬度。每個(gè)頂點(diǎn)位置都需要被投影到與點(diǎn)光源距離為e的平面上,在這里我們想要把x方向處在[-1,1]區(qū)間的點(diǎn)映射到[0,1]上,以及把y方向上處在[-a,a]范圍的點(diǎn)映射到[0,1]上。這個(gè)矩陣
完成了這樣的映射,并且在s,t坐標(biāo)除以q后完成了投影的過程。結(jié)合前面給出的兩個(gè)矩陣(M1M2),我們可以用矩陣M = M2M1來推出投影點(diǎn)光源圖像。
立方體紋理映射
另外一種映射物體紋理的方法是通過使用立方體紋理映射完成的。立方體紋理映射經(jīng)常用于在模型表面近似環(huán)境光的反射。如下圖,立方體紋理映射包含了六個(gè)二維成分,它們分別對應(yīng)著立方體的六個(gè)面。s,t和p坐標(biāo)表達(dá)了從立方體中心發(fā)出的指向樣本像素的方向向量。
樣本對應(yīng)哪一個(gè)面取決于絕對值最大的坐標(biāo)的符號。另外兩個(gè)坐標(biāo)將除以最大的坐標(biāo)值,然后利用下面這張表重新映射到[0,1]范圍內(nèi),以產(chǎn)生2D紋理坐標(biāo)(s',t')。這個(gè)坐標(biāo)將用于對相應(yīng)的立方體紋理映射面采樣二維紋理映射,下圖顯示了立方體映射坐標(biāo)和對應(yīng)的六個(gè)面的朝向。
紋理坐標(biāo)和立方體紋理映射的結(jié)合通常是在運(yùn)行時(shí)產(chǎn)生的。例如,環(huán)境映射可以通過計(jì)算相機(jī)方向的反射并把它來存儲(chǔ)到三角形網(wǎng)格每個(gè)點(diǎn)的(s,t,p)坐標(biāo)來實(shí)現(xiàn)。反射方向的計(jì)算一般是在硬件中完成的,所以這可以非常高效的完成。
立方體紋理映射在一些圖形硬件中的應(yīng)用是標(biāo)準(zhǔn)化向量。一個(gè)標(biāo)準(zhǔn)化立方體映射,是一個(gè)在六個(gè)面存儲(chǔ)按RGB顏色編碼的向量組,而不是存儲(chǔ)顏色圖像的立方體紋理映射。它存儲(chǔ)的向量數(shù)組的形式如下:
立方體映射中,存儲(chǔ)在每個(gè)面像素點(diǎn)的向量,是像素采樣的單位長度向量(s,t,p)。標(biāo)準(zhǔn)化立方體映射的使用在執(zhí)行一些每像素光照時(shí)非常合適,因?yàn)樵谌切伪砻孢M(jìn)行法線插值,可以產(chǎn)生一些長度小于1的法線向量。
-
反射
+關(guān)注
關(guān)注
0文章
67瀏覽量
15864 -
紋理映射
+關(guān)注
關(guān)注
0文章
4瀏覽量
1762
原文標(biāo)題:紋理映射原理詳解
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論