I warm the world's programs with renderer.compileAsync() at the end of the
async build, with the composer's scene target bound so tone mapping and
output colour space key the same programs the composer draws with, and with
hidden subtrees revealed so the light count matches the frame-0 warm render.
The wait is capped at 2.5 s; the warm render stays as the safety net for the
post passes, texture uploads and anything a slow or extension-less driver
left. Test builds report renderer.info.programs, and a browser spec pins zero
program growth after frame 0.
On the Intel ARL laptop the frame-0 task drops from ~1.74 s to ~0.34 s with a
pixel-identical first frame; measurements in
docs/overnight/compile-async-results.md.
Dispose scene resources before renderer allocation records are cleared and
release the bloom high-pass material. Avoid unused bloom depth buffers and
the final screen pass swap, keeping the same visual output and quality.
Batch sign-stage layout reads before applying existing masks.
Validated approved assets, types, client and SSR builds, prerendered content,
artifacts and transfer budgets. Checked 32 matching transition renders,
66 browser interactions and repeated quality-change resource cleanup.
Integrate the Blender grand tourer with a cohesive shader-driven road, terrain, atmosphere, lighting, and post-processing pass. Refine responsive drive dynamics and sign lifecycle behavior, and add durable visual, accessibility, and performance verification evidence.