Skip to content
Skillv1.0.0

threejs-postprocessing

Build and optimize Three.js post-processing with EffectComposer, RenderPass, bloom, anti-aliasing, SSAO, depth of field, outlines, color correction, custom ShaderPasses, render targets, resize handlin

by akillness(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from akillness/jeo-skills (.agent-skills/threejs-postprocessing/SKILL.md). Install upstream with npx skills add akillness/jeo-skills --skill threejs-postprocessing. Copyright stays with the author (MIT).

Three.js Post-Processing

Use this skill for an intentional screen-space pipeline. Route scene/camera setup to threejs-fundamentals, mesh/material shader work to threejs-shaders, and texture/render target semantics to threejs-textures.

When to use this skill

  • Add bloom, anti-aliasing, ambient occlusion, depth of field, outlines, or color grading
  • Configure EffectComposer and resolve pass ordering or double-rendering bugs
  • Write a custom full-screen ShaderPass or manage offscreen render targets
  • Fix blur, incorrect resolution, missing effects, overly expensive passes, or teardown leaks

Instructions

Step 1: Establish the baseline renderer first

  1. Make the unprocessed renderer.render(scene, camera) view correct before adding passes.
  2. Decide whether the effect is a material/scene concern or genuinely screen-space. Do not use a full-screen pass to compensate for a wrong light, texture color space, or material.
  3. Keep composer ownership with the canvas/render-loop owner; use either renderer render or composer render per frame, not both for the same final output.

Step 2: Build a minimal ordered composer

import { EffectComposer } from "three/addons/postprocessing/EffectComposer.js";
import { RenderPass } from "three/addons/postprocessing/RenderPass.js";
import { UnrealBloomPass } from "three/addons/postprocessing/UnrealBloomPass.js";

const composer = new EffectComposer(renderer);
composer.addPass(new RenderPass(scene, camera));
composer.addPass(new UnrealBloomPass(new THREE.Vector2(width, height), 0.6, 0.4, 0.85));

function render() {
  composer.render();
  requestAnimationFrame(render);
}
render();

Pass order is behavior. Document why each pass precedes/follows the next, especially when mixing depth-dependent, selection, antialiasing, or color-correction passes.

Step 3: Handle resolution and color deliberately

function resize(width, height) {
  camera.aspect = width / height;
  camera.updateProjectionMatrix();
  renderer.setSize(width, height, false);
  composer.setSize(width, height);
}

Match composer resolution to the renderer's configured drawing-buffer strategy. Effects that sample pixel offsets or depth must receive current size uniforms. Avoid applying legacy gamma/color correction passes without checking the renderer's current color-output configuration.

Step 4: Treat each pass as a budgeted feature

Need First choice
Normal scene output RenderPass only
Bright emissive glow Bloom after measuring at target resolution
Alias smoothing Built-in MSAA where available, then an appropriate AA pass
Object outline Outline pass or focused custom pass
Custom screen-space math ShaderPass with explicit uniforms
Strong DOF/SSAO/glitch Optional quality tier with fallback/off switch

Use lower-resolution buffers, quality tiers, or selective effects only after validating the visual contract. Do not stack passes as a substitute for art direction.

Step 5: Verify effects and cleanup

  • Test resize, pixel ratio, dynamic camera movement, and route changes/unmounts.
  • Test low- and high-quality settings on target hardware and record frame-time impact.
  • Check pass order with each effect toggled independently.
  • Dispose composer-owned render targets/passes according to the installed API and feature lifecycle; do not leave offscreen GPU buffers after the scene is gone.

Examples

Selective bloom

Keep selection/layer rendering explicit and verify the normal scene does not become darker or duplicate objects. Selective bloom is a multi-render pipeline, not a bloom threshold flag alone.

Custom vignette

Use a ShaderPass only after confirming a CSS/canvas overlay cannot meet the requirement. Declare time, resolution, and texture uniforms explicitly and update them through one owner.

Best practices

  1. Start from the plain render path and add one pass at a time.
  2. Keep composer and renderer dimensions in sync on every resize.
  3. Treat pass order and color pipeline as part of the feature contract.
  4. Gate expensive effects behind device-appropriate quality controls.
  5. Measure GPU frame time before shipping a visual stack.

References

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/akillness-jeo-skills-threejs-postprocessing/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

akillness-jeo-skills-threejs-postprocessing.ocm.jsonjson
{
  "ocm": "1",
  "id": "akillness-jeo-skills-threejs-postprocessing",
  "kind": "skill",
  "name": "threejs-postprocessing",
  "description": "Build and optimize Three.js post-processing with EffectComposer, RenderPass, bloom, anti-aliasing, SSAO, depth of field, outlines, color correction, custom ShaderPasses, render targets, resize handling, and frame-budget controls. Use when adding or fixing screen-space effects, composer pass order, render target sizing, or visual-effect cost. Triggers on: Three.js postprocessing, EffectComposer, RenderPass, UnrealBloomPass, FXAA, SMAA, SSAO, depth of field, bloom, ShaderPass, render target, screen-space effect.",
  "publisher": "akillness",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "finance"
    ],
    "tags": [
      "skill-md",
      "three-js",
      "postprocessing",
      "effectcomposer",
      "bloom",
      "antialiasing",
      "render-target",
      "webgl",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Build and optimize Three.js post-processing with EffectComposer, RenderPass, bloom, anti-aliasing, SSAO, depth of field, outlines, color correction, custom ShaderPasses, render targets, resize handling, and frame-budget controls. Use when adding or fixing screen-space effects, composer pass order, render target sizing, or visual-effect cost. Triggers on: Three.js postprocessing, EffectComposer, RenderPass, UnrealBloomPass, FXAA, SMAA, SSAO, depth of field, bloom, ShaderPass, render target, screen-space effect."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/akillness/jeo-skills",
      "path": ".agent-skills/threejs-postprocessing/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/akillness/jeo-skills/blob/HEAD/.agent-skills/threejs-postprocessing/SKILL.md",
      "key": "akillness/jeo-skills/.agent-skills/threejs-postprocessing/SKILL.md"
    },
    "allowed_tools": [
      "Bash",
      "Read",
      "Write",
      "Edit",
      "Glob",
      "Grep"
    ],
    "license": "MIT"
  },
  "instructions": "# Three.js Post-Processing\n\nUse this skill for an intentional screen-space pipeline. Route scene/camera setup to\n`threejs-fundamentals`, mesh/material shader work to `threejs-shaders`, and texture/render\ntarget semantics to `threejs-textures`.\n\n## When to use this skill\n\n- Add bloom, anti-aliasing, ambient occlusion, depth of field, outlines, or color grading\n- Configure `EffectComposer` and resolve pass ordering or double-rendering bugs\n- Write a custom full-screen `ShaderPass` or manage offscreen render targets\n- Fix blur, incorrect resolution, missing effects, overly expensive passes, or te",
  "cost": {
    "context_tokens": 1141
  }
}

Fetch it by URL: GET /api/v1/registry/akillness-jeo-skills-threejs-postprocessing/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.