上一篇記錄了shader經常使用函數和變量,這篇記錄一些光照計算時經常使用函數和變量
一、內置的光照變量css
_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標籤支持的渲染路徑設置選項cookie
Always //無論使用哪一種渲染路徑,該Pass總會被渲染,可是不會計算任何光照 ForwardBase //用於前向渲染,該Pass會計算環境光,最重要的的平行光,逐頂點/SH光源和Lightmaps ForwardAdd //用於前向渲染,該Pass會計算額外的逐像素光源,每一個Pass對應一個光源 Deferred //用於延遲渲染,該Pass會渲染G緩衝(G_buffer) ShadowCaster //把物體的深度信息渲染到陰影映射紋理或一張深度紋理中 PrepassBase //用於遺留延遲渲染,該Pass會渲染法線和高光反射的指數部分 PrepassFinal //用於遺留延遲渲染,該Pass經過合併紋理、光照、自發光來渲染獲得的最後的顏色 Vertex,VertexLMRGBM和VertexLM //用於遺留的頂點照明渲染
三、頂點照明渲染路徑中能夠使用的內置變量函數
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)
四、頂點照明渲染路徑中能夠使用的內置函數spa
float3 ShadeVertexLights(float4 vertex,float normal) //輸入模型空間中的頂點位置和法線,計算四個頂點光源的光照以及環境光 float3 ShadeVertexLightsFull(float4 vertex, float3 normal, int lightCount, bool spotLig