/***** This shader captures the essence of slow-motion horse galloping, combined with a serene transition between states. It highlights the gentle beauty of muscle movements, grass-like sways, and subtle energy flows, blending them with seamless transitions that evoke tranquility. *****/ precision mediump float; varying vec2 uv; uniform float time, width, height; // Soft sway effect to mimic a gentle breeze over the grass float gentleGrassSway(vec2 pos, float freq, float amp, float offset) { return sin(pos.y * freq + time * 0.4 + offset) * amp * cos(time * 0.1); } // Adaptation to slow, subtle muscular and grass motion float smoothMuscleAndGrass(vec2 st, vec2 origin, float freq, float intensity, float fade) { float dist = distance(st, origin); float pulse = sin(dist * freq - 0.1 * time + 3.0 * cos(time * 0.4)) * exp(-dist * fade) * 0.75; float swayEffect = gentleGrassSway(st, 6.0, 0.12, dist * 4.0); return intensity * (pulse + swayEffect); } // Impact trails that transition slowly, mirroring gentle hoof impacts float subtleHoofTrail(vec2 st, vec2 impactPoint, float trailIntensity, float trailDissipate) { float distToImpact = distance(st, impactPoint); float trailPattern = smoothstep(0.4, 0.1, distToImpact) * sin(distToImpact * 12.0 - time * 1.5) * 0.5; float swayEffect = gentleGrassSway(st, 8.0, 0.05, distToImpact * 3.0); return (trailPattern + swayEffect) * exp(-distToImpact * trailDissipate) * trailIntensity; } // Combining muscle and grass influences with smooth transitions vec3 smoothTransitionDynamics(vec2 st) { float muscleEnergy1 = smoothMuscleAndGrass(st, vec2(0.3, 0.5), 6.0, 0.25, 2.5); float muscleEnergy2 = smoothMuscleAndGrass(st, vec2(0.7, 0.3), 7.0, 0.25, 2.6); float hoofTrail1 = subtleHoofTrail(st, vec2(0.4, 0.6), 0.6, 1.3); float hoofTrail2 = subtleHoofTrail(st, vec2(0.6, 0.4), 0.6, 1.3); vec3 muscleEnergyCombined = vec3(muscleEnergy1, muscleEnergy2, (muscleEnergy1 + muscleEnergy2) * 0.5); vec3 hoofVibrationCombined = vec3(hoofTrail1, hoofTrail2, 0.4 * (hoofTrail1 + hoofTrail2)); float transitionBlend = smoothstep(0.2, 0.7, sin(time * 0.2)); return mix(muscleEnergyCombined, hoofVibrationCombined, transitionBlend); } // Implementing a slightly slow motion blur to emphasize subtle flow vec3 softMotionBlurEffect(vec2 st, float strength) { vec3 accumulatedColor = vec3(0.0); float blurAmount = 0.08 * strength; for (float i = 0.0; i <= 5.0; i++) { float t = i / 5.0; accumulatedColor += smoothTransitionDynamics(st + vec2(blurAmount * t, 0.0)); } return accumulatedColor / 6.0; } void main() { // Normalize the UV coordinates for square aspect ratio vec2 fragCoord = vec2((uv.x - 0.5) * max(width / height, 1.0) + 0.5, (uv.y - 0.5) * max(height / width, 1.0) + 0.5); // Apply a gentle motion blur to smoothen transitions in the energy pattern vec3 blurredFlow = softMotionBlurEffect(fragCoord, 0.6); // Calculate the output color which emphasizes gentle transitions and tranquility vec3 color = pow(blurredFlow, vec3(1.08)) * 1.12; // Output the shader with a focus on subtle transitions and gentle energy gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0); Wind Whisper
translate the following shader to our format: vec3 palette(float d){ return mix(vec3(0.2,0.7,0.9),vec3(1.,0.,1.),d); } vec2 rotate(vec2 p,float a){ float c = cos(a); float s = sin(a); return p*mat2(c,s,-s,c); } float map(vec3 p){ for( int i = 0; i<8; ++i){ float t = iTime*0.2; p.xz =rotate(p.xz,t); p.xy =rotate(p.xy,t*1.89); p.xz = abs(p.xz); p.xz-=.5; } return dot(sign(p),p)/5.; } vec4 rm (vec3 ro, vec3 rd){ float t = 0.; vec3 col = vec3(0.); float d; for(float i =0.; i<64.; i++){ vec3 p = ro + rd*t; d = map(p)*.5; if(d<0.02){ break; } if(d>100.){ break; } //col+=vec3(0.6,0.8,0.8)/(400.*(d)); col+=palette(length(p)*.1)/(400.*(d)); t+=d; } return vec4(col,1./(d*100.)); } void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 uv = (fragCoord-(iResolution.xy/2.))/iResolution.x; vec3 ro = vec3(0.,0.,-50.); ro.xz = rotate(ro.xz,iTime); vec3 cf = normalize(-ro); vec3 cs = normalize(cross(cf,vec3(0.,1.,0.))); vec3 cu = normalize(cross(cf,cs)); vec3 uuv = ro+cf*3. + uv.x*cs + uv.y*cu; vec3 rd = normalize(uuv-ro); vec4 col = rm(ro,rd); fragColor = col; } /** SHADERDATA { "title": "fractal pyramid", "description": "", "model": "car" } */ Rotation speed
translate the following shader to our format: vec3 palette(float d){ return mix(vec3(0.2,0.7,0.9),vec3(1.,0.,1.),d); } vec2 rotate(vec2 p,float a){ float c = cos(a); float s = sin(a); return p*mat2(c,s,-s,c); } float map(vec3 p){ for( int i = 0; i<8; ++i){ float t = iTime*0.2; p.xz =rotate(p.xz,t); p.xy =rotate(p.xy,t*1.89); p.xz = abs(p.xz); p.xz-=.5; } return dot(sign(p),p)/5.; } vec4 rm (vec3 ro, vec3 rd){ float t = 0.; vec3 col = vec3(0.); float d; for(float i =0.; i<64.; i++){ vec3 p = ro + rd*t; d = map(p)*.5; if(d<0.02){ break; } if(d>100.){ break; } //col+=vec3(0.6,0.8,0.8)/(400.*(d)); col+=palette(length(p)*.1)/(400.*(d)); t+=d; } return vec4(col,1./(d*100.)); } void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 uv = (fragCoord-(iResolution.xy/2.))/iResolution.x; vec3 ro = vec3(0.,0.,-50.); ro.xz = rotate(ro.xz,iTime); vec3 cf = normalize(-ro); vec3 cs = normalize(cross(cf,vec3(0.,1.,0.))); vec3 cu = normalize(cross(cf,cs)); vec3 uuv = ro+cf*3. + uv.x*cs + uv.y*cu; vec3 rd = normalize(uuv-ro); vec4 col = rm(ro,rd); fragColor = col; } /** SHADERDATA { "title": "fractal pyramid", "description": "", "model": "car" } */ Detail refinement