【UnityShader】座標變換之法線變換

  一般來說,點和絕大部分方向矢量都可以使用同一個 4x4 或者 3x3 的變換矩陣把其從座標空間 A 變換到座標空間 B中。但變換法線的時候,如果使用同一個變換矩陣,可能無法維持法線的垂直性。如下圖所示,在進行非統一縮放時,如果使用和變換頂點相同的變換矩陣來變換法線,就會得到錯誤的結果,即變換後的法線方向與平面不再垂直

  切線是由兩個頂點之間的差值計算得到的,因此,可以直接使用用於變換頂點的變換矩陣來變換切線。
解釋:
  座標空間A中兩點 a,b,切線 t,法線 nor。經過變換後在座標空間 B 中的點 A,B,切線 T,法線 Nor。變換矩陣爲 Mab

T = B - A = Mab(b - a) = Mab * t

  假設法線變換時使用的變換矩陣爲 G

TT Nor = (Mab t)T (G nor) = tT MabT G nor = 0

  已知 tT nor = 0,如果 MabT G = I,那麼等式成立

G = (MabT)-1 = (M-1ab)T (轉置矩陣的逆矩陣是逆矩陣的轉置)

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