16. 坐標空間概念
目錄

目的
渲染流水線頂點變換過程,
學習不同的空間坐標系。
UE5使用空間轉換節(jié)點。
了解空間
經常使用的空間關系有這些。
切線空間
對象空間(模型空間)
世界空間
視圖空間
攝像機空間
TransformVector | 坐標空間轉換
UE4空間轉換節(jié)點

這里從什么空間轉換到什么空間


所有空間都是由一個原點定義的,(x,y,z)三個方向組成
世界空間 | ?WorldSpace
場景中的一切物體,包括模型,燈具,相機都共享一個絕對位置這就是世界坐標

UE4場景中的(0,0,0)點就是世界的原點。以這個原點的位置空間就是世界空間。
然后 紅色 藍色綠色3個方向的向量代表世界的方向。
世界空間軸是不變的。
擴展 UE4里是Z軸向上,unity是Y軸向上。
局部空間 | ModelSpace
模型空間(model space),也成為對象空間(object space)或局部空間(local space)。
是在制作模型過程,模型在Blender軟件中的相對位置,在軟件中也可以修改模型的坐標位置。
模型原點為(0,0)

在UE5里模型我們旋轉軸,物體的軸是跟著變化的。

屏幕空間 | ScreenSpace
屏幕空間坐標系是一個二維平面坐標系,和屏幕分辨率有關。
這里注意Direct3D和OpenGL 起始點不一樣
Direct3D 屏幕左上角為(0,0) 右下角為(Screen.width,Screen.height)

OpenGL 屏幕 屏幕左下角為(0,0) 右上角為(Screen.width,Screen.height)

即實際運行屏幕下的游戲窗口像素值,z 為相機世界坐標單位值。
切線空間 | TangentSpace
UE5查看模型的切線信息

切線是出現在模型表面,點的空間關系。點(法線向量,切線向量,副切線向量)
切線空間有時也稱為紋理空間,切線空間最常見的應用場景是使用法線紋理進行光照計算。
而法線紋理其內容有兩種表達形式,
另一種就是基于切線空間的

一種是基于模型空間的,

紋理映射的基本技術
紋理計算UV也是基于切線空間去計算紋理映射。
擴展 切線空間構成
切線空間(切線坐標系)通常簡稱為 TBN 坐標系(Tangent——切線,Binormal——副法線或者Bitangent,Norma——法線),通過上一節(jié)“線性變換”我們知道一個 n 維度“坐標系”的構成實際上需要 n 個正交基(也就是 n 個線性無關向量組),下面詳細分析 TBN 坐標系,如何計算這三個基向量。 TBN 坐標系建立在模型表面(Surface)之上,N 表示模型表面的法線,T 則是與該法線垂直的切線(理論上我們可以選擇任意一條與 N 垂直的切線),B 是與 T、B 都垂直的副法線。假設現在有一個三角形,其頂點分別是 ,假設表面法線向量為 ,現在要求取 .

攝像機空間 | CameraSpace
觀察空間(view space)也被稱為攝像機空間(camera space)
場景攝像機空間,X軸的移動可以看到畫面遠近。

把物體從世界空間轉換到攝像機空間,

現在效果是面向攝像機。就可以實現共告板的效果。
變換
兩個向量計算是需要在同一個空間坐標里才能計算對。
所以,計算兩個向量需要轉換到不同的坐標系
UE5里光我們通過的節(jié)點就表示不同坐標系,

旋轉可以看到不同顏色

現在怎么轉視角都是這樣,

應用示例
Matcap
下一步我們制作一個Matcap材質
準備Matcap貼圖

就是使用相機視角和法線方向計算的一種效果。
因為UV是兩個方向的數值,所以我們做一個通道提取。

現在的UV值不對。我們需要把UV值映射到(0,0)值。

現在效果就對,

問題 那這樣有什么意義嗎?
使用這樣簡單的方法可以給模型著色。

不同模型根據法線和視角方向計算的值,對應到貼圖的不同位置。
這樣的方法也叫**球面映射,**也是一種簡單的模擬反射的方式。

切線空間轉世界空間
因為我們的法線貼圖是在切線空間生產的,我們現在可以把法線貼圖轉換到世界空間。

這樣有什么好處,世界空間的法線是向上。
就可以計算一個物體沿著法線方向生成。我們怎么旋轉青苔貼圖始終朝向世界空間法線正方向。
效果


在層面沒有顯示。
