Unity Shader 矩陣基本信息

基本信息

mul函數

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)則非聚光燈。
相關文章
相關標籤/搜索