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
skill and adapt the closest official example with
:
For an outdoor scene with water, stop before authoring the scene and read both
and
. Use
graphics/water.example.mjs
as the initial composition recipe: it already
joins the production
script, sky, sun,
, 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
when the brief asks for reflective water.
Do not continue to cosmetic tuning while either integration is missing or diagnostics report a
shader, texture, or framebuffer error.
Tune against pixels, not numbers. Capture the intended framing with an image-returning browser
screenshot tool and inspect the returned image, as
and the local agent guide
require; a saved filepath is not evidence. Confirm the subject is exposed and readable, shadows are
present but not crushed, and the grade is restrained, from the real gameplay camera at the target
resolution. Confirm the post-process camera keeps rendering as it orbits and pitches.
Choose the authoring surface with the
skill and set lights, camera, and scene settings
through its own primitives before reaching into the Engine.