aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/resources')
-rw-r--r--src/main/resources/shaders/time.glsl92
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));
}