光源有5个属性:位置、方向、颜色、强度和衰减
1、方向:_WorldSpaceLightPos0
2、颜色和强度:_LightColor0(此变量已经是颜色和强度相乘后的结果)
3、衰减:平行光没有衰减
Unity处理这些光源的顺序取决于其重要程度
光源的衰减在unity中是利用一张纹理作为查找表来标记
衰减查找纹理是_LightTexture0,通过这张贴图对角线上的纹理值表明在光源空间中不同位置上的点的衰减值。举例解释:(0,0)点表明与光源位置重合的点的衰减值,(1,1)点表明在光源空间中距离最远的点的衰减。
为了得到该点在光源空间的衰减值,我们首先要知道该点在光源空间中的位置,通过_LightMatrix0变换矩阵得到的,该矩阵可以将顶点从世界空间变换到光源空间。
float3 lightCoord=mul(_LightMatrix0,float4(i.worldPosition,1)).xyz;之后便可以得到衰减值
fixed atten=tex2D(_LightTexture0,dot(lightCoord,lightCoord).rr).UNITY_ATTEN_CHANNEL;在这里我们使用了光源空间中顶点距离的平方。
使用纹理查找来计算衰减的缺点是:
1、需要预处理得到采样纹理,纹理的大小也会影响衰减的精度。
2、不直观也不方便。