Take an already-working three.js / React Three Fiber scene and art-direct it to a premium, cinematic result. This skill owns the aesthetic layer: postprocessing, physically-based lighting, shadows, materials, tone mapping, and camera choreography.
Boundary (read first)
This skill is the second half of a 3D scene — the look-dev pass after it renders correctly. It does not own setup or correctness:
- Canvas/createRoot lifecycle, loaders, GLTF, disposal, SSR/client boundaries,
DPR, "blank canvas" and resize bugs →
web-three-r3f. - Native (Expo / React Native) motion →
expo-motion. - Cross-stack motion-system direction / tokens / repo-wide upgrades →
design-motion-audit.
If the scene doesn't render yet, start in web-three-r3f, then return here.
Before implementing
- Read
references/art-direction.md— the current-API (2026) look-dev recipes: the@react-three/postprocessingquality ladder,dreiEnvironment/ContactShadows/AccumulativeShadows/MeshTransmissionMaterial, tone mapping (AgX vs ACES), selective bloom, and the WebGPU/TSL caveat. Verify every API against the repo's installed versions before editing — the reference pins the versions it was written against. - Read
references/motion-vocabulary.mdfor named camera/lighting decisions. - Read
references/performance-accessibility.mdbefore final QA.
Look-dev rules
- Light for form. HDRI (
Environment) for image-based lighting; add key/fill/rim intentionally; ground the subject withContactShadowsorAccumulativeShadows(or float it deliberately). - Tone-map deliberately. three-core defaults to
NoToneMapping; the R3F<Canvas>defaults toACESFilmicToneMapping. PreferAgX/Neutralfor accurate highlight rolloff; don't double-tonemap (renderer or the postprocessingToneMappingeffect, not both). - Build a postprocessing quality ladder, not a pile-up: order effects intentionally, gate expensive ones (N8AO, DoF) behind a device/DPR quality tier, and give reduced-motion / low-power a lighter branch.
- Prefer PBR material values, HDRI, and physically-plausible lighting over
fake tricks; use
MeshTransmissionMaterialfor glass, sharing one FBO for many transmissive objects. - Choreograph the camera with intent (dolly/truck/orbit + easing), not large spins for basic feedback; keep text legible through the motion.
- Animate hot paths cheaply (refs + delta-time in
useFrame); this skill assumesweb-three-r3f's correctness rules (nosetStatein the frame loop, reuse math objects, dispose) — see that skill, don't re-derive them here. - Always add a reduced-motion / low-power alternative for camera travel, parallax, heavy postprocessing, and idle loops.
Return complete code changes or a complete look-dev plan, depending on the request.
Optional power tool: art-direction audit
This skill ships scripts/audit.mjs, a static auditor for R3F/three.js
art-direction quality — tone mapping (double-tonemap, legacy API), color
management (deprecated outputEncoding/sRGBEncoding), lighting (unlit scenes),
postprocessing quality (missing quality ladder, legacy SSAO, WebGPU mismatch), and
material color-space. This is the visual layer web-three-r3f's lifecycle audit does
not cover; run both. Optional — findings are leads.
node scripts/audit.mjs doctor # list every rule
node scripts/audit.mjs scan --root . --format json
Verify each finding against the repo's installed package versions before changing behavior.