Repository navigation
Watering can: a shader Setup where staying put grows you a garden - #165
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Constants changed: none retuned (stills at 640x360 matched the Dense look). Added named sun constants to common.glsl in place of inline literals (SUN_WOBBLE_RATE, SUN_DRIFT, SUN_EDGE_SCALE, SUN_RIM_*, SUN_FILL_SOFT, SUN_GRAIN_A, SUN_HATCH, SUN_RAY_*), values unchanged. - Fix: the sun ray at atan's branch cut had two hash ids (-6 and 6) and popped as drift carried it across; the id is now wrapped with mod(id, SUN_RAYS). Test added (RED on the old image.glsl, GREEN now). - fps with --mock-camera --windowed: 30.1-30.2 (frame cap) over 2 min on a desktop GPU. Not measured on the Pi 5. - NOT verified with the real camera: the walking threshold, flicker immunity and re-ID inheritance. On site with --camera: a visitor stands 25 s and reaches full bloom with no rewind; waving arms does not rewind; one sideways step visibly rewinds. - Mouse (--test-input) check not done by eye (no human at the screen). Shadertoy pasting not checked (no browser). - Docs: watering_can added to "Setups in rotation". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nal review - Buffer B: a lost person's hold is rounded with one frame-wide golden-ratio offset instead of a per-texel hash, and every texel of theirs lets go the frame the Body leaves (not as eased presence crosses BODY_OFF), so a run's texels agree on the hold all the way through the fade and vines don't tear. - Buffer C: the sun's easing is stochastically rounded to GROW_Q so it reaches full instead of stalling at ~0.96-0.98 in a half float. - Tests: constants mirrored from common.glsl are parsed from it; new test_fading_hold_agrees_along_a_run; walker test checks body texels hold ~1; merge test uses unequal levels; sun test requires > 0.99 at 30 and 60 fps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the tracker merged a neighbour into a planted person's blob, the base (the presence-weighted mean of the feet band across the whole box, y = the box bottom) jumped by about half the gap and counted as a step, and jumped back on the split: two still people in contact lost most of their growth. - The base is measured locally: the feet band within BASE_WIN of the last base (mean-shifted BASE_ITERS times so it keeps up with a walk), with y the box bottom while the window finds feet there (BASE_FEET), else the person's own lowest body row (B's run bottom BASE_UP above the last base). - A neighbour within SPLIT_GAP changing tracker state this frame (a merge or a split) re-plants the person for REPLANT_S instead of counting a step: the base snaps to the feet and the spot follows. BASE.z is negative while re-planting. - A coasting track merged into a confirmed neighbour's box shares that neighbour's walking or not, so merged people grow (or rewind) together. - Tests: touching still people whose contact toggles every 0.3 s, every 1 s and on 50% of frames each grow at 1/GROW_S; a passer-by costs a planted person nothing once clear. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tapered, ink-outlined trunks that rise in pairs and merge as one shape, forking twigs ending in sprigs of pointed petals, and daisies on half the branch tips. Keeps the colour palette and ripening. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…so moving plants don't tear Each texel decided it was body from this frame's presence, but the march found its run's ends over last frame's body, so wherever the body had just arrived or left the texels of one run disagreed about its ends and the plants tore into rows. Membership now comes from last frame's stored texel alone (a frame of latency), and the per-texel easing of run ends, which gave each texel its own history, is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Branches and twigs spaced further apart (about 0.76 of the density). Growth reaches GROW_EARLY (0.3) in GROW_EARLY_S (2 s), then slows to full bloom at GROW_S as before. Tests take expected levels from the same constants. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Buffer C keeps a ring of FOOTPRINTS in row 3 (head in the SUN texel). A seen, walking person drops one at their feet once FOOT_GAP from every live footprint, only into an expired slot, so a live one never pops. Each grows a small clump of the same ink branches, sprigs and a daisy off the floor, fast, holds, then rewinds away. Footprints join the near grid and draw behind people's plants. The daisy is shared out of bloom(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Daisies in the pale yellow (#fbe9a0), light blue (#719aad, the site's band) and orange (#e8862f), centres picked to stand out from each. Branches are ink outlines on paper, as the concept art's, so the flowers carry the colour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Half the twigs end in a daisy that opens as the growing tip climbs past it: small and pale low on a run, larger and bolder higher up (so later). Flowers pale toward the paper, keeping their hue, rather than greying. The tips' late daisies stay the largest. Leaves and buds are ink on paper, as the branches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the per-column vines, each rooted at its own run bottom, with a single tree. Buffer C keeps a 1/48-screen-height grid in place of the near grid: each body cell's parent on the cheapest path back to the person's root (dearer near the silhouette's edge, so paths keep to each limb's middle), and how many seed cells' paths run through it. Branches are the seeds' paths, curved through their nodes and as wide as their seed count; seeds carry the sprigs and daisies. Growth is a front of path distance: up both legs from the root on the floor between the feet, through the torso, out the arms and up the neck. Nothing roots anywhere else, and waving keeps an arm's growth. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The root point (the middle of the lowest cells) jumped as a foot's edge flickered, and seed counts, which set branch widths, rippled down the trunk every frame. The root now eases (TREE_ROOT_EASE_S), as do seed counts (TREE_WIDTH_EASE_S; children pass on eased counts, so a settled tree adds up). Cells join the body at TREE_FILL and stay until half that, and keep their way back to the root unless another is TREE_PARENT_HYST cheaper. A still person's lower body changes about a quarter as many pixels a frame as before. 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.
Adds
watering_can, a new shader player Setup (ADR-0021). Closes #163.What visitors see
How it works
common.glsl. Edit and press R.docs/superpowers/specs/2026-11-06-watering-can-design.md, with the approved mockup next to it. The build plan is indocs/superpowers/plans/.Testing
test_watering_can.pyadds 53 headless GL tests, driven by the realBodyBlobstracker on synthetic masks with a 10 fps camera under a 30 fps render. They cover:make test: 452 passed.--mock-camera --windowedran at 30 fps (the frame cap) on a desktop GPU.Known issue (not fixed in this PR)
WALK_DISTfrom the spot, even while re-planting.Not verified yet
setups.json. Per pixel, a body pixel costs about 29–47 B taps; C costs about 590k fetches a frame. If it's short, cut in this order: leaf count, petal count,VINE_NEIGHBOURS,RUN_STEPS.WALK_DIST), feet window (BASE_WIN), flicker immunity or re-ID inheritance. On site with--camera:--test-inputmouse check and pasting the tabs into Shadertoy haven't been done.🤖 Generated with Claude Code