Spiral Riders

Shader ported from shadertoy.com to use as card illustration in Fragment Forge.

 

Pass it the iTime variable from gdscript.

Change color_choice for different colours

Shader code
shader_type canvas_item;
// Using code from

// Pablo Roman Andrioli for the spiral riders shader
// https://www.shadertoy.com/view/3sGfD3
// Ported to Godot and customized for FragmentForge by Db0

// Licence: CC0

uniform bool is_card = true;
uniform float iTime;
uniform int color_choice = 0;

mat2 rot(float a) { 
	return mat2(vec2(cos(a),sin(a)),vec2(-sin(a),cos(a)));
}

vec3 render(vec2 p) {
    p*=rot(iTime*.1)*(.0002+.7*pow(smoothstep(0.,.5,abs(.5-fract(iTime*.01))),3.));
    p.y-=.2266;
    p.x+=.2082;
    vec2 ot=vec2(100.);
    float m=100.;
    for (int i=0; i<150; i++) {
        vec2 cp=vec2(p.x,-p.y);
		p=p+cp/dot(p,p)-vec2(0.,.25);
        p*=.1;
        p*=rot(1.5);
        ot=min(ot,abs(p)+.15*fract(max(abs(p.x),abs(p.y))*.25+iTime*.1+float(i)*.15));
        m=min(m,abs(p.y));
    }
    ot=exp(-200.*ot)*2.;
    m=exp(-200.*m);
	vec3 color_ret;
	switch(color_choice){
		// Some interesting zoom locations discovered via exploration.
		case 0:
			color_ret = vec3(ot.x,ot.y*.5+ot.x*.3,ot.y)+m*.2;
			break;	
		case 1:
			color_ret = vec3(ot.x,ot.y,ot.y*.5+ot.x*.3)+m*.2;
			break;	
		case 2:
			color_ret = vec3(ot.y*.5+ot.x*.3,ot.x,ot.y)+m*.2;
			break;	
		case 3:
			color_ret = vec3(ot.x*.5+ot.y*.3,ot.y,ot.x)+m*.2;
			break;	
		case 4:
			color_ret = vec3(ot.y,ot.x,ot.y*.5+ot.x*.3)+m*.2;
			break;	
		case 5:
			color_ret = vec3(ot.y,ot.y*.5+ot.x*.3,ot.x)+m*.2;
			break;	
    }
	return color_ret;

}

void fragment()
{
    vec2 iResolution =  1.0 / SCREEN_PIXEL_SIZE; // for copy-paste
//    vec2 uv = (FRAGCOORD.xy-iResolution.xy*.5)/iResolution.y;
    vec2 uv = UV - 0.5;
  if(!is_card){
    uv.x *= iResolution.x/iResolution.y;
  }	
    vec2 d=vec2(0.,.5)/iResolution.xy;
    vec3 col = render(uv)+render(uv+d.xy)+render(uv-d.xy)+render(uv+d.yx)+render(uv-d.yx);
    COLOR = vec4(col*.2,1.0);
}
This shader is a port from an existing Shadertoy project. Shadertoy shaders are by default protected under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) license unless anything else has been stated by the author. For more info, see our License terms.

More from db0

Xod

Pentagonal Tesselations

Spine

Related shaders

Spiral “domain mapping”

guest

0 Comments
Inline Feedbacks
View all comments