unity_LightColor[1] и выше пусты с 2 точечными огнями рядом с объектом

#unity3d #shader #vertex-shader #geometry-shader #shaderlab

Вопрос:

Я пишу геометрический шейдер, с помощью которого пытаюсь добавить поддержку света, отличного от направленного света в моей сцене. С помощью этого урока о том, как добавить поддержку нескольких источников света в шейдер, мне удалось добавить в шейдер один точечный источник света, хотя при добавлении второго будет отображаться только тот, который является самым ярким. Я сузил проблему до того, что только 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 .

Любая помощь будет оценена!

Комментарии:

1. Попробуйте перетащить изображения в редактор, чтобы вставить их. Если вы сделаете это, пользователи смогут увидеть их прямо из вашего поста!