glslop
[ CC0 shader vibe commons · everything here is public domain ]
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.
params (43)
2.00
1.50
0.00
-0.08
1.00
0.45
1.00
5.50
0.62
0.25
0.60
0.66
3.60
0.26
0.30
0.80
0.85
0.55
0.60
0.70
0.45
0.65
0.60
0.55
3.05
0.72
1.00
0.45
0.60
0.04
0.00
1.00
0.70
0.75
0.60
0.50
0.75
0.80
0.75
0.40
0.25
0.24
0.50
.fs source · isf not running

the poo rooms

#ug86ak8m
⑂ fork it{ } json

The Poo Rooms. The same infinite tiled natatorium, flooded to the ankles in something opaque. Structurally this is not a recolour of the Poolrooms, because the fluid stops being transparent and transparency was carrying most of that shader: with no transmission there is no refracted ray, so the refraction march, the Beer-Lambert absorption and the in-scattered turquoise all delete outright - and the caustics go with them, since a caustic is the Jacobian of the refracted map and there is no refracted map. That freed budget is what pays for the flies. Three things then have to be rebuilt rather than retuned. FIRST, VISCOSITY IS A LOW-PASS FILTER. Viscous damping goes as nu times k squared, so a thick fluid loses its short wavelengths first and keeps only long slow undulations; the four dispersive wave trains of the water version collapse to two, running at a fraction of the speed, and the surface is nearly static. Turn viscosity down and the top octaves come back and it starts behaving like water again, which is the honest way to expose that slider. SECOND, THE AMPLITUDE CROSSES THE PIXEL. The water was 13 mm of ripple - under a pixel at any distance past arm's length - which is the entire reason it could be solved as one plane hit plus a Newton step, with everything the viewer reacts to living in the normal. Lumps are 70 mm and they breach: the displacement is now several pixels, so it has to be traced, and the shader falls back to exactly what Seascape does for its 0.6 m waves - bracket the ray between a plane guaranteed above the surface and one guaranteed below, walk it with a step bounded by the field's slope, then refine the crossing by secant. Amplitude relative to a pixel, not taste, is what decides between the two methods. THIRD, IT IS NON-NEWTONIAN, so it holds shape: a crust field breaks the surface into plates that do NOT move with the undulation underneath, cracked along noise ridges, drier and matter where it has set. Bubbles surface and pop on a beat, and they are a shading feature rather than a geometric one on purpose - a 3 cm dome is smaller than the tracer's step and would simply be walked over, so it is applied as a normal perturbation and a ring in the albedo where it can never be missed. Reflection is a broad rough sheen rather than a march: an opaque surface at 0.035 Fresnel with this much roughness returns almost nothing legible, so a fifty-step reflection ray would be fifty map calls spent on mud, and a single wide specular lobe off the light gather is both cheaper and more correct. The flies are the other half. They are not geometry and never touch the distance field: each is a point tested against the primary ray by closest approach, which costs a dot product, and two things make them read as insects rather than as dots. They DART - the path is piecewise linear between hashed waypoints on a per-fly beat, so heading changes are discontinuous the way a real fly's are, where any smooth orbit reads as a planet. And they are MOTION BLURRED, because a fly covers several body lengths in one frame's exposure: the closest-approach distance is measured in an ellipse stretched along the velocity projected into the image, which turns each one into a streak for one extra normalise. Sub-pixel flies are the aliasing case, and fading them out with distance would be wrong because a swarm at ten metres is still visible - so a fly whose radius falls under a pixel is widened to a pixel and dimmed by the square of the widening, which conserves what it contributes and stops the whole swarm scintillating as the flies cross pixel centres. Clusters sit over the surface or up under a lit coffer, and the swarm is composited back to front so the near ones win. The tile, the arches, the plan, the coffers, the footprint filtering and the shafts are all as before; the accent course at the waterline is now buried under the tide line. Forty-one controls.

#poo#backrooms#shit#poopgeneratorraymarchliminalhorrorgrossfliesprocedural3d
by kiwitnessed_generationmade with glslopCC0-1.0credit: CC0. Plan generation, footprint filtering and the light gather follow the CC0 BACKROOMS shader.activecreated 2026-09-10 03:19Z125 views0 forks43 paramsclaude-opus-5
lineage
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
preview ↗

Renders client-side in the reader's browser (CC0 — no attribution required, but the backlink is appreciated).