Unity的光照衰减(点光源和聚光灯)

Unity使用一张纹理作为查找表在片元着色器中计算逐像素光照的衰减,可以减轻复杂度。不过需要预处理得到采样纹理,纹理的大小会影响衰减的精度。

预处理出来的光照衰减纹理为_lightTexture0,如果该光源使用了cookie,那么为_LightTextureB0。使用点在光源空间的位置的点积来对纹理取样(不使用长度还要开方)。

float3 lightCoord = mul(unity_WorldToLight , float4(i.worldPos.xyz, 1)).xyz;
fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord)).UNITY_ATTEN_CHANNEL;


UUNITY_ATTEN_CHANNEL是一个宏用来获取光照衰减所在的分量的。


首页 我的博客
粤ICP备17103704号