0

我正在编写一个几何着色器,我试图在我的场景中添加对除定向光以外的灯光的支持。在本教程的帮助下,如何为着色器添加对多个灯光的支持,我已经设法向着色器添加了一个点光源,但当我添加第二个时,只有最亮的那个才会显示。我已将问题缩小到只有 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

任何帮助将不胜感激!

4

0 回答 0