1. 程式人生 > >頂點著色器-經過的空間變換

頂點著色器-經過的空間變換

頂點著色器:

基本功能:就是把模型的頂點座標從模型空間轉換到齊次剪裁空間中。渲染過程可以理解成把一個一個頂點記過層層處理最終轉化到螢幕上的過程。

模型空間(Model Space):

模型空間也叫作 Object Space和Local Space(區域性座標),也就是模型在移動旋轉的時候,模型空間也會跟著移動旋轉。

世界空間(World Space):

Unity中,世界空間使用的是左手座標系,如果一個模型沒有父節點,Transform屬性就是模型在世界空間中的位置

頂點變換-模型變換(Model Transform):

頂點變換的第一步就是將頂點座標從模型空間變換到世界空間中,這個變換也叫作模型變換(Model Transform)
比如求一個模型的手指在世界空間中的位置(已知模型中心在世界空間中位置,手指在模型空間中位置,通過矩陣可以求出手指在世界空間中位置),可以通過矩陣變換 P(world) = M(modsl)P(modsl)

觀察座標(View Space)

觀察空間也叫作攝像機空間(Camera Space)。觀察空間可以認為是模型空間的一個特例-在所有模型中有一個特殊的模型即攝像機為中心的空間

剪裁空間(Clip Space)(投影矩陣-projection matrix)

通過視錐體進行剪裁,視錐體設計兩種投影型別-一種是正交投影(orthographic projection),一種是透視投影(perspective projection),透視投影是一個金字塔形,正交投影是一個長方體。

螢幕空間(Screen Space)

觀察空間(三維)到螢幕空間(二維)的轉換要經過投影操作(projection),進過投影變換後,我們可以進行剪裁操作,當完成所有的剪裁操作之後,就把視錐體投影到螢幕空間中。進過這個變換我們得到真正的畫素位置。而不是虛擬的三維座標。
在Unity中,從剪裁空間到螢幕空間的轉換是由Unity幫我們完成的,我們的頂點著色器只需要把頂點轉換到剪裁空間中,然後unity自動轉換到螢幕空間。

總結:模型到螢幕經過的轉換如下

  • 模型空間–>世界空間–>觀察空間–>剪裁空間–>螢幕空間
  • 其中:模型空間–>世界空間–>觀察空間–>剪裁空間 分別進過 MVP矩陣進行變換
  • 剪裁空間–>螢幕空間是由Unity自動完成的。
  • 除觀察座標用的是右手座標系,其他都用左手座標系
  • 在頂點著色器中,通常串聯成一個矩陣,即MVP矩陣,用於將頂點從模型空間轉換到剪裁空間中。
    最後,在頂點著色器中,通常串聯成一個矩陣,即MVP矩陣,用於將頂點從模型空間轉換到剪裁空間中。