Repository navigation
Rainbow poop: a shader Setup where rainbow poop falls on visitors (#161) - #168
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ick (#161) - Buffer B keeps the flock (orbit, dive, climb), the poops in flight, a bomb countdown and low-passed anchor per person, a ring of splats per person in their own frame, and a ring of ground puddles. - One idle bird per overdue person: first bomb ~1.2-2 s after confirming, then every 5 +/- 1 s. The dive leads the target by the fall time, so reversing after the drop dodges and the poop splats at their feet. - Splats are clipped to the silhouette, drip, fade after 20 s, and fade over 0.6 s when the track is lost; a new track starts clean. - Ages and countdowns are stored in 1/32 s steps rounded stochastically, since plain f16 adds of 1/30 above 8 s ran ~6% slow. - Buffer D is left free for the blob painter. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The per-texel random dither for tick() left ages wandering ~0.17 s (1 sigma) over 15 s, so test_ages_keep_time_in_half_floats passed locally by luck and failed in CI (0.125 s). A Weyl sequence, fract(iFrame * phi) in integers, keeps the running error within about one AGE_Q. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ii-impy
force-pushed
the
claude/rainbow-poop
branch
from
November 8, 2026 17:38
ff2f6d4 to
b4e93a5
Compare
…s big - The flock, dives and climbs are gone. Each person's poop appears just above the top of the screen, over where they'll be, and falls at a steady 0.2 sh/s with a gentle sway, so it can be watched the whole way. One per person in the air at a time; drop points are kept on screen. - Cadence, leading aim and dodging are unchanged; a miss falls to the person's feet and leaves a puddle. - Splats are twice the radius (SPLAT_R 0.15 x box height) and sit a little deeper; puddles double to match, and the falling drop is larger. - Tests: bird tests replaced with fall tests (starts at the top, takes over a second, one at a time, drawn while falling). - 30.2 fps (the cap) on the show machine with --mock-camera. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e box On site, poops often missed and splats slid around people as they moved. - Homing: a falling poop drifts toward its person's centre of mass, at up to HOMING_MAX (0.18 sh/s). Aim spread is now +/- 0.05 of their size, not half the box width. Fidgeting people are always hit (was 81% on a person-shaped test silhouette); walking or turning away still dodges. - Anchor: splats ride on the silhouette's centre of mass and size (SIZE_K x sqrt(area)), measured from this frame's Body inside the tracker's box, instead of the eased box top-centre and height. Raised arms, arms out and strides barely move them (0.055 -> < 0.035 UV in the test), and they no longer lag the silhouette. - Tests: splats stay put with arms up/out while walking; a fidgeting person-shaped silhouette is always hit. Both fail on the previous commit. - Still 30.2 fps (the cap) on the show machine with --mock-camera. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #161.
A new shader player Setup,
rainbow_poop. About every 5 s, a rainbow poop appears at the top of the sky over each visitor. It drifts down slowly enough to watch and splats on their silhouette. The splats stick to the person, drip, and fade after 20 s. If the visitor turns round after it appears, it misses and lands on the floor at their feet.Spec:
docs/superpowers/specs/2026-11-08-rainbow-poop-design.md. The first build had a flock of birds dive-bombing; the birds were removed on review (see the spec's "Revisions" section).How it works
Buffer B (a small texel grid) holds, per person:
It also holds a ring of 8 floor puddles.
The fall: the poop starts just above the top of the screen. The drop point is over the person's centre of mass, ahead of them by their velocity × the fall time, and always on screen. It falls at a steady
FALL_SPEED(0.2 screen heights/s) with a gentle sway, drifting toward its person at up toHOMING_MAX(0.18 screen heights/s). Standing or fidgeting gets you hit; walking or turning away dodges.Image draws paper and clouds, floor puddles, people (warm-white fill with an ink outline, as in
hunter_bird), splats clipped to the silhouette, then falling poops.Sizes: splats are 0.15 × the person's size (about their height) in radius, and puddles 0.1 screen heights.
Ages and countdowns advance in 1/32 s steps with golden-ratio rounding, which keeps them exact in 16-bit buffers.
Shadertoy: Buffer D is left free for the blob painter.
Every tunable is at the top of
common.glsl.Testing
test_rainbow_poop.py: 22 headless GL tests using the realBodyBlobstracker on a fake clock. They cover:test_hunter_bird.py::test_person_has_white_fill_and_ink_outlinefails on this machine on a cleanmaintoo, but passes in CI.shader_app.py --mock-camera --windowed --setup rainbow_poopholds the 30 fps cap (30.2 fps; render 640×360).Not verified
🤖 Generated with Claude Code