1. 程式人生 > >Unity3D - 常用函式和變數

Unity3D - 常用函式和變數

最近在學習Unity Shader,寫Shader的時候總是忘記Unity為我們提供的函式、變數怎麼寫的,這裡整理一下,方便自己查閱,也提供給網友,學習Shader不易。

1、函式

float3 WorldSpaceViewDir(float4 v)  //輸入一個模型空間中的頂點位置,返回世界空間中從該點到攝像機的觀察方向

float3 ObjSpaceViewDir(float4 v)    //輸入一個模型空間中的頂點位置,返回模型空間中從該點到攝像機的觀察方向

float3 WorldSpaceLightDir(float4 v) //僅用於前向渲染中(ForwardBase),輸入一個模型空間中的頂點位置,返回世界空間中從該點到光源的光照方向,沒有被歸一化

float3 UnityWorldSpaceLightDir(float4 v)    //僅可用於前向渲染中,輸入一個世界空間的頂點位置,返回世界空間從該點到光源的光照方向,沒有被歸一化

float3 ObjSpaceLightDir(float4 v)   //僅用於前向渲染中(ForwardBase),輸入一個模型空間中的頂點位置,返回模型空間中從該點到光源的光照方向,沒有被歸一化

float3 UnityObjectToWorldNormal(float3 norm)    //把法線從模型空間轉換到世界空間中

float3 UnityObjectToWorldDir(in float3 dir) //把方向向量從模型空間轉換到世界空間中

float3 UnityWorldToObjectDir(float3 dir)    //把方向向量從世界空間轉換到模型空間中

float3 Shade4PointLights(...)   //僅可用於前向渲染中,計算四個點光源的光照,它的引數是已經打包進向量的光照資料。前向渲染通常會使用這個函式來計算逐頂點光照


2、語義

POSITION    //模型空間中的頂點位置,通常是float4型別

NORMAL  //頂點法線,通常是float3型別

TANGENT //頂點法線,通常是float4型別

TEXCOORDn   //該頂點的紋理座標,TEXCOORD0表示第一組紋理座標,…,通常是float2或float4型別

COLOR   //頂點顏色,通常是fixed4或float4型別

SV_POSITION //裁剪空間中的頂點座標,結構體中必須包含一個用該語義修飾的變數。等同於DirectX9中的
POSITION,但是最好是使用SV_POSITION

COLOR0  //輸出第一組頂點顏色

COLOR1  //輸出第二組頂點顏色

TEXCOORD0~TEXCOORD7    //輸出紋理座標

SV_Target   //輸出值將會儲存到渲染目標(render target)中


3、變數

UNITY_MATRIX_MVP    //當前的模型*觀察*投影矩陣,用於將頂點/方向向量從模型空間轉換到裁剪空間

UNITY_MATRIX_MV //當前的模型*觀察矩陣,用於將頂點/方向向量從模型空間轉換到觀察空間

UNITY_MATRIX_V  //當前的觀察矩陣,用於將頂點/方向向量從世界空間轉換到觀察空間

UNITY_MATRIX_P  //當前的投影矩陣,用於將頂點/方向向量從觀察空間轉換到裁剪空間

UNITY_MATRIX_VP //當前的觀察*投影矩陣,用於將頂點/方向向量從世界空間轉換到裁剪空間

UNITY_MATRIX_T_MV   //UNITY_MATRIX_MV的轉置矩陣

UNITY_MATRIX_IT_MV  //UNITY_MATRIX_MV的逆轉置矩陣,用於將發現從模型空間轉換到觀察空間,也可以用於得到UNITY_MATRIX_MV的逆矩陣

unity_ObjectToWorld(_Object2World)  //當前的模型矩陣,用於將頂點/方向向量從模型空間變換到世界空間

unity_WorldToObject(_World2Object)  //用於將頂點/方向向量從世界空間轉換到模型空間


4、攝像機和螢幕引數

float3  _WorldSpaceCameraPos  //該攝像機在世界空間中的位置

