↻ a newer version of this shader exists: slop boye
#8958rcpo — this one is kept as-is (links and embeds never break) but no longer shows in browse.experimental backend WebGL2 · not opted in
Enable WebGPU controls in settings. WebGL2 remains unchanged. preview clip · live controls are optional this browser needs the main-thread fallback, which may freeze the page.
0.35
1.15
0.45
0.80
1.00
0.85
5.00
0.25
/*{ "DESCRIPTION": "Silicon Pastoral Dreams — an uncanny CGI landscape of wet grass, chrome organisms, floating eyes, glass ribbons and reflective spheres.", "CREDIT": "OpenAI for Circa", "CATEGORIES": [ "Generator", "Surreal", "Landscape" ], "INPUTS": [ { "NAME": "speed", "TYPE": "float", "DEFAULT": 0.35, "MIN": 0.0, "MAX": 2.0 }, { "NAME": "brightness", "TYPE": "float", "DEFAULT": 1.15, "MIN": 0.4, "MAX": 2.0 }, { "NAME": "dreamWarp", "TYPE": "float", "DEFAULT": 0.45, "MIN": 0.0, "MAX": 1.0 }, { "NAME": "chrome", "TYPE": "float", "DEFAULT": 0.8, "MIN": 0.0, "MAX": 1.0 }, { "NAME": "eyeScale", "TYPE": "float", "DEFAULT": 1.0, "MIN": 0.4, "MAX": 1.8 }, { "NAME": "grassDetail", "TYPE": "float", "DEFAULT": 0.85, "MIN": 0.0, "MAX": 1.0 }, { "NAME": "organismCount", "TYPE": "float", "DEFAULT": 5.0, "MIN": 1.0, "MAX": 8.0 }, { "NAME": "cameraDrift", "TYPE": "float", "DEFAULT": 0.25, "MIN": 0.0, "MAX": 1.0 } ] }*/ #define PI 3.14159265359 #define TAU 6.28318530718 #define MAX_ORGANISMS 8 #define MAX_SPINES 18 float saturate(float x) { return clamp(x, 0.0, 1.0); } float hash21(vec2 p) { p = fract(p * vec2(123.34, 456.21)); p += dot(p, p + 45.32); return fract(p.x * p.y); } float noise21(vec2 p) { vec2 i = floor(p); vec2 f = fract(p); f = f * f * (3.0 - 2.0 * f); float a = hash21(i); float b = hash21(i + vec2(1.0, 0.0)); float c = hash21(i + vec2(0.0, 1.0)); float d = hash21(i + vec2(1.0, 1.0)); return mix( mix(a, b, f.x), mix(c, d, f.x), f.y ); } float fbm(vec2 p) { float value = 0.0; float amplitude = 0.5; for (int i = 0; i < 5; i++) { value += noise21(p) * amplitude; p = p * 2.03 + vec2(13.1, 7.7); amplitude *= 0.5; } return value; } mat2 rot(float a) { float s = sin(a); float c = cos(a); return mat2(c, -s, s, c); } float sdCircle(vec2 p, float r) { return length(p) - r; } float sdEllipse(vec2 p, vec2 r) { return (length(p / r) - 1.0) * min(r.x, r.y); } float sdCapsule(vec2 p, vec2 a, vec2 b, float r) { vec2 pa = p - a; vec2 ba = b - a; float h = saturate(dot(pa, ba) / dot(ba, ba)); return length(pa - ba * h) - r; } vec3 skyColor(float y) { vec3 horizon = vec3(0.72, 0.90, 1.03); vec3 zenith = vec3(0.18, 0.59, 0.96); float gradient = smoothstep(0.37, 1.0, y); return mix(horizon, zenith, gradient); } vec3 chromeColor(vec2 normal, float fresnel, float phase) { float reflectionBand = 0.5 + 0.5 * sin( normal.y * 11.0 + normal.x * 4.0 + phase ); vec3 darkMetal = vec3(0.015, 0.035, 0.055); vec3 skyMetal = vec3(0.42, 0.77, 1.00); vec3 whiteMetal = vec3(0.92, 0.98, 1.00); vec3 col = mix(darkMetal, skyMetal, reflectionBand); col = mix(col, whiteMetal, pow(reflectionBand, 8.0)); return mix(col, vec3(0.02, 0.06, 0.08), fresnel * 0.25); } vec3 renderGrass(vec2 uv, vec2 aspectUV, float horizon, float t) { float groundDepth = 0.095 / max(horizon - uv.y, 0.008); float worldX = (aspectUV.x - 0.5) * groundDepth; vec2 world = vec2( worldX, groundDepth + t * 0.025 ); float broadNoise = fbm(world * vec2(0.8, 0.18)); float fineNoise = fbm(world * vec2(5.0, 1.1)); vec3 shadowGrass = vec3(0.008, 0.095, 0.018); vec3 midGrass = vec3(0.025, 0.31, 0.045); vec3 lightGrass = vec3(0.18, 0.53, 0.08); vec3 col = mix(shadowGrass, midGrass, broadNoise); col = mix(col, lightGrass, fineNoise * 0.42); float blades = sin(world.x * 75.0 + world.y * 4.0) * sin(world.x * 31.0 - world.y * 8.0); blades = pow(max(blades, 0.0), 7.0); blades *= smoothstep(0.3, 2.5, groundDepth); float bladeNoise = hash21( floor( world * vec2(120.0, 18.0) ) ); col += vec3(0.19, 0.48, 0.055) * blades * bladeNoise * grassDetail; float wetGlints = pow( max( 0.0, sin(world.x * 117.0 + world.y * 11.0) ), 25.0 ); wetGlints *= step( 0.91, hash21(floor(world * 45.0)) ); col += vec3(0.62, 0.92, 0.92) * wetGlints * grassDetail * 0.7; float distanceFade = smoothstep(0.0, 1.7, groundDepth); col = mix( vec3(0.21, 0.42, 0.12), col, distanceFade ); return col; } vec3 renderReflectiveSphere( vec2 uv, vec2 center, float radius, float phase, vec3 background ) { vec2 p = (uv - center) / radius; float r2 = dot(p, p); float mask = 1.0 - smoothstep(0.94, 1.01, sqrt(r2)); if (mask <= 0.0) { return background; } float z = sqrt(max(0.0, 1.0 - r2)); vec3 normal = normalize(vec3(p, z)); float fresnel = pow( 1.0 - max(normal.z, 0.0), 3.0 ); float reflectedY = normal.y * 0.5 + 0.5; vec3 reflection = skyColor(reflectedY); float groundReflection = smoothstep(-0.05, -0.7, normal.y); reflection = mix( reflection, vec3(0.015, 0.19, 0.025), groundReflection ); float darkBand = exp( -18.0 * abs(normal.y + 0.17) ); reflection *= 1.0 - darkBand * 0.78; float horizonBand = exp( -45.0 * abs(normal.y + 0.02) ); reflection += vec3(0.82, 0.97, 1.0) * horizonBand; float highlight = pow( max( 0.0, dot( normal, normalize(vec3(-0.65, 0.72, 1.0)) ) ), 45.0 ); reflection += vec3(1.0) * highlight * 1.8; reflection += vec3(0.20, 0.55, 0.72) * fresnel; float edge = exp( -28.0 * abs(sqrt(r2) - 1.0) ); reflection += vec3(0.76, 0.96, 1.0) * edge * 0.55; return mix(background, reflection, mask); } vec3 renderEyeOrganism( vec2 uv, vec2 center, float scale, float phase, float depth, vec3 background ) { vec2 p = (uv - center) / scale; float floatMotion = sin(phase * 0.7) * 0.025; p.y += floatMotion; float bodyRadius = 0.29 + 0.018 * sin(phase * 1.3); float bodyDistance = sdCircle(p, bodyRadius); float bodyMask = 1.0 - smoothstep(-0.01, 0.014, bodyDistance); float bodyGlow = exp( -13.0 * max(bodyDistance, 0.0) ); vec3 col = background; col += vec3(0.08, 0.34, 0.28) * bodyGlow * 0.25; vec2 sphereP = p / bodyRadius; float sphereR2 = dot(sphereP, sphereP); float sphereZ = sqrt(max(0.0, 1.0 - sphereR2)); vec3 bodyNormal = normalize(vec3(sphereP, sphereZ)); float bodyLight = saturate( dot( bodyNormal, normalize(vec3(-0.6, 0.8, 1.0)) ) ); float bodyFresnel = pow( 1.0 - max(bodyNormal.z, 0.0), 3.0 ); vec3 bodyColor = mix( vec3(0.002, 0.018, 0.017), vec3(0.015, 0.17, 0.11), bodyLight ); bodyColor += vec3(0.02, 0.28, 0.25) * bodyFresnel; float bodyHighlight = pow(bodyLight, 18.0); bodyColor += vec3(0.63, 0.95, 0.86) * bodyHighlight * 0.6; col = mix(col, bodyColor, bodyMask); /* Organic spikes surrounding the creature */ for (int i = 0; i < MAX_SPINES; i++) { float fi = float(i); float angle = fi / float(MAX_SPINES) * TAU + 0.09 * sin(phase + fi); vec2 direction = vec2(cos(angle), sin(angle)); float spikeLength = 0.13 + 0.07 * hash21(vec2(fi, depth * 19.0)); vec2 a = direction * 0.22; vec2 b = direction * (0.34 + spikeLength); float spike = sdCapsule( p, a, b, mix(0.035, 0.014, length(p)) ); float spikeMask = 1.0 - smoothstep(-0.008, 0.009, spike); float spikeShade = 0.35 + 0.65 * saturate( direction.y * 0.5 + 0.5 ); vec3 spikeColor = mix( vec3(0.002, 0.012, 0.013), vec3(0.025, 0.19, 0.15), spikeShade ); spikeColor += vec3(0.42, 0.78, 0.65) * pow(spikeShade, 7.0) * chrome; col = mix( col, spikeColor, spikeMask ); } /* Dimensional eyeball */ vec2 eyeP = p - vec2( 0.055 * sin(phase * 0.28), 0.012 * cos(phase * 0.37) ); eyeP.x *= 0.92; float eyeDistance = sdCircle(eyeP, 0.185); float eyeMask = 1.0 - smoothstep(-0.008, 0.01, eyeDistance); vec2 eyeSphereP = eyeP / 0.185; float eyeR2 = dot(eyeSphereP, eyeSphereP); float eyeZ = sqrt(max(0.0, 1.0 - eyeR2)); vec3 eyeNormal = normalize(vec3(eyeSphereP, eyeZ)); float eyeLight = saturate( dot( eyeNormal, normalize(vec3(-0.55, 0.7, 1.0)) ) ); vec3 sclera = mix( vec3(0.44, 0.52, 0.48), vec3(0.98, 0.96, 0.83), eyeLight ); float irisDistance = length( eyeP - vec2( 0.025 * sin(phase * 0.4), 0.012 * cos(phase * 0.31) ) ); float iris = 1.0 - smoothstep( 0.072, 0.09, irisDistance ); float pupil = 1.0 - smoothstep( 0.025, 0.038, irisDistance ); float irisTexture = 0.5 + 0.5 * sin( atan(eyeP.y, eyeP.x) * 22.0 + irisDistance * 170.0 ); vec3 irisColor = mix( vec3(0.005, 0.07, 0.10), vec3(0.16, 0.64, 0.76), irisTexture ); irisColor += vec3(0.55, 0.89, 0.92) * pow(irisTexture, 8.0); vec3 eyeColor = sclera; eyeColor = mix(eyeColor, irisColor, iris); eyeColor = mix( eyeColor, vec3(0.001, 0.006, 0.009), pupil ); float eyeHighlight = 1.0 - smoothstep( 0.017, 0.035, length( eyeP - vec2(-0.065, 0.07) ) ); eyeColor += vec3(1.0, 1.0, 0.95) * eyeHighlight * 1.5; float eyeRim = exp( -45.0 * abs(eyeDistance) ); eyeColor += vec3(0.08, 0.15, 0.12) * eyeRim; col = mix(col, eyeColor, eyeMask); return col; } vec3 renderGlassRibbon( vec2 uv, float offset, float amplitude, float width, float phase, vec3 background ) { float curve = offset + sin( uv.x * 5.0 + phase ) * amplitude; curve += sin( uv.x * 11.0 - phase * 0.43 ) * amplitude * 0.18; float distanceToCurve = abs(uv.y - curve); float ribbon = 1.0 - smoothstep( width, width + 0.008, distanceToCurve ); float rim = exp( -85.0 * abs(distanceToCurve - width) ); float innerReflection = 0.5 + 0.5 * sin( distanceToCurve * 260.0 + uv.x * 14.0 ); vec3 glassColor = mix( vec3(0.06, 0.31, 0.43), vec3(0.74, 0.96, 1.0), innerReflection ); glassColor *= mix(0.35, 0.82, chrome); vec3 col = mix( background, glassColor, ribbon * 0.58 ); col += vec3(0.55, 0.92, 1.0) * rim * chrome; return col; } vec3 renderBoneChain( vec2 uv, float offset, float amplitude, float phase, vec3 background ) { float curve = offset + sin( uv.x * 4.8 + phase ) * amplitude; vec2 cellUV = vec2( uv.x * 28.0, (uv.y - curve) * 28.0 ); vec2 cell = fract(cellUV) - 0.5; float cellIndex = floor(cellUV.x); float randomRotation = (hash21(vec2(cellIndex, 4.0)) - 0.5) * 1.1; cell *= rot(randomRotation); float vertebra = sdCapsule( cell, vec2(-0.24, 0.0), vec2(0.24, 0.0), 0.095 ); float upperBranch = sdCapsule( cell, vec2(-0.04, 0.02), vec2(-0.18, 0.31), 0.052 ); float lowerBranch = sdCapsule( cell, vec2(0.04, -0.02), vec2(0.17, -0.29), 0.047 ); float boneDistance = min( vertebra, min(upperBranch, lowerBranch) ); float curveMask = 1.0 - smoothstep( 0.035, 0.05, abs(uv.y - curve) ); float boneMask = ( 1.0 - smoothstep( -0.008, 0.012, boneDistance ) ) * curveMask; float boneShade = smoothstep( -0.15, 0.22, cell.y ); vec3 boneColor = mix( vec3(0.10, 0.16, 0.18), vec3(0.88, 0.96, 0.93), boneShade ); boneColor += vec3(0.35, 0.69, 0.83) * pow(boneShade, 7.0) * chrome; float shadow = exp( -22.0 * abs(uv.y - curve + 0.012) ); vec3 col = background; col *= 1.0 - shadow * 0.08; col = mix(col, boneColor, boneMask); return col; } void main() { vec2 uv = isf_FragNormCoord.xy; vec2 resolution = RENDERSIZE.xy; float aspect = resolution.x / max(resolution.y, 1.0); vec2 sceneUV = uv; sceneUV.x = (sceneUV.x - 0.5) * aspect + 0.5; float t = TIME * speed; sceneUV.x += sin(t * 0.11) * cameraDrift * 0.035; sceneUV.y += cos(t * 0.09) * cameraDrift * 0.012; float horizon = 0.43; vec3 color = skyColor(uv.y); /* Soft atmospheric CGI haze */ float cloudNoise = fbm( vec2( sceneUV.x * 2.2 + t * 0.015, uv.y * 3.2 ) ); float haze = cloudNoise * smoothstep(0.42, 0.75, uv.y) * 0.12; color += vec3(0.58, 0.79, 0.94) * haze; float horizonGlow = exp( -19.0 * abs(uv.y - horizon) ); color += vec3(0.42, 0.78, 0.96) * horizonGlow * 0.2; /* Wet photorealistic grass plane */ if (uv.y < horizon) { vec3 grass = renderGrass( uv, sceneUV, horizon, t ); float groundMask = smoothstep( horizon, horizon - 0.015, uv.y ); color = mix( color, grass, groundMask ); } /* Distant smooth grassy mounds */ float hill = horizon + 0.025 + 0.035 * sin(sceneUV.x * 8.0) + 0.018 * sin(sceneUV.x * 17.0 + 2.0); float hillMask = 1.0 - smoothstep( hill, hill + 0.008, uv.y ); vec3 hillColor = mix( vec3(0.025, 0.19, 0.03), vec3(0.18, 0.42, 0.055), fbm(sceneUV * 12.0) ); color = mix( color, hillColor, hillMask * smoothstep(0.36, 0.47, uv.y) ); /* Monumental glass loops */ color = renderGlassRibbon( sceneUV, 0.59, 0.19, 0.018, t * 0.22, color ); color = renderGlassRibbon( sceneUV, 0.66, 0.13, 0.009, -t * 0.17 + 2.4, color ); /* Skeletal organic ribbons */ color = renderBoneChain( sceneUV, 0.61, 0.15, t * 0.18, color ); color = renderBoneChain( sceneUV, 0.46, 0.10, -t * 0.12 + 1.7, color ); color = renderBoneChain( sceneUV, 0.34, 0.075, t * 0.15 + 3.1, color ); /* Floating chrome memory-spheres */ color = renderReflectiveSphere( sceneUV, vec2( 0.16, 0.82 + 0.012 * sin(t) ), 0.045, t, color ); color = renderReflectiveSphere( sceneUV, vec2( 0.39, 0.66 + 0.018 * sin(t * 0.7 + 2.0) ), 0.037, t + 2.0, color ); color = renderReflectiveSphere( sceneUV, vec2( 0.77, 0.73 + 0.015 * cos(t * 0.8) ), 0.026, t + 4.0, color ); /* Biomechanical eye characters */ for (int i = 0; i < MAX_ORGANISMS; i++) { float fi = float(i); float enabled = 1.0 - step(organismCount, fi); float seed = fi * 17.31 + 6.0; float depth = hash21(vec2(seed, 8.2)); float x = mix( 0.12, 0.91, hash21(vec2(seed, 2.1)) ); float y = mix( 0.29, 0.62, hash21(vec2(seed, 4.9)) ); x += sin(t * 0.18 + seed) * 0.016 * dreamWarp; y += cos(t * 0.23 + seed) * 0.012 * dreamWarp; float scale = mix(0.032, 0.095, depth) * eyeScale; vec3 organism = renderEyeOrganism( sceneUV, vec2(x, y), scale, t + seed, depth, color ); color = mix( color, organism, enabled ); } /* Subtle dream-lens distortion */ float spectral = sin( uv.x * 17.0 + uv.y * 11.0 + t ); color.r += spectral * dreamWarp * 0.006; color.b -= spectral * dreamWarp * 0.004; float vignette = 1.0 - smoothstep( 0.46, 0.93, length( (uv - 0.5) * vec2(0.82, 1.0) ) ); color *= 0.88 + 0.12 * vignette; color *= brightness; /* Glossy photographic response */ color = max(color, vec3(0.0)); color = color / (0.82 + color * 0.24); color = pow(color, vec3(0.91)); gl_FragColor = vec4(color, 1.0); }
Silicon Pastoral Dreams — an uncanny CGI landscape of wet grass, chrome organisms, floating eyes, glass ribbons and reflective spheres.
GeneratorSurrealLandscape
by mcnuggetsupremeuser_uploadmade with glslopCC0-1.0credit: OpenAI for Circaactive·created 2026-08-27 07:36Z49 views1 forks8 params
lineage
forks (1)
export clip · render a video in your browser
Renders to video in your browser (no upload), stepping the real renderer frame by frame so multipass + feedback come out right. motion auto-animates the shader's own knobs — each export rolls a fresh take (🎲 re-roll, 🔒 to pin one you like). GIF is slower with a tighter length cap; MP4/WebM are faster. Some devices record in real time (noted below if so) — keep the tab visible.
caps: ≤1920 per side, ≤60fps, ≤18000 frames (GIF ≤300)
embed · drop this shader into any page
Renders client-side in the reader's browser (CC0 — no attribution required, but the backlink is appreciated).