Как избежать лишних вычислений во фрагментном шейдере - PullRequest
0 голосов
/ 06 февраля 2019

я пытаюсь исправить этот шейдер.Эффекты - это радиальное размытие вокруг точки, проходящей от процессора в массиве.Расчеты работают отлично для каждой точки и генерируют эффект, но, как вы можете видеть на этом рисунке, для каждого цикла шейдер продолжает генерировать сэмплы, и я не знаю, как этого избежать.я хочу только размытие для каждой точки в массиве

#version 150

in vec2 varyingtexcoord;
uniform sampler2DRect tex0;

uniform int size;

float exposure = 0.79;
float decay = 0.9;
float density = .9;
float weight = .1;
int samples = 25;

out vec4 fragColor;
const int MAX_SAMPLES = 25;
const int N = 3;
uniform vec2 ligthPos [N];

int a = 1;

vec4 halo(vec2 pos){

    float illuminationDecay = 1.2;
    vec2 texCoord = varyingtexcoord;
    vec2 current = pos.xy;
    vec2  deltaTextCoord = texCoord - current;

    deltaTextCoord *= 1.0 / float(samples) * density;
    vec4 color = texture(tex0, texCoord);

    for(int i=0; i < MAX_SAMPLES; i++){ 
        texCoord -= deltaTextCoord;

        vec4 sample = texture(tex0, texCoord);
        sample *= illuminationDecay * weight;
        color += sample;
        illuminationDecay *= decay;
    }
    return color;
}

void main(){

    vec4 accum = vec4(0.0);
    for(int e = 0; e < N;e++){

        vec2 current =ligthPos[e];
        accum += halo(current);
    }
    fragColor = (accum) * exposure;
}

вот что происходит:

enter image description here

enter image description here

...