diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-10-05 20:38:25 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-10-05 20:38:25 +0530 |
| commit | efd9e0c8d586c30ed490eb9f2a096d95699e80d4 (patch) | |
| tree | 368bb671e11ea7183daf68167a77f74cfd12005c /src/main/resources/shaders/time.glsl | |
| parent | 57ff3d2eb6c5b0d2a3f67296844390376851b13c (diff) | |
| download | art-playground-openrndr-efd9e0c8d586c30ed490eb9f2a096d95699e80d4.tar.gz art-playground-openrndr-efd9e0c8d586c30ed490eb9f2a096d95699e80d4.zip | |
Remove hour/minute hands + redo antialiasing without supersampling
Diffstat (limited to 'src/main/resources/shaders/time.glsl')
| -rw-r--r-- | src/main/resources/shaders/time.glsl | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/src/main/resources/shaders/time.glsl b/src/main/resources/shaders/time.glsl index 61726ac..0450062 100644 --- a/src/main/resources/shaders/time.glsl +++ b/src/main/resources/shaders/time.glsl @@ -9,14 +9,10 @@ layout(local_size_x = 1, local_size_y = 1) in; uniform float hours = 0; uniform float minutes = 0; -uniform float seconds = 0; uniform float time = 0; layout(rgba8) uniform readonly image2D text_texture; layout(rgba8) uniform writeonly image2D output_image; -uniform float antialiasing = 0.28; -uniform bool enable_antialiasing = false; - float digit(in vec2 uv, in int dig, in float size) { vec2 p = uv * 5000 / size; float digitSize = imageSize(text_texture).x / 10.; @@ -43,44 +39,50 @@ vec3 image(in vec2 uv) { const vec3 pupil_color = srgb(0.08); const vec3 background_color = srgb(0.15, 0.18, 0.29); const vec3 bloodvessel_color = srgb(0.64, 0.24, 0.12); - const vec3 caruncle_color = mix(bloodvessel_color, vec3(0), 0.3); + const vec3 caruncle_color = mix(bloodvessel_color, vec3(0), 0.8); const vec3 clockdigit_color = mix(bloodvessel_color, vec3(0), 0.3); const vec3 eyeoutline_color = mix(bloodvessel_color, vec3(0), 0.8); const vec3 pat1_color = srgb(0.81, 0.40, 0.21); const vec3 pat2_color = srgb(0.95, 0.76, 0.36); vec3 color = caruncle_color; + // float theta = abs(uv.x) <= 0.00001 ? PI / 2 : atan(uv.y, uv.x); float theta = atan(uv.y, uv.x); { float eye = sdf_circle(uv, 0.44 * (1 - 0.08 * fbm(100 * uv))); vec3 eyeball_color = eye_color; - float veins = sin((uv.y + 1) * 260 * sin((uv.x + 1) * 0.1) * fbm(uv * 20)) + 0.96; + float veins = sin((uv.y + 1) * 57.4 * sin((uv.x + 1) * 0.62) * fbm(vec3(uv * 10, 9), 8)) + 0.96; eyeball_color = mix(eyeball_color, bloodvessel_color, - mix(0, step(veins, 0), clamp(ease_in_out_quart(fbm(vec3(uv * 10, 28), 8)) - 0.3, 0, 1))); + mix(0, step(veins, 0), clamp(ease_in_out_quart(fbm(vec3(uv * 22, 78), 8)) - 0.6, 0, 1))); color = mix(color, eyeball_color, step(eye, 0)); float vein = veiny_veins(12 * (-uv + vec2(0.45, 0)), vec2(8., 4.)); vein = min(vein, veiny_veins(10 * (uv + vec2(0.45, 0)), vec2(10., 5.))); color = mix(color, caruncle_color, 1.0 - smoothstep(-0.01, 0.01, vein)); - // float bug = sdf_circle(uv - vec2(0.3, 0), 0.014); - // color = mix(color, vec3(0), clamp(step(bug, 0) * (bug - 0.1) * 100, 0, 1)); - color = mix(color, mix(color, vec3(0), 0.5), smoothstep(0, 0.12, eye + 0.20)); + color = mix(color, mix(color, vec3(0), 0.5), smoothstep(0, 0.28, eye + 0.32)); } - { - // minutes - float angle = PI / 2 - minutes * PI / 30; - vec2 offset = 0.148 * vec2(cos(angle), sin(angle)); - float iris_bounds = sdf_circle(uv - offset, 0.012); - color = mix(color, bloodvessel_color, step(iris_bounds + 0.012 * fbm(uv * 300), 0)); - } + // { + // // minutes + // float angle = PI / 2 - minutes * PI / 30; + // vec2 offset = 0.148 * vec2(cos(angle), sin(angle)); + // float iris_bounds = sdf_circle(uv - offset, 0.012); + // color = mix(color, bloodvessel_color, step(iris_bounds + 0.012 * fbm(uv * 300), 0)); + // } + // { + // // hours + // float angle = PI / 2 - minutes * PI / 30; + // vec2 offset = 0.148 * vec2(cos(angle), sin(angle)); + // float iris_bounds = sdf_circle(uv - offset, 0.012); + // color = mix(color, bloodvessel_color, step(iris_bounds + 0.012 * fbm(uv * 300), 0)); + // } { float iris = sdf_circle(uv, 0.154); color = mix(color, iris_color, step(iris, 0)); - float floral = uv.x * 8 / cos(theta) - sin(15 * theta) * cos(12 * theta); + float floral = uv.y * 8 / sin(theta) - sin(15 * theta) * cos(12 * theta); float irispatangle = 50 * theta + 10.0 * fbm(uv * 100); color = mix(color, irispat1_color, 0.8 * step(max(iris, sin(irispatangle)), 0)); color = mix(color, irispat1_color, clamp(step(floral, 0.12) * floral * 8, 0, 1)); @@ -88,13 +90,13 @@ vec3 image(in vec2 uv) { color = mix(color, irispat1_color, clamp(step(iris, 0) * (iris + 0.1) * 8, 0, 1)); } - { - // hours - float angle = PI / 2 - hours * PI / 6 - minutes * PI / (12 * 60); - vec2 offset = 0.10 * vec2(cos(angle), sin(angle)); - float iris_spec = sdf_circle((uv - offset) * vec2(0.8, 1.0), 0.010); - color = mix(color, mix(color, vec3(1), 0.8), step(iris_spec, 0)); - } + // { + // // hours + // float angle = PI / 2 - hours * PI / 6 - minutes * PI / (12 * 60); + // vec2 offset = 0.10 * vec2(cos(angle), sin(angle)); + // float iris_spec = sdf_circle((uv - offset) * vec2(0.8, 1.0), 0.010); + // color = mix(color, mix(color, vec3(1), 0.8), step(iris_spec, 0)); + // } { float pupil = sdf_circle(uv, 0.05); @@ -104,14 +106,18 @@ vec3 image(in vec2 uv) { { float eyeball = sdf_circle(uv, 0.03); - vec3 shaded_eyeball_color = mix(eye_color, mix(bloodvessel_color, vec3(0), 0.5), smoothstep(-0.03, -0.006, eyeball)); + vec3 shaded_eyeball_color = mix(eye_color, caruncle_color, smoothstep(-0.03, -0.006, eyeball)); color = mix(color, shaded_eyeball_color, step(eyeball, 0.)); + float vein = veiny_veins(100 * (-uv + vec2(0.025, 0)), vec2(8., 4.)); + vein = min(vein, veiny_veins(100 * (uv + vec2(0.025, 0)), vec2(10., 5.))); + color = mix(color, caruncle_color, 1.0 - smoothstep(-0.01, 0.01, vein)); + float t = time / 2; vec2 offset = ease_in_out_quart(vec2(fbm(vec2(t)), fbm(vec2(t / 2)))) - 0.40; vec2 eyeirisp = uv - offset * 0.004 * 4; float pupil = sdf_circle(eyeirisp, 0.009); - color = mix(color, mix(iris_color, pupil_color, smoothstep(pupil, 0.0068, 0)), step(pupil, 0)); + color = mix(color, mix(iris_color, pupil_color, smoothstep(pupil, 0.001, 0)), step(pupil, 0)); vec2 eyep = uv; float eye_open_factor = 0.008; @@ -124,26 +130,27 @@ vec3 image(in vec2 uv) { float a = mix(0, eye_open_factor, mix(1, blink, should_blink)); float eyelid_size = 60; float eyelid = a * cos(eyelid_size * eyep.x / 2 * PI) - abs(eyep.y) + a; - eyelid = max(eyelid, sdf_circle(eyep, 0.03)) - 0.005; - color = mix(color, shaded_pupil_color, step(eyelid + 0.002, 0)); + eyelid = max(eyelid, sdf_circle(eyep, 0.03)); + color = mix(color, vec3(0), sdf_circle(eyep, 0.04) * step(eyelid - 0.010, 0) * (1 - smoothstep(-0.0001, 0.008, eyelid))); + color = mix(color, shaded_pupil_color, step(eyelid - 0.003, 0)); } } { // TODO: Switch to domain repetition + float angle = PI / 6.; + float r = 0.175; + float digit_size = 1.6; for (int i = 0; i < 12; i++) { - float angle = PI / 6.; - float r = 0.175; vec2 digitpos = uv + vec2(0.011, 0.036) - r * vec2(cos(-i * angle + PI / 3), sin(-i * angle + PI / 3)); digitpos *= (1 + 0.8 * fbm(60 * uv)); - float digit_size = 1.6; float s = 0; if (i + 1 >= 10) { s = digit(digitpos + vec2(0.01, 0), 1, digit_size); digitpos.x -= 0.01; } s = max(s, digit(digitpos, (i + 1) % 10, digit_size)); - color = mix(color, clockdigit_color, s); + color = mix(color, mix(clockdigit_color, color, 0.4), s); } } @@ -165,34 +172,21 @@ vec3 image(in vec2 uv) { vec3 patterning = mix(pat1_color, pat2_color, pow(sin(eyep.x * 16 + 100 * fbm(vec3(eyep * 10, time / 20), 3)), 2)); float patnoise = smoothstep(-eyelid, 0, 0.028 * fbm(eyep * 100)); eyelid_color = mix(eyelid_color, patterning, 1 - clamp(patnoise, 0, 1)); - float shadow = 1 - smoothstep(-0.01, 0.03, eyelid); + float shadow = 1 - smoothstep(-0.01, 0.02, eyelid); color = mix(eyelid_color, mix(color, eyeoutline_color, shadow), 1 - step(eyelid, 0)); color = mix(color, - mix(background_color, pat2_color, smoothstep(0, 1.5, sin(uv.y * 100 * (1 + 0.01 * fbm(uv * 800))))), + mix(background_color, pat2_color, smoothstep(0, 1.5, sin(uv.y * 100 * (1 + 0.01 * fbm(uv * 40))))), 1 - step(circle, 0)); } return color; } -vec3 antialiased_image(vec2 uv) { - vec2 resolution = vec2(imageSize(output_image).xy); - float s = antialiasing / max(resolution.x, resolution.y); - vec3 sum = vec3(0); - int count = 0; - for (int i = -2; i < 2; i++) - for (int j = -2; j < 2; j++, count++) - sum += image(uv + vec2(i, j) * s); - return sum / count; -} - void main() { vec2 resolution = vec2(imageSize(output_image).xy); float aspect_ratio = resolution.y / resolution.x; vec2 uv = (gl_GlobalInvocationID.xy - resolution / 2) * vec2(1.0, aspect_ratio) / resolution; - vec3 color = enable_antialiasing ? antialiased_image(uv) : image(uv); - // color = saturation(color, 0.2); - + vec3 color = image(uv); imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1)); } |
