light-scene
Cinematic rendering
A polished frame is lit and graded, not just populated. Treat lighting, sky, shadows, tone mapping, and post as one pass over the assembled scene, and tune every value against a real screenshot rather than from memory.
Prefer shipped building blocks over hand-written shaders and passes. Discover them with the
reuse-scripts skill and adapt the closest official example with find-examples:
- the core
CameraFramehelper for tone mapping, ambient occlusion, bloom, vignette, and grade; - a procedural sky and image-based light for ambient colour and reflections;
- a shadow catcher for grounding subjects that have no lit floor.
For an outdoor scene with water, stop before authoring the scene and read both reuse-scripts and
find-examples. Use graphics/water.example.mjs as the initial composition recipe: it already
joins the production Water script, sky, sun, CameraFrame, water layer, scene depth, and
reflection pipeline. Get that complete frame rendering before replacing its assets or tuning its
look. A custom normal-mapped material, tessellated plane, or reflection-coloured mesh is not the
baseline and does not substitute for Water when the brief asks for reflective water.