diff options
Diffstat (limited to '')
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | src/main/kotlin/seigaiha/SeigaihaProgram.kt | 36 | ||||
| -rw-r--r-- | src/main/resources/shaders/seigaiha.glsl | 72 | ||||
| -rw-r--r-- | video/seigaiha.SeigaihaProgram.mp4 | bin | 0 -> 13859634 bytes |
4 files changed, 109 insertions, 0 deletions
@@ -5,3 +5,4 @@ out .gradle .kotlin ShaderError.glsl +ffmpegOutput.txt diff --git a/src/main/kotlin/seigaiha/SeigaihaProgram.kt b/src/main/kotlin/seigaiha/SeigaihaProgram.kt new file mode 100644 index 0000000..8894664 --- /dev/null +++ b/src/main/kotlin/seigaiha/SeigaihaProgram.kt @@ -0,0 +1,36 @@ +package seigaiha + +import org.openrndr.application +import org.openrndr.color.* +import org.openrndr.draw.* +import org.openrndr.extra.noise.filters.SimplexNoise3D +import org.openrndr.math.Vector3 +import phenax.utils.* + +fun main() = application { + recordDuration(5.seconds()) + + if (recordingEnabled) { + configure { + width = 1920 + height = 1080 + } + } else { + configure { + width = 640 + height = 480 + } + } + + oliveProgram { + val cs by liveComputeShader("seigaiha") + val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) + + extend { + cs.uniform("seconds", seconds) + cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) + cs.execute(outputBuffer.width, outputBuffer.height, 1) + drawer.image(outputBuffer) + } + } +} diff --git a/src/main/resources/shaders/seigaiha.glsl b/src/main/resources/shaders/seigaiha.glsl new file mode 100644 index 0000000..b3afb4c --- /dev/null +++ b/src/main/resources/shaders/seigaiha.glsl @@ -0,0 +1,72 @@ +#version 430 +layout(local_size_x = 1, local_size_y = 1) in; + +uniform float seconds = 0.; +layout(rgba8) uniform writeonly image2D output_image; + +const float anti_aliasing = 0.0006; +const float scale = 460.; +const vec3 bg_color = vec3(1); +const vec3 odd_color = vec3(0.156, 0.22, 0.396); +const vec3 even_color = vec3(0.861, 0.702, 0.246); + +bool sdf(in vec2 p, bool even, inout float dist) { + float l = length(p); + float size = 0.13; + float ring_thickness = 0.006; + float min_gap = 0.01; + float speed = 1. / 200.; + if (even) speed = -speed; + bool even_iteration = int(seconds * speed / 0.05) % 2 == 0; + float gap_factor = even_iteration ? mod(seconds * speed, 0.05) : mod(-seconds * speed, 0.05); + if (l < size) { + float v = (l - size) * (l - size - 10); + for (float r = 0.02 + gap_factor, i = 0; r <= size; i++, r += ring_thickness) { + v *= (l - r); + r += min_gap + i * (0.0024 + gap_factor / 10); + v *= (l - r); + } + dist = v; + return true; + } + return false; +} + +vec3 draw_shtuff(vec2 uv) { + vec2 period = vec2(0.11, 0.11); + vec2 pos = round(uv / period); + + int odd = int(pos.x) % 2; + float yoffset = pos.y - 0.5 * odd; + float wing_yoffset = pos.y - odd - 0.5 * (1 - odd); + vec3 wing_color = mix(odd_color, even_color, 1 - odd); + vec3 body_color = mix(odd_color, even_color, odd); + + float dist = -1; + vec3 active_color = bg_color; + if (sdf(uv - vec2(pos.x, yoffset) * period, odd == 0, dist)) + active_color = body_color; + if (sdf(uv - vec2(pos.x + 1, wing_yoffset) * period, odd == 1, dist)) + active_color = wing_color; + if (sdf(uv - vec2(pos.x - 1, wing_yoffset) * period, odd == 1, dist)) + active_color = wing_color; + if (sdf(uv - vec2(pos.x, yoffset - 1) * period, odd == 0, dist)) + active_color = body_color; + + return dist > 0 ? vec3(pow(active_color.x, 2.2), pow(active_color.y, 2.2), pow(active_color.z, 2.2)) : bg_color; +} + +vec3 anti_aliased_draw_shtuff(vec2 uv) { + vec3 sum = vec3(0); + int count = 0; + for (int i = -2; i < 2; i++) + for (int j = -2; j < 2; j++, count++) + sum += draw_shtuff(uv + vec2(i, j) * anti_aliasing); + return sum / count; +} + +void main() { + vec2 uv = gl_GlobalInvocationID.xy / scale; + vec3 color = anti_aliased_draw_shtuff(uv); + imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), vec4(color, 1)); +} diff --git a/video/seigaiha.SeigaihaProgram.mp4 b/video/seigaiha.SeigaihaProgram.mp4 Binary files differnew file mode 100644 index 0000000..1ae11f2 --- /dev/null +++ b/video/seigaiha.SeigaihaProgram.mp4 |
