Foliage look-dev

One look: leaf depth. Warm lit tops, cooler tucked faces and quieter leaf rims give the existing foliage more depth. A small warm transmission term catches backlit leaves. Grass keeps its density, with green bases and lighter tips. Forest stays woodland; farm stays bright and pastel.

Lane 3 · 4 November 2026 · Scratch stills for design sign-off; draft builds follow · gap audit

The real Home and offline table, with the audit's viewports and camera conditions. Today removes only this lane's shader body and leaf-rim adjustment from the same running scene. Actor poses, wind and clouds can advance between stills. Geometry, layout, lights, ground, AO and grading stay fixed.

Where it changes

Forest · canopy

Lit tops hold warm green. Undersides shift cooler and darker, so the crown reads before its individual leaf scales.

forest canopy today
Today
forest canopy after
After
Official Animal Crossing leaf hierarchy crop
ACNH · © Nintendo · source
Official Hello Kitty planting crop
HKIA · © Sunblink / Sanrio · source

Forest · grass

The existing rosettes and blades keep their placement. Darker green bases and lighter tips improve separation. No density or layout change.

forest grass today
Today
forest grass after
After
Official Animal Crossing leaf hierarchy crop
ACNH · © Nintendo · source
Official Hello Kitty planting crop
HKIA · © Sunblink / Sanrio · source

Farm · canopy

The same foliage 1 shapes keep their pale tops. Lower rim strength quiets the many fine leaf lips; shaded faces retain green.

farm canopy today
Today
farm canopy after
After
Official Animal Crossing leaf hierarchy crop
ACNH · © Nintendo · source
Official Hello Kitty planting crop
HKIA · © Sunblink / Sanrio · source

Farm · grass

The existing tufts gain green bases and warm tips. They still stand over bright painted grass; matching that painting belongs to lane 2.

farm grass today
Today
farm grass after
After
Official Animal Crossing leaf hierarchy crop
ACNH · © Nintendo · source
Official Hello Kitty planting crop
HKIA · © Sunblink / Sanrio · source

Reference crops are copied from the audit. They compare visible leaf hierarchy and selective planting. No tracing, sampled textures, or claims about either game's rendering implementation.

Cost against the audit

The same Apple M1, Chromium and ANGLE Metal renderer as the audit. GPU and CPU columns are median / p95 in milliseconds. Draw columns are triangles / calls for the real settled board.

Field and shotAudit drawsAfter drawsAudit GPUAfter GPUAudit CPUAfter CPU
Forest · Board 1440×9002,143,577 / 402,143,917 / 423.46 / 4.344.24 / 5.081.80 / 2.702.30 / 3.40
Forest · Board 1920×10802,143,577 / 402,143,985 / 433.55 / 4.205.20 / 6.201.70 / 2.601.70 / 3.90
Forest · Phone board2,143,577 / 402,144,807 / 443.93 / 4.474.68 / 5.931.90 / 2.701.90 / 4.00
Forest · Phone board low2,143,577 / 402,143,671 / 443.33 / 3.633.38 / 3.522.60 / 3.804.95 / 6.60
Farm · Board 1440×900693,140 / 43691,388 / 372.22 / 2.372.39 / 2.532.80 / 3.701.70 / 3.20
Farm · Board 1920×1080691,456 / 39691,388 / 372.23 / 3.202.96 / 3.082.40 / 3.001.70 / 2.80
Farm · Phone board691,476 / 38692,470 / 432.21 / 2.352.42 / 2.481.90 / 2.603.10 / 4.20
Farm · Phone board low480,246 / 41480,008 / 411.01 / 1.041.08 / 1.145.90 / 7.403.85 / 5.20

Real offline games can have different settled status props. Their small draw-count differences against the audit are preserved above. The matched control below compares the shaders in the same live game. Timed character emotes can still add or remove a tiny quad between samples; no field geometry or draw is added.

Matched shader cost

