glsl動感模糊效果,模擬運動時產生上一幀的殘留,簡單的對每一個像素進行相加,最後再均值一下。可使用shadertoy直接運行:
#iChannel1"file://./car.png"
#define PI 3.14159265359
void mainImage(out vec4 fragColor,in vec2 fragCoord)
{
vec2 uv=(0.5+fragCoord.xy)/iResolution.xy;
vec4 clraverge=vec4(0.0);
float GlowRange=40.0; // 半徑
float GlowExpand=0.0; // 角度
float samplerPre=1.0;
float range=GlowRange*0.2;
float rad=PI/180.0*GlowExpand;
for(float j = 1.0; j <= range; j+=samplerPre){
float dx=0.002*cos(rad);
float dy=0.002*sin(rad);
vec2 samplerTexCoord = vec2(uv.x+j*dx, uv.y+j*dy);
vec2 samplerTexCoord1= vec2(uv.x-j*dx, uv.y-j*dy);
if( samplerTexCoord.x < 0.0 || samplerTexCoord.x > 1.0 ||
samplerTexCoord1.x < 0.0 || samplerTexCoord1.x > 1.0 ||
samplerTexCoord.y < 0.0 || samplerTexCoord.y > 1.0 ||
samplerTexCoord1.y < 0.0 || samplerTexCoord1.y > 1.0) {
continue;
}
vec4 tc= texture2D(iChannel1, samplerTexCoord);
vec4 tc1= texture2D(iChannel1, samplerTexCoord1);
clraverge+=tc;
clraverge+=tc1;
}
clraverge/=(range*2.0/samplerPre);
fragColor=clraverge;
}
原圖如下:
效果圖如下: