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)。

矩陣

內置的矩陣(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函數,它們會把這一次額外的矩陣乘法優化為向量-矩陣乘法。

相機

名稱 類型 數值
_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):

名稱 類型 數值
_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)則非聚光燈。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM