Light, contact and colour
Soft directional shade grounds both fields. Local occlusion deepens the forest's leaf overlaps and separates the farm's pale props while keeping its fairy-like daylight.


All seven audit camera/viewport combinations are available for each field. Desktop DPR 1; phone 390 × 844 at DPR 2, low at DPR 1. Offline card draws and settled status props can differ between captures.
What changed
Lighting and shadow softness
Forest
The canopy casts a broad, shape-matched shadow in the shared sun direction. The clearing stays open.
Farm
Fence rails, bales and the cart share soft directional ground shade. Distant hills do not cast into the paddock.
Ambient occlusion and contact shadows
Forest
Eight-ray local AO deepens leaf overlaps. The ground atlas adds tight root and plant contact.
Farm
Small-radius AO stays inside leaf overlaps and prop joints. The atlas seats feet, rails and supports.
Colour grading
Forest
Leaf indirect light is cooler and less saturated than the lawn. Bark retains the existing warm key.
Farm
A field-only highlight shoulder preserves colour in pale hay and cream rails. The approved sky, haze and light rig stay unchanged.
Production drafts
These implement the study with lower phone memory cost. Design sign-off and coordinator review remain pending.
| Draft and head | Final field GLB | Field texture estimate phone high / low | Added atlas storage | Full gate |
|---|---|---|---|---|
Farm draft98a60cd8 | 2,496,116 bytes +130,600 vs Today 3,884 bytes below 2,500,000 | High 44.11 MiB Low 10.69 MiB 11,213,136 low-tier bytes | High 1,398,100 bytes Low 0 bytes | Passed; fixture fix verified by complete mobile-phase rerun Draft, unstamped |
Forest draft7ebe20a3 | 14,906,308 bytes +946,508 vs Today no guard change | High 62.75 MiB Low 57.42 MiB 60,206,748 low-tier bytes | High 5,592,404 bytes Low 0 bytes | Passed: npm run gate:pr Draft, unstamped |
Farm GPU verification: Phone Home · Phone board · Phone board · low. Apple M3 Pro/ANGLE Metal, 0 browser errors. These confirm the draft rendering and texture selection; they are not replacements for the M1 study timings.
GPU build 1cd6b2c5. The later farm commit changes only its Node test fixture; app rendering and assets are identical.
Forest GPU verification: Phone Home · Phone board · Phone board · low. Apple M3 Pro/ANGLE Metal, 0 browser errors. These confirm the draft rendering and texture selection; they are not replacements for the M1 study timings.
Texture values estimate RGBA8 plus mip allocation from actual loaded dimensions. Reduced detail omits the atlas sampler on a cold renderer. The full GLB still downloads, CPU image decode can persist, and a previously shared high-tier upload lives until its cache lease releases. Draft cost register.
Measured study cost
The gallery and M1 timing rows below are the original 1024-atlas study at 4199e62f. Final draft bytes and low-tier memory are above.
Each stacked number reads Today, then After. GPU and CPU columns show median / p95 in milliseconds. Today uses the published audit. Whole-scene counters include real game-state differences; the field's geometry and draw count are unchanged.
| Field and viewport | Submitted triangles Today / After | Draw calls Today → After | GPU ms Today / After | CPU ms Today / After |
|---|---|---|---|---|
| Forest · Board 1440 × 900 | 2,143,577 2,144,115 | 40 → 42 | 3.46 / 4.34 4.46 / 5.10 | 1.80 / 2.70 2.20 / 3.20 |
| Forest · Board 1920 × 1080 | 2,143,577 2,143,645 | 40 → 42 | 3.55 / 4.20 3.96 / 4.79 | 1.70 / 2.60 2.40 / 3.50 |
| Forest · Phone board | 2,143,577 2,143,577 | 40 → 40 | 3.93 / 4.47 4.46 / 5.33 | 1.90 / 2.70 1.70 / 2.60 |
| Forest · Phone board · low | 2,143,577 2,146,985 | 40 → 47 | 3.33 / 3.63 3.35 / 3.54 | 2.60 / 3.80 3.50 / 4.80 |
| Farm · Board 1440 × 900 | 693,140 692,900 | 43 → 40 | 2.22 / 2.37 2.76 / 2.99 | 2.80 / 3.70 2.50 / 3.30 |
| Farm · Board 1920 × 1080 | 691,456 691,840 | 39 → 40 | 2.23 / 3.20 2.85 / 2.99 | 2.40 / 3.00 2.50 / 3.00 |
| Farm · Phone board | 691,476 691,476 | 38 → 38 | 2.21 / 2.35 2.39 / 2.50 | 1.90 / 2.60 2.00 / 2.80 |
| Farm · Phone board · low | 480,246 478,824 | 41 → 38 | 1.01 / 1.04 1.07 / 1.27 | 5.90 / 7.40 3.90 / 5.20 |
Bars use the full 16.67 ms allowance for 60 fps. GPU time alone does not establish frame rate. The 30 fps allowance is 33.33 ms.
| Field | Field GLB download | Field texture estimate phone high | Added rendering |
|---|---|---|---|
| Forest | 13,959,800 → 14,906,308 +946,508 bytes | High 57.42 → 62.75 MiB Low 57.42 → 62.75 MiB +5.33 MiB on both | 0 field triangles 0 field draws |
| Farm | 2,365,516 → 2,684,468 +318,952 bytes | High 42.77 → 48.11 MiB Low 10.69 → 16.03 MiB +5.33 MiB on both | 0 field triangles 0 field draws |
Farm also uses its unchanged 497,643-byte ground and pollen map payload. Texture figures estimate RGBA8 allocation plus generated mip chains from loaded texture dimensions, not driver-resident memory. Each study atlas is 1024 × 1024, adding 5,592,404 bytes. Both tiers download the same GLB.
The original study farm GLB was 2,684,468 bytes, over the 2,500,000-byte guard. The farm draft uses tighter colour encoding and a 512 atlas, reaches 2,496,116 bytes, and skips atlas binding on low. The guard is unchanged. No budget or quality guard was weakened.
Method and evidence
The audit's Chromium/ANGLE Metal harness runs the real exported app. All board timing and cost samples use the Mac mini M1. Home stills use the MacBook M3 Pro's Metal GPU to avoid the render queue; Home has no timing claim. Every board waits for a settled auction turn, no camera effect, then keeps the existing scheduler awake for five seconds. CPU measures rendered requestAnimationFrame callback work over four seconds. GPU uses 24 timed static re-renders, excludes the first four and rejects disjoint samples. UI and gameplay remain intact. These are short samples on a shared M1, not measurements from a phone GPU.
Raw cost register · Asset stream proof · Original audit and official reference sources
Every non-colour compressed stream is byte-identical to main. Shapes, normals, positions, instances, layout and board keep-outs are unchanged. The atlas is projected from our field meshes along key direction 2.4, 4.2, 3.0. Contact uses nearby low geometry. The farm's distant procedural hills are excluded. AO uses eight deterministic local hemisphere rays with 0.48 m forest and 0.24 m farm reach. No reference pixels are sampled or shipped.
Build scope
Two sub-lanes: forest light, colour and AO; farm light, colour and AO. Production work touches only each field's private material helper, field setup and field GLB/bake path, plus the farm Node fixture required for its new embedded texture. Existing ground maps, foliage geometry, sky, fog, wind, shared cast light, board, actors, cards and UI remain outside this lane.
Scratch branch lookdev/fields-light · HEAD 4199e62fc14769793975d936cf5d8dc97a0ddc5a. Draft PRs remain unready and unstamped until Kyle's stills sign-off and coordinator review.




