Forest · high
4.35 / 4.68 ms
Forest · low
3.27 / 3.38 ms
Farm · high
2.17 / 2.42 ms
Farm · low
1.04 / 1.08 ms

Pale green: Today. Dark green: After. Full track = 16.67 ms, the entire 60 fps frame allowance. 30 fps allows 33.33 ms. These are phone-sized Mac renders, not phone GPU certification.

Field and shotToday GPUAfter GPUGPU deltaToday CPUAfter CPUDraw delta
Forest · Board 1440×9004.43 / 5.084.24 / 5.08-0.19 / +0.012.10 / 2.702.30 / 3.40+0 / +0
Forest · Board 1920×10804.30 / 5.355.20 / 6.20+0.90 / +0.861.60 / 3.801.70 / 3.90+0 / +0
Forest · Phone board4.35 / 5.644.68 / 5.93+0.33 / +0.292.50 / 4.001.90 / 4.00+0 / +0
Forest · Phone board low3.27 / 3.373.38 / 3.52+0.11 / +0.154.85 / 6.304.95 / 6.60+2 / +1
Farm · Board 1440×9002.25 / 2.362.39 / 2.53+0.14 / +0.172.10 / 3.201.70 / 3.20+0 / +0
Farm · Board 1920×10802.71 / 2.922.96 / 3.08+0.25 / +0.161.60 / 2.601.70 / 2.80+0 / +0
Farm · Phone board2.17 / 2.302.42 / 2.48+0.25 / +0.193.00 / 3.803.10 / 4.20+0 / +0
Farm · Phone board low1.04 / 1.311.08 / 1.14+0.04 / -0.173.65 / 4.703.85 / 5.20+0 / +0

Assets and texture memory

Field / tierField GLB bytes, Today → AfterTexture bytes, Today → AfterAdded triangles
Forest · high13,959,800 → 13,959,80060,205,724 → 60,205,7240
Forest · low13,959,800 → 13,959,80060,205,724 → 60,205,7240
Farm · high2,365,516 → 2,365,51644,848,464 → 44,848,4640
Farm · low2,365,516 → 2,365,51611,212,112 → 11,212,1120

Texture memory estimates unique field material textures at RGBA8 plus mip levels, excluding driver padding. This lane adds no textures or vertex attributes. Farm also retains the audit's 497,643 bytes of full-resolution ground and pollen maps. The additional shader code is part of the shared app JavaScript, not a new field download.

Measurement method and evidence

Reuses the audit capture harness. Each shot opens a fresh context. The board waits for a settled auction turn, no moving camera or active effect, then records four seconds of rendered requestAnimationFrame callback work with the existing scheduler held awake. GPU timers wrap 24 static re-renders of that scene and camera, with the first four excluded and disjoint results rejected. CPU and GPU overlap and must not be added.

After is measured first. Today then removes only the foliage shading block and its leaf-rim adjustment, recompiles, warms for 700 ms and repeats. No gameplay state or field geometry is reset. Character poses and timed emote quads can advance between samples. This is a short sample on a shared Mac. Small positive and negative differences are timing noise; they do not establish a speed-up.

Measured data · audit baselines · reference register. Every screenshot has a sibling JSON with counters, texture dimensions, resources and samples. Hardware renderer checks rejected software rendering.

What a build would touch

One foliage shader helper plus its hooks in scene/fields/forest.js and farm.js, and the existing shader cache-key assertion. No GLB rebake, density change, placement change, new texture, renderer pass or shared kit change.

The look renders under today's lights. Lane 1 still owns real overlap AO, root contact and shared colour balance. This orientation-based shading does not replace occlusion. Lane 2 owns the painted turf beneath the tufts. No separate low-tier look is proposed: keep this shading on the existing reduced meshes. Forest low still submits the audit's roughly 2.14 million board triangles. Phone hardware testing is still needed before a build decision.

Decision for Kyle: use this leaf-depth treatment as the direction for both fields?