float4  _ProjectionParams    //x=1.0(或-1.0,如果正在使用一個翻轉的投影矩陣進行渲染),y=Near,z=Far,w=1.0+1.0/Far,其中Near和Far分別是近裁剪平面和遠裁剪平面到攝像機的距離

float4  _ScreenParams   //x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,其中width和height分別是該攝像機的渲染目標(render target)的畫素寬度和高度

float4  _ZBufferParams  //x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far,該變數用於線性化Z快取中的深度值

float4  unity_OrthoParams   //x=width,y=height,z沒有定義,w=1.0(該攝像機是正交攝像機)或w=0.0(該攝像機是透視攝像機),其中width和height是正交投影攝像機的寬度和高度

float4x4  unity_CameraProjection    //該攝像機的投影矩陣

float4x4  unity_CameraInvProjection  //該攝像機的投影矩陣的逆矩陣

float4  unity_CameraWorldClipPlanes[6]   //該攝像機的6個裁剪平面在世界空間下的等式,按左、右、下、上、近、遠裁剪平面


5、內建的光照變數

_LightColor0    float4  //該Pass處理的逐畫素光源的顏色

_WorldSpaceLightPos0    float4  //_WorldSpaceLightPos0.xyz是該Pass處理的逐畫素光源的位置。如果該光源是平行光,那麼_WorldSpaceLightPos0.w是0,其他光源型別是1

_LightMatrix0   float4x4    //從世界空間到光源空間的變換矩陣,可以用於取樣cookie和光強衰減紋理

unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0   float4  //僅用於Base Pass,前4個非重要的點光源在世界空間中的位置

unity_4LightAtten() float4  //僅用於Base Pass, 儲存了前4個非重要的點光源的衰減因子

unity_LightColor    half4[4]    //僅用於Base Pass,儲存了前4個非重要的點光源的顏色


6、LightMode標籤支援的渲染路徑設定選項

Always  //不管使用哪種渲染路徑,該Pass總會被渲染,但是不會計算任何光照
ForwardBase //用於前向渲染,該Pass會計算環境光,最重要的的平行光,逐頂點/SH光源和Lightmaps
ForwardAdd  //用於前向渲染,該Pass會計算額外的逐畫素光源,每個Pass對應一個光源
Deferred    //用於延遲渲染,該Pass會渲染G緩衝(G_buffer)
ShadowCaster    //把物體的深度資訊渲染到陰影對映紋理或一張深度紋理中
PrepassBase //用於遺留延遲渲染,該Pass會渲染法線和高光反射的指數部分
PrepassFinal    //用於遺留延遲渲染,該Pass通過合併紋理、光照、自發光來渲染得到的最後的顏色
Vertex,VertexLMRGBM和VertexLM    //用於遺留的頂點照明渲染


7、頂點照明渲染路徑中可以使用的內建變數

unity_LightColor    half4[8]     //光源顏色

unity_LightPosition float4[8]   //xyz分量是視角空間中的光源位置,如果光源是平行光,那麼z分量值為0,其他光源型別z分量值為1

unity_LightAtten    half4[8]    //光源衰減因子,如果光源是聚光燈,x分量是cos(spotAngle/2),y分量是1/cos(spotAngle/4);如果是其他光源,x分量是-1,y分量是1,z分量是衰減的平分,w分量是光源範圍開根號的結果

unity_SpotDirection float4[8]   //如果光源是聚光燈的話,值為視角空間的聚光燈的位置,如果是其他型別的光源,值為(0,0,1,0)


8、頂點照明渲染路徑中可以使用的內建函式

float3 ShadeVertexLights(float4 vertex,float normal)     //輸入模型空間中的頂點位置和法線,計算四個頂點光源的光照以及環境光

float3 ShadeVertexLightsFull(float4 vertex, float3 normal, int lightCount, bool spotLight)  //輸入模型空間中的頂點位置和法線,計算lightCount個光源的光照以及環境光,如果SpotLight值為true,那麼這些光源會被當成聚光燈來處理,雖然結果更精確,但計算更加耗時,否則,按點光源處理