mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 07:45:33 +00:00
101 lines
2.8 KiB
Text
101 lines
2.8 KiB
Text
|
|
#ifndef VFEZ_UTILS
|
||
|
|
#include "vfez_utils.gdshaderinc"
|
||
|
|
#define VFEZ_UTILS
|
||
|
|
#endif
|
||
|
|
|
||
|
|
group_uniforms outline;
|
||
|
|
uniform vec3 outline_color: source_color;
|
||
|
|
uniform float outline_alpha: hint_range(0.0, 1.0) = 1.0;
|
||
|
|
uniform float outline_glow: hint_range(1., 100, 1.) = 1.0;
|
||
|
|
uniform float outline_width;
|
||
|
|
uniform bool only_render_outline;
|
||
|
|
group_uniforms;
|
||
|
|
|
||
|
|
group_uniforms outline.pixel_perfect;
|
||
|
|
uniform bool use_pixel_perfect_outline;
|
||
|
|
uniform int outline_pixel_width;
|
||
|
|
group_uniforms;
|
||
|
|
|
||
|
|
group_uniforms outline.texture;
|
||
|
|
uniform bool use_outline_texture;
|
||
|
|
uniform sampler2D outline_texture;
|
||
|
|
uniform vec2 outline_texture_scale = vec2(1.);
|
||
|
|
uniform vec2 outline_texture_offset = vec2(0.);
|
||
|
|
uniform vec2 outline_texture_scroll_speed = vec2(0.);
|
||
|
|
group_uniforms;
|
||
|
|
|
||
|
|
group_uniforms outline.distortion;
|
||
|
|
uniform bool use_outline_distortion;
|
||
|
|
uniform sampler2D outline_distortion_texture;
|
||
|
|
uniform vec2 outline_distortion_texture_scale = vec2(1.);
|
||
|
|
uniform vec2 outline_distortion_texture_offset = vec2(0.);
|
||
|
|
uniform vec2 outline_distortion_texture_scroll_speed = vec2(0.);
|
||
|
|
uniform float outline_distortion_amount;
|
||
|
|
group_uniforms;
|
||
|
|
|
||
|
|
vec4 outline(vec4 color, vec2 texture_pixel_size, vec2 uv, sampler2D tex)
|
||
|
|
{
|
||
|
|
float base_tex_a = texture(tex, uv).a;;
|
||
|
|
|
||
|
|
vec2 destUV;
|
||
|
|
if (use_pixel_perfect_outline)
|
||
|
|
{
|
||
|
|
destUV = texture_pixel_size * float(outline_pixel_width);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
destUV = texture_pixel_size * float(outline_width) * 200.;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (use_outline_distortion)
|
||
|
|
{
|
||
|
|
vec2 outlineDistUV = transform_uv(
|
||
|
|
uv,
|
||
|
|
outline_distortion_texture_scale,
|
||
|
|
outline_distortion_texture_offset,
|
||
|
|
true);
|
||
|
|
|
||
|
|
destUV = uv_distortion(destUV, outline_distortion_texture, outlineDistUV,
|
||
|
|
outline_distortion_amount, outline_distortion_texture_scroll_speed, true);;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
float left = texture(tex, uv + vec2(destUV.x, 0.)).a;
|
||
|
|
float right = texture(tex, uv - vec2(destUV.x, 0.)).a;
|
||
|
|
float bottom = texture(tex, uv + vec2(0., destUV.y)).a;
|
||
|
|
float top = texture(tex, uv - vec2(0., destUV.y)).a;
|
||
|
|
float result = left + right + bottom + top;
|
||
|
|
|
||
|
|
result = step(0.05, clamp(result, 0., 1.));
|
||
|
|
|
||
|
|
vec4 final_outline_color = vec4(outline_color, 1.0);
|
||
|
|
|
||
|
|
if (use_outline_texture)
|
||
|
|
{
|
||
|
|
vec2 outlineTexUV = transform_uv(
|
||
|
|
uv,
|
||
|
|
outline_texture_scale,
|
||
|
|
outline_texture_offset,
|
||
|
|
true);
|
||
|
|
|
||
|
|
outlineTexUV += mod(TIME * outline_texture_scroll_speed,vec2(1.));
|
||
|
|
outlineTexUV = fract(outlineTexUV);
|
||
|
|
final_outline_color *= texture(outline_texture, outlineTexUV);
|
||
|
|
}
|
||
|
|
|
||
|
|
result *= (1. - color.a) * outline_alpha;
|
||
|
|
vec4 outline = final_outline_color;
|
||
|
|
outline.rgb *= outline_glow;
|
||
|
|
outline.a = result;
|
||
|
|
|
||
|
|
if (only_render_outline)
|
||
|
|
{
|
||
|
|
color = outline;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
color = mix(color, outline, result);
|
||
|
|
}
|
||
|
|
|
||
|
|
return color;
|
||
|
|
}
|