Glsl 如何避免碎片着色器中的额外计算
我正在尝试修复这个着色器。效果是围绕点位置的径向模糊,从阵列中的cpu传递。每个点的计算都很好,并生成de效果,但正如您在这张图片中看到的,对于每个循环,着色器都会保持生成采样,我不知道如何避免。我只想要阵列中每个点的模糊Glsl 如何避免碎片着色器中的额外计算,glsl,shader,Glsl,Shader,我正在尝试修复这个着色器。效果是围绕点位置的径向模糊,从阵列中的cpu传递。每个点的计算都很好,并生成de效果,但正如您在这张图片中看到的,对于每个循环,着色器都会保持生成采样,我不知道如何避免。我只想要阵列中每个点的模糊 #version 150 in vec2 varyingtexcoord; uniform sampler2DRect tex0; uniform int size; float exposure = 0.79; float decay = 0.9; float den
#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;
}
#版本150
在vec2中,varyingtexcoord;
均匀取样器2DRECT tex0;
统一的整数大小;
浮动曝光=0.79;
浮动衰减=0.9;
漂浮密度=.9;
浮子重量=.1;
int样本=25;
out vec4 fragColor;
const int MAX_SAMPLES=25;
常数int N=3;
均匀vec2-ligthPos[N];
INTA=1;
vec4光环(vec2位置){
浮子照明度Cay=1.2;
vec2-texCoord=varyingtexcoord;
vec2电流=位置xy;
vec2 deltaTextCoord=texCoord-当前值;
deltaTextCoord*=1.0/浮子(样品)*密度;
vec4颜色=纹理(tex0,texCoord);
对于(int i=0;i
事情就是这样: