1. 程式人生 > >Unity3D -- shader光照常用函數和變量

Unity3D -- shader光照常用函數和變量

ace mod 因子 htm cookie dbase final pac ase

上一篇記錄了shader常用函數和變量,這篇記錄一些光照計算時常用函數和變量
1、內置的光照變量

_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個非重要的點光源的顏色

2 、LightMode標簽支持的渲染路徑設置選項

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

3、頂點照明渲染路徑中可以使用的內置變量

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)

4、頂點照明渲染路徑中可以使用的內置函數

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

float3 ShadeVertexLightsFull(float4 vertex, float3 normal, int lightCount, bool spotLig

Unity3D -- shader光照常用函數和變量