2017-01-25 3 views
0

GLSL에서 2D 조명에 대해 작업하고 있지만 해결할 수없는 버그가있는 것 같습니다. 내 조명은 장면에 조명이 여러 개있을 때 겹치는 이상한 "레이어"를 만듭니다. You can see the problem around the lightsGLSL의 이상한 조명

내 쉐이더 코드는 매우 간단하다 :

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이 문제를 일으키는 지 알아?

+0

주어진 거리 후에 감쇠를 클램핑 해보십시오. – Zouch

+0

실제로 문제를 재현 할 수 없지만 [shadertoy의 similair] (https://www.shadertoy.com/view/MlySzd)를 시도했지만 여기에 표시되는 것과 같은 것이 없습니다. 'texture0'에 무엇이 있습니까? 그리고 왜 당신의 색상으로 알파를 사용합니까? 블렌딩을하고 있습니까? – Zouch

+0

@Zouch 감사의 말을 전하고 문제를 재현 해 주셔서 감사합니다. Texture0은 내 게임 타일을 포함하는 스프라이트 시트입니다. 스프라이트 시트를 바인딩하고 프레임 당 ~ 200 개의 타일을 렌더링합니다. 내 색의 알파는 내 실수 였고 나는 그것을 제거했습니다. 귀하의 코드를 광산과 동일하게 편집했으며 완벽하게 작동하여 이것이 Shader Problem이 아니라고 생각하게합니다. 다른 코드를 올리시겠습니까? 지금까지 도와 주셔서 감사합니다. 편집 : 텍스처를 사용하지 않으면 문제가 해결되지 않습니다. – TheDarkShado

답변

1

Shader에서 문제가 발생했음을 알 수 있습니다 (Shadertoy를 사용하여 Zouch를 찾아 주셔서 감사합니다).

실수로 한 번이 아닌 두 번 조명을 사용했습니다.