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