我正在编写一个几何着色器,我试图在我的场景中添加对除定向光以外的灯光的支持。在本教程的帮助下,如何为着色器添加对多个灯光的支持,我已经设法向着色器添加了一个点光源,但当我添加第二个时,只有最亮的那个才会显示。我已将问题缩小到只有 unity_LightColor[0] 包含正确的 RGB 光值,但高于此值的任何索引都是空的。
#ifdef VERTEXLIGHT_ON
o.vertexLighting = float3(0.0, 0.0, 0.0);
for (int index = 0; index < 4; index++)
{
float4 lightPosition = float4(unity_4LightPosX0[index],
unity_4LightPosY0[index],
unity_4LightPosZ0[index], 1.0);
float3 vertexToLightSource = lightPosition.xyz - o.world.xyz;
float3 lightDirection = normalize(vertexToLightSource);
float squaredDistance = dot(vertexToLightSource, vertexToLightSource);
float attenuation = 1.0 / (1.0 + unity_4LightAtten0[index] * squaredDistance);
float3 diffuseReflection = attenuation
* unity_LightColor[index].rgb * max(0.0, dot(lerp(o.normal, -normalize(o.world.xyz - lightPosition.xyz), _TranslucentGain), lightDirection));
o.vertexLighting = o.vertexLighting + diffuseReflection;
}
#endif
这是我用来计算顶点通道中的光的代码。还不允许嵌入图像,虽然这里是正在发生的事情的 imgur 链接:这里有红点灯unity_LightColor0
但是蓝色不占unity_LightColor1
,当改变蓝色点光源的亮度时,会占unity_LightColor0
但红色不会占据unity_LightColor1
。
任何帮助将不胜感激!