mul函數,是表示矩陣M和向量V進行點乘,獲得一個向量Z,這個向量Z就是對向量V進行矩陣變換後獲得的值。
HLSL的mul函數接受mul(V, M)或mul(M, V),要注意一般HLSL要依DirectX計算(V * M)使用mul(V, M)的形式.
特別須要當心的是,V若是是float3,先後行列不等,違反HLSL規範,但shader編譯也不報錯,直接當成float4(V, 0)處理,而不是當成float4(V, 1).即mul(float3, M)中的float3被當成向量,而不是頂點.
Unity3d 中,如果OpenGL,用的應該是GLSL,mul方法是(M,V)。html
內置的矩陣(float4x4):數組
名稱 | 說明 |
---|---|
UNITY_MATRIX_MVP | 當前模型視圖投影矩陣 |
UNITY_MATRIX_MV | 當前模型視圖矩陣 |
UNITY_MATRIX_V | 當前視圖矩陣 |
UNITY_MATRIX_P | 當前的投影矩陣 |
UNITY_MATRIX_VP | 當前視圖投影矩陣 |
UNITY_MATRIX_T_MV | 模型視圖矩陣的轉置 |
UNITY_MATRIX_IT_MV | 模型視圖矩陣的逆轉置 |
_Object2World | 當前模型矩陣 |
_World2Object | 當前世界矩陣的逆矩陣 |
這裏要特別說明一下UnityObjectToClipPos(v.vertex)) 方法,官方網站上說明,在寫Instanced Shader時,一般狀況下並不用在乎頂點空間轉換,由於全部內建的矩陣名字在Instanced Shader中都是被重定義過的,若是直接使用UNITY_MATRIX_MVP,會引入一個額外的矩陣乘法運算,因此推薦使用UnityObjectToClipPos / UnityObjectToViewPos函數,它們會把這一次額外的矩陣乘法優化爲向量-矩陣乘法。cookie
名稱 | 類型 | 數值 |
---|---|---|
_WorldSpaceCameraPos | float3 | 世界空間相機的位置 |
_ProjectionParams | float4 | x = 1.0(或若是當前使用翻轉投影矩陣渲染則爲-1.0),y是相機的近平面,z是相機的遠平面,w是1 / FarPlane |
_ScreenParams | float4 | x是相機的渲染目標在像素裏的寬度,y是相機的渲染目標在像素裏的高度,z是1.0 + 1.0 /寬度和w是1.0 + 1.0 /高度 |
_ZBufferParams | float4 | 用於線性化Z緩衝區的值。x(1-far /near),y(far/near)、z(x /far)和w(y /far) |
unity_OrthoParams | float4 | x是正交的相機的寬度,y是正交的相機的高度,z是未使用的,爲正交的相機時w爲1.0,透視相機時w爲0.0 |
unity_CameraProjection | float4x4 | 攝像機的投影矩陣 |
unity_CameraInvProjection | float4x4 | 攝像機的投影矩陣的逆矩陣 |
unity_CameraWorldClipPlanes[6] | float4 | 相機錐平面世界空間方程,按順序爲:左、右、底部、頂部、近、遠 |
名稱 | 類型 | 數值 |
---|---|---|
_LightColor0(Lighting.cginc中聲明) | fixed4 | 光照顏色 |
_worldspacelightpos0 | float4 | 方向光:(世界空間方向,0)。其餘光:(世界空間位置,1) |
_LightMatrix0(AutoLight.cginc聲明) | float4x4 | world-to-light矩陣。用於樣品cookie 和衰減紋理 |
unity_4LightPosX0、unity_4LightPosY0 unity_4lightposz0 | float4 | (僅ForwardBase通道)前四個不重要的點光源的世界空間座標 |
unity_4lightatten0 | float4 | (僅ForwardBase通道)前四個不重要的點光源的衰減係數 |
unity_lightcolor | half4[4] | (僅ForwardBase經過)前四個不重要的點光源的顏色數組 |
在Shader的光照通道里的延遲着色和延遲光照(在unitydeferredlibrary.cginc):app
名稱 | 類型 | 數值 |
---|---|---|
_LightColor | float4 | 光照顏色 |
_LightMatrix0 | float4x4 | world-to-light矩陣。用於樣品cookie 和衰減紋理 |
多光源下,最多8個光源在頂點通道,排序爲從最亮的開始函數
名稱 | 類型 | 數值 |
---|---|---|
unity_LightColor | half4[8] | 光照顏色數組 |
unity_LightPosition | float4[8] | 視圖空間光源的位置。方向光源的座標是(-方向,0);(位置,1)用於點/點指示燈,點光源,聚光燈的座標是(位置,1) |
unity_LightAtten | half4[8] | 光源衰減的係數。X是cos(spotAngle/2)或非聚光燈爲-1;Y爲1/COS(spotangle / 4)或非聚光燈爲-1;Z是衰減的二次方;W是正方形光源的範圍 |
unity_SpotDirection | float4[8] | 視圖空間聚光燈的位置;(0,0,1,0)則非聚光燈。 |