Работа в процессе. Оптимизация. Убран параметр цвета

This commit is contained in:
sasha80
2023-06-07 08:43:27 +03:00
parent 7db6da0fd0
commit 9eeb249b9c
2 changed files with 12 additions and 11 deletions

View File

@@ -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);
}

View File

@@ -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);
}