threejs-screen-space-ambient-occlusion
About threejs-screen-space-ambient-occlusion
A Three.js skill for screen-space ambient occlusion that estimates ambient visibility and applies it to indirect lighting. It covers GTAO gathering, bent normals, denoising, and AO application.
Key features
- 01Linear-depth and view-normal validation
- 02View-position reconstruction
- 03Horizon-visibility sampling
- 04Depth- and normal-aware denoising
- 05AO application to indirect lighting
Use cases
- 01Implementing GTAO in a Three.js scene
- 02Denoising screen-space AO
- 03Preserving direct light and emission
- 04Coordinating AO with image-space passes
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ scottstts/ threejs-awesome-graphics-agent-skills --skill threejs-screen-space-ambient-occlusionAfter installing, type/threejs-screen-space-ambient-occlusionin Claude Code to confirm it loaded.
Bundled filesagents/openai.yamlreferences/gtao-bent-normal-pipeline.md
Details
From the project READMEScreen-Space Ambient Occlusion
AO estimates missing ambient visibility. It must modulate indirect lighting, not repaint all scene color with a dark multiply.
Workflow
- Verify linear depth and view-space normals.
- Reconstruct view position consistently.
- Sample horizon visibility in a controlled radius.
- Estimate AO and optional bent normal.
- Denoise with depth/normal-aware filters.
- Apply to indirect diffuse and environment response.
Read references/gtao-bent-normal-pipeline.md.
Failure conditions
- direct light and emission are darkened;
- radius is specified only in pixels;
- foreground silhouettes cast thick screen-space halos;
- depth discontinuities are blurred together;
- AO remains strong at distances where its world radius is subpixel;
- bent normals are treated as ordinary geometric normals;
- the implementation claims temporal accumulation even though this path has none.
Routing boundary
This skill owns GTAO gathering, bent normals, denoising, and AO application.
Use $threejs-image-pipeline only when its depth/normal buffers or pass order
must be coordinated with other image-space systems.