#define STRINGIFY(A) #A static const char* starFlame = STRINGIFY( uniform vec2 center; uniform vec2 resolution; vec2 iResolution = resolution; // viewport resolution (in pixels) float iGlobalTime = CC_Time[1]; // shader playback time (in seconds) //uniform float iChannelTime[4]; // channel playback time (in seconds) //uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) vec4 iMouse = vec4(0,0,0,0); // mouse pixel coords. xy: current (if MLB down), zw: click //uniform sampler2D iChannel0; // input channel. XX = 2D/Cube float noise(vec3 p) //Thx to Las^Mercury { vec3 i = floor(p); vec4 a = dot(i, vec3(1., 57., 21.)) + vec4(0., 57., 21., 78.); vec3 f = cos((p-i)*acos(-1.))*(-.5)+.5; a = mix(sin(cos(a)*a),sin(cos(1.+a)*(1.+a)), f.x); a.xy = mix(a.xz, a.yw, f.y); return mix(a.x, a.y, f.z); } float sphere(vec3 p, vec4 spr) { return length(spr.xyz-p) - spr.w; } float flame(vec3 p) { float d = sphere(p*vec3(1.,.5,1.), vec4(.0,-1.,.0,1.)); return d + (noise(p+vec3(.0,iGlobalTime*2.,.0)) + noise(p*3.)*.5)*.25*(p.y) ; } float scene(vec3 p) { return min(100.-length(p) , abs(flame(p)) ); } vec4 raymarch(vec3 org, vec3 dir) { float d = 0.0 ; float glow = 0.0; float eps = 0.02; vec3 p = org; bool glowed = false; for(int i=0; i<64; i++) { d = scene(p) + eps; p += d * dir; if( d>eps ) { if(flame(p) < .0) glowed=true; if(glowed) glow = float(i)/64.; } } return vec4(p,glow); } void main() { vec2 v = -1.0 + (2.0 * gl_FragCoord.xy)/ iResolution.xy; //vec2 v = 2.0 * gl_FragCoord.xy / iResolution.xy; v.x *= iResolution.x/iResolution.y; vec3 org = vec3(0., -2., 4.); vec3 dir = normalize(vec3(v.x*1.6, -v.y, -1.5)); vec4 p = raymarch(org, dir); float glow = p.w; vec4 col = mix(vec4(1.,.5,.1,1.), vec4(0.1,.5,1.,1.), p.y*.02+.4); gl_FragColor = mix(vec4(0.), col, pow(glow*2.,4.)); //gl_FragColor = col; //gl_FragColor = mix(vec4(1.), mix(vec4(1.,.5,.1,1.),vec4(0.1,.5,1.,1.),p.y*.02+.4), pow(glow*2.,4.)); } ); static const char* starNestFrg = STRINGIFY( uniform vec2 center; uniform vec2 resolution; vec2 iCenter = center; vec2 iResolution = resolution; // viewport resolution (in pixels) float iGlobalTime = CC_Time[1]; // shader playback time (in seconds) //uniform float iChannelTime[4]; // channel playback time (in seconds) //uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) vec4 iMouse = vec4(0,0,0,0); // mouse pixel coords. xy: current (if MLB down), zw: click //uniform sampler2D iChannel0; // input channel. XX = 2D/Cube // Star Nest by Pablo Román Andrioli // This content is under the MIT License. int iterations = 17; float formuparam = 0.53; int volsteps = 20; float stepsize = 0.1; float zoom = 0.800; float tile = 0.850; float speed = 0.010; float brightness = 0.0015; float darkmatter = 0.300; float distfading = 0.730; float saturation = 0.850; void main(void) { // iCenter = vec2(300, 300); //get coords and direction vec2 uv=gl_FragCoord.xy/iResolution.xy -.5; //vec2 uv=gl_FragCoord.xy/iResolution.xy ; //vec2 uv = ( 2* gl_FragCoord.xy - iCenter.xy) / resolution.xy; uv.y*=iResolution.y/iResolution.x; //vec2 uv = 2.0* (gl_FragCoord.xy-iResolution.xy)/min(iResolution.y,iResolution.x); vec3 dir=vec3(uv*zoom,1.); float time=iGlobalTime*speed+.25; //mouse rotation float a1=.5+iMouse.x/iResolution.x*2.; float a2=.8+iMouse.y/iResolution.y*2.; mat2 rot1=mat2(cos(a1),sin(a1),-sin(a1),cos(a1)); mat2 rot2=mat2(cos(a2),sin(a2),-sin(a2),cos(a2)); dir.xz*=rot1; dir.xy*=rot2; vec3 from=vec3(1.,.5,0.5); from+=vec3(time*2.,time,-2.); from.xz*=rot1; from.xy*=rot2; //volumetric rendering float s=0.1; float fade=1.; vec3 v=vec3(0.); for (int r=0; r6) fade*=1.-dm; // dark matter, don't render near //v+=vec3(dm,dm*.5,0.); v+=fade; v+=vec3(s,s*s,s*s*s*s)*a*brightness*fade; // coloring based on distance fade*=distfading; // distance fading s+=stepsize; } v=mix(vec3(length(v)),v,saturation); //color adjust gl_FragColor = vec4(v*.01,1.); } ); static const char* shadertoyRelentlessFrag = STRINGIFY( uniform vec2 center; uniform vec2 resolution; vec2 iCenter = center; vec2 iResolution = resolution; // viewport resolution (in pixels) float iGlobalTime = CC_Time[1]; // shader playback time (in seconds) //uniform float iChannelTime[4]; // channel playback time (in seconds) //uniform vec3 iChannelResolution[4]; // channel resolution (in pixels) vec4 iMouse = vec4(0,0,0,0); // mouse pixel coords. xy: current (if MLB down), zw: click //uniform sampler2D iChannel0; // input channel. XX = 2D/Cube // srtuss, 2013 // collecting some design ideas for a new game project. // no raymarching is used. // if i could add a custom soundtrack, it'd use this one (essential for desired sensation) // http://www.youtube.com/watch?v=1uFAu65tZpo //#define GREEN_VERSION // ** improved camera shaking // ** cleaned up code // ** added stuff to the gates float time = iGlobalTime; vec2 rotate(vec2 p, float a) { return vec2(p.x * cos(a) - p.y * sin(a), p.x * sin(a) + p.y * cos(a)); } float box(vec2 p, vec2 b, float r) { return length(max(abs(p) - b, 0.0)) - r; } // iq's ray-plane-intersection code vec3 intersect(in vec3 o, in vec3 d, vec3 c, vec3 u, vec3 v) { vec3 q = o - c; return vec3( dot(cross(u, v), q), dot(cross(q, u), d), dot(cross(v, q), d)) / dot(cross(v, u), d); } // some noise functions for fast developing float rand11(float p) { return fract(sin(p * 591.32) * 43758.5357); } float rand12(vec2 p) { return fract(sin(dot(p.xy, vec2(12.9898, 78.233))) * 43758.5357); } vec2 rand21(float p) { return fract(vec2(sin(p * 591.32), cos(p * 391.32))); } vec2 rand22(in vec2 p) { return fract(vec2(sin(p.x * 591.32 + p.y * 154.077), cos(p.x * 391.32 + p.y * 49.077))); } float noise11(float p) { float fl = floor(p); return mix(rand11(fl), rand11(fl + 1.0), fract(p));//smoothstep(0.0, 1.0, fract(p))); } float fbm11(float p) { return noise11(p) * 0.5 + noise11(p * 2.0) * 0.25 + noise11(p * 5.0) * 0.125; } vec3 noise31(float p) { return vec3(noise11(p), noise11(p + 18.952), noise11(p - 11.372)) * 2.0 - 1.0; } // something that looks a bit like godrays coming from the surface float sky(vec3 p) { float a = atan(p.x, p.z); float t = time * 0.1; float v = rand11(floor(a * 4.0 + t)) * 0.5 + rand11(floor(a * 8.0 - t)) * 0.25 + rand11(floor(a * 16.0 + t)) * 0.125; return v; } vec3 voronoi(in vec2 x) { vec2 n = floor(x); // grid cell id vec2 f = fract(x); // grid internal position vec2 mg; // shortest distance... vec2 mr; // ..and second shortest distance float md = 8.0; float md2 = 8.0; for(int j = -1; j <= 1; j ++) { for(int i = -1; i <= 1; i ++) { vec2 g = vec2(float(i), float(j)); // cell id vec2 o = rand22(n + g); // offset to edge point vec2 r = g + o - f; float d = max(abs(r.x), abs(r.y)); // distance to the edge if(d < md) {md2 = md; md = d; mr = r; mg = g;} else if(d < md2) {md2 = d;} } } return vec3(n + mg, md2 - md); } //#define A2V(a) vec2(sin((a) * 6.28318531 / 100.0), cos((a) * 6.28318531 / 100.0)) vec2 A2V(float a) { return vec2(sin((a) * 6.28318531 / 100.0), cos((a) * 6.28318531 / 100.0)); } float circles(vec2 p) { float v; float w; float l; float c; vec2 pp; l = length(p); pp = rotate(p, time * 3.0); c = max(dot(pp, normalize(vec2(-0.2, 0.5))), -dot(pp, normalize(vec2(0.2, 0.5)))); c = min(c, max(dot(pp, normalize(vec2(0.5, -0.5))), -dot(pp, normalize(vec2(0.2, -0.5))))); c = min(c, max(dot(pp, normalize(vec2(0.3, 0.5))), -dot(pp, normalize(vec2(0.2, 0.5))))); // innerest stuff v = abs(l - 0.5) - 0.03; v = max(v, -c); v = min(v, abs(l - 0.54) - 0.02); v = min(v, abs(l - 0.64) - 0.05); pp = rotate(p, time * -1.333); c = max(dot(pp, A2V(-5.0)), -dot(pp, A2V(5.0))); c = min(c, max(dot(pp, A2V(25.0 - 5.0)), -dot(pp, A2V(25.0 + 5.0)))); c = min(c, max(dot(pp, A2V(50.0 - 5.0)), -dot(pp, A2V(50.0 + 5.0)))); c = min(c, max(dot(pp, A2V(75.0 - 5.0)), -dot(pp, A2V(75.0 + 5.0)))); w = abs(l - 0.83) - 0.09; v = min(v, max(w, c)); return v; } float shade1(float d) { float v = 1.0 - smoothstep(0.0, mix(0.012, 0.2, 0.0), d); float g = exp(d * -20.0); return v + g * 0.5; } void main(void) { vec2 uv = gl_FragCoord.xy / iResolution.xy; uv = uv * 2.0 - 1.0; uv.x *= iResolution.x / iResolution.y; // using an iq styled camera this time :) // ray origin vec3 ro = 0.7 * vec3(cos(0.2 * time), 0.0, sin(0.2 * time)); ro.y = cos(0.6 * time) * 0.3 + 0.65; // camera look at vec3 ta = vec3(0.0, 0.2, 0.0); // camera shake intensity float shake = clamp(3.0 * (1.0 - length(ro.yz)), 0.3, 1.0); float st = mod(time, 10.0) * 143.0; // build camera matrix vec3 ww = normalize(ta - ro + noise31(st) * shake * 0.01); vec3 uu = normalize(cross(ww, normalize(vec3(0.0, 1.0, 0.2 * sin(time))))); vec3 vv = normalize(cross(uu, ww)); // obtain ray direction vec3 rd = normalize(uv.x * uu + uv.y * vv + 1.0 * ww); // shaking and movement ro += noise31(-st) * shake * 0.015; ro.x += time * 2.0; float inten = 0.0; // background float sd = dot(rd, vec3(0.0, 1.0, 0.0)); inten = pow(1.0 - abs(sd), 20.0) + pow(sky(rd), 5.0) * step(0.0, rd.y) * 0.2; vec3 its; float v; float g; // voronoi floor layers for(int i = 0; i < 4; i ++) { float layer = float(i); its = intersect(ro, rd, vec3(0.0, -5.0 - layer * 5.0, 0.0), vec3(1.0, 0.0, 0.0), vec3(0.0, 0.0, 1.0)); if(its.x > 0.0) { vec3 vo = voronoi((its.yz) * 0.05 + 8.0 * rand21(float(i))); v = exp(-100.0 * (vo.z - 0.02)); float fx = 0.0; // add some special fx to lowest layer if(i == 3) { float crd = 0.0;//fract(time * 0.2) * 50.0 - 25.0; float fxi = cos(vo.x * 0.2 + time * 1.5);//abs(crd - vo.x); fx = clamp(smoothstep(0.9, 1.0, fxi), 0.0, 0.9) * 1.0 * rand12(vo.xy); fx *= exp(-3.0 * vo.z) * 2.0; } inten += v * 0.1 + fx; } } // draw the gates, 4 should be enough float gatex = floor(ro.x / 8.0 + 0.5) * 8.0 + 4.0; float go = -16.0; for(int i = 0; i < 4; i ++) { its = intersect(ro, rd, vec3(gatex + go, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0)); if(dot(its.yz, its.yz) < 2.0 && its.x > 0.0) { v = circles(its.yz); inten += shade1(v); } go += 8.0; } // draw the stream for(int j = 0; j < 20; j ++) { float id = float(j); vec3 bp = vec3(0.0, (rand11(id) * 2.0 - 1.0) * 0.25, 0.0); vec3 its = intersect(ro, rd, bp, vec3(1.0, 0.0, 0.0), vec3(0.0, 0.0, 1.0)); if(its.x > 0.0) { vec2 pp = its.yz; float spd = (1.0 + rand11(id) * 3.0) * 2.5; pp.y += time * spd; pp += (rand21(id) * 2.0 - 1.0) * vec2(0.3, 1.0); float rep = rand11(id) + 1.5; pp.y = mod(pp.y, rep * 2.0) - rep; float d = box(pp, vec2(0.02, 0.3), 0.1); float foc = 0.0; float v = 1.0 - smoothstep(0.0, 0.03, abs(d) - 0.001); float g = min(exp(d * -20.0), 2.0); inten += (v + g * 0.7) * 0.5; } } inten *= 0.4 + (sin(time) * 0.5 + 0.5) * 0.6; // find a color for the computed intensity #ifdef GREEN_VERSION vec3 col = pow(vec3(inten), vec3(2.0, 0.15, 9.0)); #else vec3 col = pow(vec3(inten), 1.5 * vec3(0.15, 2.0, 9.0)); #endif gl_FragColor = vec4(col, 1.0); } );