From 893be91d128432397be7299311e70831ce5245ac Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sun, 31 Mar 2024 22:08:17 -0600 Subject: [PATCH] Godot shader compatibility tweaks --- shader-test/source/MirroredOrnament.frag | 45 ++++++++++++++++++++++++ shader-test/source/PlayState.kiss | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 shader-test/source/MirroredOrnament.frag diff --git a/shader-test/source/MirroredOrnament.frag b/shader-test/source/MirroredOrnament.frag new file mode 100644 index 0000000..b2ccf45 --- /dev/null +++ b/shader-test/source/MirroredOrnament.frag @@ -0,0 +1,45 @@ +#pragma header + +// Source: https://godotshaders.com/shader/animated-mirrored-ornament/ +// Modified by Nat + +uniform vec3 color_a = vec3(0.5); +uniform vec3 color_b = vec3(0.5); +uniform vec3 color_c = vec3(1.0); +uniform vec3 color_d = vec3(0.0, 0.33, 0.67); +uniform int iterations = 10; // : hint_range(1, 50, 1) +uniform float speed = 1.0; // : hint_range(0.1, 10.0) +uniform float zoom = 1.0; // : hint_range(0.1, 5.0) +uniform float subtract = 0.5; // : hint_range(0.1, 1.0) +uniform float multiply = 1.1; // : hint_range(1.0, 2.0) + +vec3 palette(float t, vec3 a, vec3 b, vec3 c, vec3 d) { + return a + b * cos(2.0 * PI * (c * t + d)); +} + +vec2 rotate(vec2 uv, float angle) { + return uv * mat2( + vec2(cos(angle), -sin(angle)), + vec2(sin(angle), cos(angle)) + ); +} + +vec3 invert_color(vec3 color, float intensity) { + return mix(color.rgb, 1.0 - color.rgb, intensity); +} + +void fragment() { + float time = TIME; + float angle = time * speed * 0.1; + vec2 uv = (SCREEN_UV - 0.5) / vec2(SCREEN_PIXEL_SIZE.x / SCREEN_PIXEL_SIZE.y, 1.0); + vec3 color = vec3(0.0); + uv /= zoom + sin(time * 0.1) * 0.5 + 0.5; + for (int i = 0; i < iterations; i++) { + uv = rotate((abs(uv) - subtract) * multiply, angle); + } + vec3 p = palette(length(uv) + dot(uv, uv), color_a, color_b, color_c, color_d); + color = clamp(vec3(length(uv) * p), vec3(0.0), vec3(1.0)); + float intensity = sin(time) * 0.25 - 0.2; + color = invert_color(color, intensity); + COLOR = vec4(color, 1.0); +} \ No newline at end of file diff --git a/shader-test/source/PlayState.kiss b/shader-test/source/PlayState.kiss index 5dfb16d..9af80cd 100644 --- a/shader-test/source/PlayState.kiss +++ b/shader-test/source/PlayState.kiss @@ -17,7 +17,7 @@ (bg.screenCenter) (set bg.alpha 0.5) (add bg)) - (set shader (new kiss_flixel.shaders.CheckerBoard)) + (set shader (new MirroredOrnament)) // (set shader.data.invert.value [true]) // (set shader.data.color1.value [1.0 1.0 1.0 1.0]) // (set shader.data.color2.value [0.0 0.0 0.0 1.0])