From 9eeb249b9c193e357b386fa9b557ad899c57a2ec Mon Sep 17 00:00:00 2001 From: sasha80 Date: Wed, 7 Jun 2023 08:43:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81=D1=81=D0=B5.=20=D0=9E?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F.?= =?UTF-8?q?=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shaders/bip.gdshader | 12 +++++++----- shaders/sector.gdshader | 11 +++++------ 2 files changed, 12 insertions(+), 11 deletions(-) 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); }