shader_type canvas_item; uniform float shift_strength : hint_range(0.0, 1.0); uniform float blur_strength : hint_range(0.0, 1.0); uniform float vignette_alpha : hint_range(0.0, 1.0); uniform float vignette_inner : hint_range(0.0, 1.0) = 0.5; uniform float vignette_outer : hint_range(0.0, 2.0) = 1.0; void fragment() { vec3 color = vec3(0); //模糊+色移 float shift = 0.01 * shift_strength; float blur = 0.01 * blur_strength; vec2 direction = UV - vec2(0.5); float f = 0.1; color *= f; for(int i=1; i < 10; i++) { vec2 target_uv = UV - blur * direction * float(i); vec3 target_color = vec3(0); target_color.r = texture(TEXTURE, vec2(target_uv.x + shift, target_uv.y)).r; target_color.g = texture(TEXTURE, target_uv).g; target_color.b = texture(TEXTURE, vec2(target_uv.x - shift, target_uv.y)).b; color += target_color * f; } //暗角 float x = abs(UV.r-.5)*2.0; float y = abs(UV.g-.5)*2.0; float q = 1.0-(1.0-sqrt(x*x+y*y)/vignette_outer)/(1.0-vignette_inner); q = clamp(q*vignette_alpha,0.0,1.1); color *= (1.0-q); COLOR.rgb = color; }