【UnityShader】數學基礎

總結

  1. 對於觀察空間(以攝像機爲原點的座標系),Unity使用的是右手座標系。對於模型空間和世界空間,Unity使用的是左手座標系。
  2. 矢量是指n維空間中一種包含模和方向的有向線段。
  3. 在Unity中,常規做法是把矢量放在矩陣的右側,即把矢量轉換成列矩陣來進行計算。
    CBAv = (C(B(Av)) 等價於vATA^TBTB^TCTC^T = ((vATA^TBTB^T)CTC^T)
    使用列向量的結果是,閱讀順序是從右到左的,即先對 v 使用A進行變換,再使用B進行變換,最後使用C進行變換。
  4. 大多數情況下,複合變換約定的順序是先縮放、在旋轉,最後平移。
  5. 繞x軸、y軸、z軸旋轉的變換矩陣,在Unity中,這個選擇順序是 zxy。

矢量運算

  1. 矢量和標量的乘法/除法
    kv = (kvx, kvy, kvz)
    v/k = (vx/k, vy/k, vz/k) (k != 0)

  2. 矢量的加法和減法
    a + b = (ax + bx,ay + by, az + bz)
    a - b = (ax - bx, ay - by, az - bz)

  3. 矢量的模
    |v| = vxvx+vyvy+vzvz\sqrt{vx*vx + vy*vy + vz*vz}

  4. 單位矢量
    模爲 1 的矢量

  5. 向量的點積(結果爲標量)
    aba \cdot b = (ax, ay, az) * (bx, by, bz) = ax*bx + ay*by + az*bz
    aba \cdot b = |a| * |b| * cosα
    aba \cdot b = bab \cdot a
    a(b+c)a \cdot (b + c) = aba \cdot b + bcb \cdot c
    意義:
      b 在 a 方向上的投影值

  6. 向量的叉積(結果爲矢量)
    a x b = (ax, ay, az) x (bx, by, bz) = (aybz - azby, azbx - axbz, axby - aybx)
    |a x b| = |a| * |b| * sinα
    不滿足交換律
      a x b != b x a
    滿足反交換律
      a x b = -(b x a)
      b x a = (bx, by, bz) x (ax, ay, az) = (by*az - bz*ay, bz*ax - bx*az, bx*ay - by*ax) = - (a x b)
    不滿足結合律
      (a x b) x c != a x (b x c)
    意義
      對兩個矢量進行叉積的結果會得到一個同時垂直於兩個矢量的新矢量;

  7. 應用
    計算垂直於一個平面、三角形的矢量;判斷三角面片的朝向;

矩陣(matrix)運算

矩陣與矩陣的乘法

  • 一個 r X n 的矩陣 A 和一個 n X c 的矩陣 B 相乘,結果 C=AB 爲 r X c 大小的矩陣;
  • C 的每一個元算 Cij = A 的第 i 行和 B 的第 j 列所有對應的矢量進行矢量點乘的結果;
  • 矩陣的乘法不滿足交換律
      AB != BA
  • 矩陣的乘法滿足結合律
      (AB)C = A(BC)

特殊的矩陣

方塊矩陣(方陣)
  • 指的是行與列數目相等的矩陣;
單位矩陣
  • 對角元素全部爲 1;
  • IM = M = MI
轉置矩陣
  • 把矩陣的第 i 行變成第 i 列,而第 j 列變成第 j 行;
  • 矩陣轉置的轉置等於原矩陣
    (MT)T = M
  • 矩陣串接的轉置,等於反向串接各個矩陣的轉置
    ABT(AB)^T = BTATB^T A^T
逆矩陣
  • 必須是一個方陣;
  • 矩陣與矩陣的逆矩陣相乘爲單位矩陣
      MM-1 = M-1M = I
  • 逆矩陣的逆矩陣是原矩陣本身
      (M-1)-1 = M
  • 單位矩陣的逆矩陣是它本身
      I = I-1
  • 轉置矩陣的逆矩陣是逆矩陣的轉置
      (MT)-1 = (M-1)T
  • 矩陣串接相乘後的逆矩陣等於反向串接各個矩陣的逆矩陣
      (ABCD)-1 = D-1 C-1 B-1 A-1
正交矩陣
  • 如果一個方陣 M 和他的轉置矩陣的乘積是單位矩陣的話,這個矩陣就是正交的;
      MMT = MTM = I
  • 如果一個矩陣是正交的,那麼它的轉置矩陣和逆矩陣是一樣的;
      MT = M-1
  • 快速判斷正交矩陣
    1)矩陣的每一行都是單位矢量;
    2)矩陣的每一行與另外的每一行相互垂直;

矩陣變換

  • 使用 3x3 矩陣就可以表示旋轉和縮放等線性變換;
  • 不可以使用 3x3 矩陣來表示一個平移變換,擴展到 4x4 的矩陣就可以了;
  • 齊次座標空間,即四維空間;
齊次座標

  一般指的是四維矢量

基礎變換矩陣

  純平移、純旋轉和純縮放的變換矩陣叫做基礎變換矩陣
[M3x3t3x101] \left[ \begin{matrix} M3x3 & t3x1 \\ 0 & 1 \\ \end{matrix} \right]
解釋:
  M3x3 用於表示旋轉和縮放
  t3x1 用於表示平移
  01x3 是零矩陣

平移矩陣

縮放矩陣

旋轉矩陣(是正交矩陣)

繞X軸旋轉

繞Y軸旋轉

繞Z軸旋轉

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