shader_type canvas_item; //混合颜色 uniform vec4 blend : source_color = vec4(1.0, 1.0, 1.0, 1.0); //混合度 uniform float schedule : hint_range(0.0, 1.0) = 0.0; //透明度 uniform float alpha : hint_range(0.0, 1.0) = 1.0; //------------------ 轮廓相关 -------------- uniform bool show_outline = true; //轮廓颜色 uniform vec4 outline_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); //是否是彩虹轮廓 uniform bool outline_rainbow = false; //彩虹轮廓变化周期 const float frequency = 0.25; const float light_offset = 0.5; void fragment() { //显示轮廓 if (show_outline) { vec2 size = TEXTURE_PIXEL_SIZE; float outline; outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a; outline += texture(TEXTURE, UV + vec2(0, size.y)).a; outline += texture(TEXTURE, UV + vec2(size.x, 0)).a; outline += texture(TEXTURE, UV + vec2(0, -size.y)).a; outline = min(outline, 1.0); vec4 animated_line_color = vec4( light_offset + sin(2.0 * 3.14 * frequency * TIME), light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(120.0)), light_offset + sin(2.0 * 3.14 * frequency * TIME + radians(240.0)), 1.0 ); vec4 color = texture(TEXTURE, UV); if (outline_rainbow){ COLOR = mix(color, animated_line_color, outline - color.a); } else { COLOR = mix(color, outline_color , outline - color.a); } } vec4 col = mix(COLOR, blend, schedule); col = mix(vec4(0.0, 0.0, 0.0, 0.0), col, COLOR.a); col.a *= alpha; COLOR = col; }