法線變換的推算
之前一直不是很理解《unity shader入門精要》中的法線變化,網(wǎng)上查也不是很明白這里做一個(gè)所以自己就之前照著書中的公式做了一個(gè)推導(dǎo)過程。
Unity的空間轉(zhuǎn)換都是對(duì)坐標(biāo)/方向做3種和變換矩陣的矩陣乘法操作分別是位置偏移,旋轉(zhuǎn)和縮小 。法線是一個(gè)方向所以位置偏移對(duì)它沒有作用。
接下來我會(huì)二維坐標(biāo)系中演示一個(gè)坐標(biāo)為(0,0),(0,1),(1,0)的三角形并且在(0.5,0.5)上面畫法線來測(cè)試旋轉(zhuǎn)和縮小是否會(huì)對(duì)法線進(jìn)行影響




參考《Unity Shader入門精要》的方法,先假設(shè)一個(gè)變換矩陣(G)來變化空間A的法線(NA)到b空間,而空間B的切線(TB)等于用于空間變換的矩陣(MA->B)乘以TA(空間A的切線),由于法線和切線不同空間下都垂直得出公式可得:

進(jìn)一步推導(dǎo)后可得

接下來我們來逐步分析這些公式:
第一步:

點(diǎn)積操作能變成轉(zhuǎn)置矩陣相乘是因?yàn)橐粋€(gè)1*n的矩陣乘以n*1的矩陣的矩陣和點(diǎn)積的計(jì)算方法都是相同的

第二步

這里依賴轉(zhuǎn)置矩陣的性質(zhì)

第三步

依賴矩陣的性質(zhì)滿足結(jié)合律不滿足交換律

最后
TA的倒置矩陣乘以NA等于TA和NA的點(diǎn)積(和第一步性質(zhì)相同)等于0.
而只有單位矩陣不影響這個(gè)公式

因此

標(biāo)簽: