GLSL——TBN矩陣

TBN矩陣

一、思考

我們研究一個矩陣的時候通常需要了解一個矩陣是從哪一個空間或者說矩陣而來的。如果搜索一下TBN矩陣運算公式可以發現其決定於物體座標系下的頂點和紋理座標系下的紋理座標。想到這裏我們需要明確TBN運算的輸入和輸出是什麼。

  • 先說輸入:輸入是一張紋理的rgb,分別代表紋理座標系下的xyz軸上的分量,而TBN是一一對應於xyz的。
  • 再說輸出:輸出是物體座標系下的法線向量。

然後我們很容易得出了結論,TBN是將一個點從紋理空間變換到物體空間的一個矩陣。這麼解釋對嗎?紋理空間、切線空間、物體空間,如何通過個矩陣找到對應關係。TBN的座標軸的座標值是物體空間下的,所以TBN其實就是從切線空間到物體空間的對應關係。而根據公式已經將紋理空間的xyz和TBN建立了對應關係,那麼即可通過rgb在TBN空間下找到一條向量。所以紋理座標對TBN:有求解關係,無對應變換關係。這樣即通過公式將紋理空間和切線空間合二爲一,剩下的就好理解了。

因此TBN構成一個變換矩陣,即每一個座標軸是對應矩陣的一列。就可將切線空間下的法線變換到物體空間下的法線。

二、推導應用

在使用法線貼圖(normal mapping)等技術時時,最關鍵的一個矩陣就是TBN矩陣,該矩陣用於將存儲在紋理空間中的法向量轉換到模型空間中(實際使用相反,爲了減少計算量,是將光線從模型空間轉換到了紋理空間,然後計算反射光線,因爲光線條數遠遠少於法向量數目)。

下圖展示法線貼圖的含義,圖中的藍色部分爲一塊法線紋理,上面的黑色小木棒(靈魂手繪)是每個像素的rgb代表的法線向量。就像一塊海綿上插了無數歪歪扭扭的針一樣……這樣當計算反射光線時,這些法向量模擬凹凸不平的表面,最後產生真實的感覺。
在這裏插入圖片描述

2.1 兩空間轉換矩陣原理

首先考慮向量空間中座標表示的問題,給定一個三維座標系的一組基:(向量X,向量Y,向量Z),那麼該座標系中的任意向量A(a1,a2,a3)的座標的含義爲:
在這裏插入圖片描述
,即A用基向量表示時各分量的值。如果再給定另外一個座標系的一組基::(向量U,向量V,向量W),並且給出XYZ向量在這個座標系中的表示xyz,那麼就可以很方便得到A向量在第二個座標系中的表示,(a1,a2,a3)∗[x,y,z]T。因此,[x,y ,z ]T可以看作是這兩個空間的轉換矩陣。

2.2 TBN矩陣推導

在這裏插入圖片描述
如上圖所示,假定△ABC紋理映射到模型中△abc這塊三角形上,紋理中存儲的rgb分量代表該點處法線在紋理空間中的座標,我們要將左邊的紋理空間中的法向量轉換到右邊的模型空間中(這裏先只討論uv二維的座標,第三維直接取模型空間的法向量即可),已知頂點的UV座標,模型座標以及法向量,根據上面的討論,現在要求出U ,V這兩個向量基在模型空間中的座標,即右邊 T,B的座標。我們可以列出一個方程組:
在這裏插入圖片描述
然後解出T,B即可。加上第三維座標時,一般會選擇垂直於TB平面的法向量N,這個向量是已知的。最後再將T,B,N歸一化,就得到了轉換矩陣。

但是開頭說過了,實際我們使用的變換是將光線從模型空間變換到紋理空間,因此要求的實際是逆過程的轉換矩陣,好在TBN矩陣是正交陣,轉置一下就得到了[T,B,N]−1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章