diff --git a/shaders/bip.gdshader b/shaders/bip.gdshader index bfbc50b8..11ce34b0 100644 --- a/shaders/bip.gdshader +++ b/shaders/bip.gdshader @@ -1,18 +1,20 @@ shader_type canvas_item; +/* Закрашенная окружность */ + uniform vec4 color: source_color = vec4(1, 1, 1, 1); -const float ds = 0.01; // Относительное расстояние на котором выполняется сглаживание краёв -const vec2 center = vec2(0.125, 0.125); // Центр должен быть в (0.5, 0.5) но по неведомой причине это не так -const float radius = 0.125 - ds * 2.0; // Радиус должен быть 0.5, но по неведомой причине это не так -const float rate = 10.0; +const float ds = 0.01; /* Относительное расстояние на котором выполняется сглаживание краёв */ +const vec2 center = vec2(0.125, 0.125); /* Центр должен быть в (0.5, 0.5), но это не так */ +const float radius = 0.125 - ds * 2.0; /* Радиус должен быть 0.5, но это не так */ + float smooth_px(float r, float R) { return 1.0 - smoothstep(R - ds, R + ds, r); } + void fragment() { - COLOR = vec4(1.0, 1.0, 1.0, 1.); COLOR = color * smooth_px(length(UV - center), radius); } diff --git a/shaders/sector.gdshader b/shaders/sector.gdshader index c690e3a1..67c7310b 100644 --- a/shaders/sector.gdshader +++ b/shaders/sector.gdshader @@ -2,8 +2,8 @@ shader_type canvas_item; uniform vec4 color: source_color = vec4(1, 1, 1, 1); uniform float width: hint_range(0.0, 360.0, 0.1) = 45.0; -uniform float inner_radius: hint_range(0.0, 0.125, 0.0001) = 0.1; -uniform float outer_radius: hint_range(0.0, 0.125, 0.0001) = 0.125; +uniform float inner_radius: hint_range(0.0, 0.125) = 0.1; +uniform float outer_radius: hint_range(0.0, 0.125) = 0.125; const vec2 center = vec2(0.125, 0.125); // Центр должен быть в (0.5, 0.5) но по неведомой причине это не так const float dsa = 0.0025; // Относительное расстояние на котором выполняется сглаживание краёв @@ -16,7 +16,7 @@ float smooth_px(float r, float R, float ds) } -void sector(inout vec4 uv_color, vec2 uv_pos, float r0, float r1, float w, vec4 c) +vec4 sector(vec4 c, vec2 uv_pos, float r0, float r1, float w) { vec2 d = uv_pos - center; float theta = atan(d.x, d.y); @@ -24,7 +24,7 @@ void sector(inout vec4 uv_color, vec2 uv_pos, float r0, float r1, float w, vec4 float l = distance(center, uv_pos); float vr = smooth_px(r0, l, dsr) - smooth_px(r1, l, dsr); float va = smooth_px(-w, theta, dsa) - smooth_px(w, theta, dsa); - uv_color *= sqrt(va * vr) * c; + return c * sqrt(va * vr); } @@ -36,6 +36,5 @@ void rotate_vertex(inout vec2 vert, float a) void fragment() { - COLOR = vec4(1.0, 1.0, 1.0, 1.0); - sector(COLOR, UV, inner_radius, outer_radius, width, color); + COLOR = sector(color, UV, inner_radius, outer_radius, width); }