凹凸對映和法線紋理
阿新 • • 發佈:2021-07-11
凹凸對映
凹凸對映就是通過一些特殊的紋理來增加資訊量,通過這些附加資訊來修改模型表面的法線
有兩種實現方法:
- 高度紋理
- 法線紋理
法線紋理
法線紋理直接儲存了表面法線,本質就是將法線轉換成了顏色儲存了起來,算是一種資料可視化了
值得注意的是法線紋理中的法線和模型中法線一點關係都沒有,就如球體的法線都是過球心向外的射線,而法線紋理可以由你自己決定(因為是額外的調整資訊)
法線的 xyz
分量都在 [-1,1] 之間,而畫素的(顏色)分量在 [0,1] 之間
所以儲存時需要簡單的對映
\[pixel=\frac{normal+1}{2} \]從法線紋理讀取資料後,逆對映獲取法線
\[nomal = 2*pixel-1 \]法線紋理分為兩種:模型空間下的法線紋理、切線空間下的法線紋理
模型空間下的法線紋理
模型空間下的法線紋理五顏六色,所有法線共用一個模型座標系,朝各個方向的法線都有,對映後顏色差異極大
切線空間下的法線紋理
切線空間是對每個頂點來說的
座標原點是頂點本身,z 軸是頂點本身(即模型)的法線方向,x 軸是頂點的切線方向,y 軸(又叫副切線)可由其他兩軸叉積出來,副切線的方向由切線的w
分量決定
如果頂點沒有凹凸效果,即當前頂點在切線空間中的法線就是 z 軸本身(0, 0, 1)
,對映後的為RGB(0.5, 0.5, 1) 淺藍色
由於凹凸效果一般只要對原法線做微小的變化,所以切線空間下的法線紋理一般都有大面積的藍色,如下圖:
兩種法線紋理的優缺點
模型空間:更直觀,突變較少,不可壓縮
切線空間:可壓縮(z
可由xy
推導),
一般使用切線空間下的法線紋理
切線空間下對切線空間的法線紋理的使用
模型空間到切線空間的轉換
將光源方向和視角方向轉換至切線空間計算
推導 z 值
由於法線都是單位向量,利用三維的勾股定理可求出 z
舉個例子 假設讀取到上面的RGB(0.5, 0.5 ,1)
如果有壓縮就是不儲存 z,即讀取到(0.5, 0.5)
到這裡就已經獲取了切線空間下所有光照計算有關的矢量了