【UnityShader】常用的內置變量、函數、語義等

UnityCG.cginc

這裏包含了最常使用的幫助函數、宏和結構體。

UnityCG.cginc中一些常用的結構體

名稱 描述 包含變量
appdata_base 用於頂點着色器的輸入 頂點位置、頂點法線、第一組紋理座標
appdata_tan 用於頂點着色器的輸入 頂點位置、頂點切線、頂點法線、第一組紋理座標
appdata_full 用於頂點着色器的輸入 頂點位置、頂點切線、頂點法線、四組(或更多)紋理座標
appdata_img 用於頂點着色器的輸入 頂點位置,第一組紋理座標
v2f_img 用於頂點着色器的輸出 裁剪空間中的頂點座標、紋理座標

常用的幫助函數

函數名 描述
float3 WorldSpaceViewDir(float4 v) 輸入模型空間中的頂點位置,返回世界空間中從該點到攝像機的觀察方向;
float3 UnityWorldSpaceViewDir(float4 v) 輸入世界空間中的頂點位置,返回世界空間中從該點到攝像機的觀察方向;
float3 ObjSpaceViewDir(float4 v) 輸入模型空間中的頂點位置,返回模型空間中從該點到攝像機的觀察方向;
float3 WorldSpaceLightDir(float4 v) 僅可用於前向渲染中,輸入一個模型空間中的頂點位置,返回世界空間中從該點到光源的光照方向,沒有被歸一化;
float3 UnityWorldSpaceLightDir(float4 v) 僅可用於前向渲染中,輸入一個世界空間中的頂點位置,返回世界空間中從該點到光源的光照方向,沒有被歸一化;
float3 ObjSpaceLightDir(floate v) 僅可用於前向渲染中,輸入一個模型空間中的頂點位置,返回模型空間中從該點到光源的光照方向,沒有被歸一化;
float3 UnityObjectToWorldNormal(float3 norm) 把法線方向從模型空間轉換到世界空間中;
float3 UnityObjectToWorldDir(in float3 dir) 把方向矢量從模型空間變換到世界空間中;
float3 UnityWorldToObjectDir(float3 dir) 把方向矢量從世界空間變換到模型空間中;

名字 描述
TRANSFORM_TEX(tex,name) 第一個是頂點的紋理座標,第二個是紋理名
MainTex_ST 紋理的屬性,ST爲縮放和平移的縮寫,_MainTex_ST.xy縮放值,_MainTex_ST.zw 偏移值
MainTex_TexelSize unity提供的用來訪問xxx紋理對應的每個紋素的大小,如一張512x512大小的紋理,該值爲1/512,在卷積中,我們需要對相鄰區域內的紋理進行採樣,就需要使用TexelSize計算各個相鄰區域的紋理座標。

Lighting.cginc

名字 描述
UNITY_LIGHTMODEL_AMBIENT 得到環境光部分,fixed3 ambient=UNITY_LIGHTMODEL_AMBIENT.xyz
_LightColor0 該內置變量用來訪問該pass處理的光源的顏色和強度信息(注意想要得到正確的值需要定義合適的LightMode標籤)
_WorldSpaceLightPos0 得到光源方向,需要注意的是,在這裏,我們假設場景中只有一個光源且該光源是平行光。如果有多個光源並且類型可能是點光源等其它類型,就不能這麼處理。

UnityShaderVariables.cginc

這裏包含unity內置的用於空間變換和攝像機以及屏幕參數的內置變量

內置變換矩陣

變量名 描述
UNITY_MATRIX_MVP 當前的模型觀察投影矩陣,從模型空間變換到裁剪空間
UNITY_MATRIX_MV 當前的模型*觀察,從模型空間變換到觀察空間
UNITY_MATRIX_V 當前的觀察矩陣,從世界空間變換到觀察空間
UNITY_MATRIX_P 當前的投影矩陣,從觀察空間變換到裁剪空間
UNITY_MATRIX_VP 當前的觀察*投影矩陣,從世界空間變換到裁剪空間
unity_ObjectToWorld(_Object2World) 當前的矩陣模型,從模型空間變換到世界空間
unity_WorldToObject(_World2Object) 從世界空間轉換到模型空間

Unity內置的攝像機和屏幕參數

變量名 類型 描述
_WorldSpaceCameraPos float3 該攝像機在世界空間中的位置
_ProjectionParams float4 x=1.0(或-1.0,如果正在使用一個翻轉的投影矩陣進行渲染),y=Near, z=Far, w=1.0+1.0/Far,其中Near和Far分別是近裁剪平面和遠裁剪平面離攝像機的距離。
_ScreenParams float4 x=width, y=height, z=1.0+1.0/width, w=1.0+1.0/height, 其中width和height分別是該攝像機的渲染目標(render target)的像素寬度和高度。
_ZBufferParams float4 x=1-Far/Near, y=Far/Near, z=x/Far, w=y/Far, 該變量用於線性化Z緩存中的深度值。
unity_OrthoParams float4 x=width, y=height, z沒有定義,w=1.0(該攝像機是正交攝像機)或w=0.0(該攝像機是透視攝像機),其中width和height是正交攝像機的寬度和高度。
unity_CameraProjection float4x4 該攝像機的攝影矩陣
unity_CameraInvProjection float4x4 該攝像機的攝像矩陣的逆矩陣
unity_CameraWorldClipPlanes[6] float4 該攝像機的6個裁剪平面在世界空間下的等式,按如下順序:左、右、下、上、近、遠裁剪平面。

語義

頂點着色器的輸出Unity支持的語義:POSITION、TANGENT、NORMAL、TEXCOORD(0~5)、COLOR;

從應用階段傳遞模型數據給頂點着色器

語義 描述
POSITION 模型空間的頂點位置,通常是float4類型
NORMAL 頂點法線,通常float3類型
TANGENT 頂點切線,通常float4類型
TEXCOORDN 該頂點的紋理座標,通常是float2或者float4類型
COLOR 頂點顏色,通常是fixed4或者float4類型

從頂點着色器傳遞數據給片元着色器

語義 描述
SV_POSITION 裁剪空間的頂點座標。結構體中必須包含的一個用該語義修飾的變量。
COLOR0 通常用於輸出第一組頂點顏色
COLOR1 通常用於輸出第二組頂點顏色
TEXCOORD0~7 通常用於輸出紋理座標

片元着色器輸出時Unity支持的語義

語義 描述
SV_Target 輸出值將會存儲到渲染目標

系統數值語義,以 SV 開頭。例如用 SV_POSITION 語義去修飾頂點着色器的輸出變量 pos,那麼表示 pos 包含了可用於光柵化的變換後的頂點座標(即齊次裁剪空間的座標)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章