Small life, calm play
Two field-specific life passes and one shared breeze. The forest stays a woodland clearing. The farm stays bright, airy and pastel.
Two pale butterflies and three falling leaves at the desktop Home perimeter. Seated play hides the batch; phone framing stays quiet.
Two authored flower visitors and four petals, with pollen reduced from 44 to 18. The phone guard retains one butterfly at a time in the tested framing. Tight play lenses suppress all life.
A slow travelling breeze, rooted plants and a calmer mill. Forest movement caps at 15 mm; farm stems at 35 mm. Low tier omits wind shader work.
The seven shipped views are preserved. Home actors and real offline games can differ between captures; card and status-prop differences are game state. Click either image for the full capture. A still proves placement and scale, not flutter or gust speed.
Forest small life
Keep the clearing open. The new cream visitor stays beside the perimeter plant; leaves fall locally instead of crossing the centre. No new texture or GLB.



Farm small life
Phone Home earns one readable flower visitor beside the existing flowers. The second authored visitor stays masked where its full path would reach the protected area. The complete butterfly and petal paths are omitted when their projection reaches the play area. Desktop Home retains the conservative guard.



Shared wind and sway
Existing tagged forest leaves and farm stems follow the same gust phase. Roots stay planted. These stills show the unchanged vegetation and mill; animation bounds are checked numerically, with motion review reserved for sign-off.




Mill speed: 0.45 → 0.18 rad/s nominal, about 35 seconds per turn. Low tier: static plant wind, mill 0.09 rad/s. Clouds stay unchanged.
Cost against the audit
Timing uses the original Mac mini M1 harness. Today is the audit baseline; After is this combined lane. Whole-scene counters include real game-state variation. The construction table below isolates this lane's geometry and texture changes.
| Field and viewport | Today triangles / draws | After triangles / draws | Today GPU ms median / p95 | After GPU ms median / p95 | Today CPU ms median / p95 | After CPU ms median / p95 |
|---|---|---|---|---|---|---|
| Forest · Board 1440 × 900 | 2,143,577 / 40 | pending / pending | 3.46 / 4.34 | pending / pending | 1.80 / 2.70 | pending / pending |
| Forest · Board 1920 × 1080 | 2,143,577 / 40 | pending / pending | 3.55 / 4.20 | pending / pending | 1.70 / 2.60 | pending / pending |
| Forest · Phone board | 2,143,577 / 40 | pending / pending | 3.93 / 4.47 | pending / pending | 1.90 / 2.70 | pending / pending |
| Forest · Phone board, low tier | 2,143,577 / 40 | pending / pending | 3.33 / 3.63 | pending / pending | 2.60 / 3.80 | pending / pending |
| Farm · Board 1440 × 900 | 693,140 / 43 | pending / pending | 2.22 / 2.37 | pending / pending | 2.80 / 3.70 | pending / pending |
| Farm · Board 1920 × 1080 | 691,456 / 39 | pending / pending | 2.23 / 3.20 | pending / pending | 2.40 / 3.00 | pending / pending |
| Farm · Phone board | 691,476 / 38 | pending / pending | 2.21 / 2.35 | pending / pending | 1.90 / 2.60 | pending / pending |
| Farm · Phone board, low tier | 480,246 / 41 | pending / pending | 1.01 / 1.04 | pending / pending | 5.90 / 7.40 | pending / pending |
Desktop DPR 1. Phone 390 × 844 at DPR 2 high, DPR 1 low. M1 timings are not phone-device certification. Raw cost rows · Audit baselines
| Sub-lane | Maximum geometry change | Draw change | New field assets | Field-bound texture change |
|---|---|---|---|---|
| Forest life · Home high/mid | +20 triangles | +1 | 0 bytes | 0 bytes |
| Forest life · seated / low | 0 submitted | 0 | 0 bytes | 0 bytes |
| Farm life · high/mid | +48 triangles, replaces 44 points | 0 net, one batch | 0 bytes | −21,844 bytes |
| Farm life · low | Removes 12 points | −1 | 0 bytes | −5,460 bytes |
| Shared wind | 0 | 0 | 0 bytes | 0 bytes |
Full-detail field downloads stay unchanged: forest 13,959,800 bytes including embedded textures; farm 2,863,159 bytes including its 497,643 bytes of existing ground and pollen maps. Field GLBs alone: forest 13,959,800 bytes, farm 2,365,516 bytes. No new image download. The old farm pollen image remains in shared preload, so the field-bound texture saving does not claim a download or shared-cache saving. Metal captures estimate 60,205,724 bytes of field-bound texture storage for forest on both tiers, 44,826,620 bytes for farm high and 11,206,652 bytes for farm low. These are unique RGBA8 material textures plus mip levels; driver padding and shared preload caches are excluded.
Animation cost
| Same Home scene on M1 | GPU with life ms median / p95 | GPU life hidden ms median / p95 | Field update median / p95 |
|---|---|---|---|
| M1 timing queued. No substitute MacBook timing is presented. | |||
The life-hidden control keeps the same camera, field, wind shaders and scene. Timer queries cover 24 static renders, with four warm-ups excluded and disjoint results rejected. CPU frame figures are rendered requestAnimationFrame callback work during the existing five-second wake window. CPU and GPU overlap; do not add them. A separate batched field.update(t) probe measures only JavaScript animation updates.
Build scope and checks
Forest: new forestLife module and forest lifecycle hooks. Farm: new farmLife module replacing the CPU pollen upload and field lifecycle hooks. Wind: existing forest/farm shader hooks and mill rotation. Existing dispose and shader-key assertions cover the changed lifecycle and program key. No actor, card, UI, FX, engine, server, layout, lighting, ground, prop or GLB edits.
24 existing forest/farm tests passed together. Forest paths have at least 1.338 m board/plate clearance; its seated batch is hidden. Farm checked 24,914 production camera samples with no projected life overlap. These checks support the GPU captures; they are not a design sign-off.
Drafts: forest #246, farm #249, wind #248. Each branch has its own worktree. Fresh-install branch gates are running on omarchy-dell. No ready mark, stamp, queue or merge before sign-off.
Low tier switches added life off on both fields. The field modules start no timers or render loops and preserve the host's idle sleep. Current callers supply no field reduced-motion signal, so this draft adds no new preference plumbing.
Decision for Kyle
Approve the scale and restraint shown here, or choose which field needs a stronger Home cue. Motion loops and final review follow still sign-off.