0
Я работаю над 2D-освещением в GLSL, но, похоже, у меня есть ошибка, которую я не могу исправить. Мои огни производят эти странные «слои», которые перекрываются, когда на сцене есть несколько источников света. Weird Lighting in GLSL
Мой шейдер код очень прост:
uniform vec2 lightLocation[6];
uniform vec3 lightColor[6];
uniform float lightRadius[6];
uniform sampler2D texture0;
void main() {
float distance;
float attenuation;
vec4 color;
vec4 finalColor = vec4(0, 0, 0, 1);
for (int i = 0; i < 6; ++i) {
distance = length(lightLocation[i] - gl_FragCoord.xy);
attenuation = 4.0/(1.0 + 10.0*(distance/lightRadius[i]));
color = vec4(attenuation, attenuation, attenuation, pow(attenuation, 3)) * vec4(lightColor[i], 1);
finalColor = finalColor + color;
}
gl_FragColor = finalColor * texture(texture0, gl_TexCoord[0].st);
}
ли ayone знать, что является причиной этой проблемы?
Возможно, попробуйте зажать свое затухание после заданного расстояния? – Zouch
На самом деле я не могу воспроизвести вашу проблему, я попробовал [что-то подобное в shadertoy] (https://www.shadertoy.com/view/MlySzd), но нет ничего похожего на то, что вы здесь показываете. Что находится в 'texture0'? И почему вы используете альфу в своем цвете? Вы делаете какое-то смешение? – Zouch
@Zouch Спасибо за то, что решили и попытались воспроизвести проблему. Texture0 - это мой лист спрайтов, который включает в себя плитки для моей игры. Я привязываю spritesheet и выдаю ~ 200 плиток за кадр. Альфа в моем цвете была ошибкой с моей стороны, и я удалил ее. Я отредактировал ваш код, чтобы быть ТОКОМ таким же, как и мой, и он работал безупречно, что заставляет меня поверить, что это не проблема шейдеров. Вы хотите, чтобы я опубликовал любой другой код? Большое спасибо за вашу помощь! EDIT: Отключение текстур также не устраняет проблему. – TheDarkShado