Agent skill

ta-vfx-postfx

Post-processing effects with React Three Fiber. Use when adding bloom, depth of field, effect composer, visual polish.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/ta-vfx-postfx

SKILL.md

Post-Processing Effects Skill

"The final polish that makes your visuals pop – post-processing transforms good into great."

When to Use This Skill

Use when:

  • Adding visual flair to scenes
  • Creating atmosphere and mood
  • Implementing stylized looks
  • Hiding rendering imperfections

Quick Start

tsx
import { EffectComposer, Bloom, Vignette, Noise } from '@react-three/postprocessing';

function PostProcessing() {
  return (
    <EffectComposer>
      <Bloom intensity={0.5} luminanceThreshold={0.8} />
      <Vignette offset={0.5} darkness={0.5} />
      <Noise opacity={0.05} />
    </EffectComposer>
  );
}

Decision Framework

Effect Use Case Performance
Bloom Glowing effects, bright areas Medium
Vignette Focus attention, cinematic Low
Color grading Mood, style consistency Low
Depth of Field Cinematic focus High
Chromatic Aberration Glitch, distorted look Low
Film Grain Retro feel, texture Low
SMAA Anti-aliasing Medium
SSR Realistic reflections Very High

Effects Reference

Bloom

tsx
import { Bloom } from '@react-three/postprocessing';

<Bloom
  intensity={1.0}        // Bloom strength
  luminanceThreshold={0.9} // Only bright pixels glow
  luminanceSmoothing={0.025} // Smooth threshold
  mipmapBlur             // Higher quality blur
/>

Use for: Emissive materials, magical effects, sci-fi interfaces

Vignette

tsx
import { Vignette } from '@react-three/postprocessing';

<Vignette
  offset={0.5}    // Position of vignette center
  darkness={0.5}  // Darkness at edges
  goDark          // Fade to black instead of opacity
/>

Use for: Cinematic feel, focusing player attention

Depth of Field

tsx
import { DepthOfField } from '@react-three/postprocessing';

<DepthOfField
  focusDistance={0.02}  // Distance to focus plane
  focalLength={0.05}    // Lens focal length
  bokehScale={4}        // Blur amount
  height={480}          // Resolution of DOF pass
/>

Use for: Cutscenes, focusing on important objects

Chromatic Aberration

tsx
import { ChromaticAberration } from '@react-three/postprocessing';

<ChromaticAberration
  offset={0.002}  // RGB channel offset amount
/>

Use for: Glitch effects, distortion, retro look

Color Grading

tsx
import { HalfTone, TiltShift, HueShift } from '@react-three/postprocessing';

// Hue shift for mood
<HueShift hue={0.2} />

// Half-tone for comic/print look
<HalfTone
  blendFunction={BlendFunction.NORMAL}
  radius={1}
  smoothing={0.1}
/>

Noise / Film Grain

tsx
import { Noise } from '@react-three/postprocessing';

<Noise
  opacity={0.05}     // Grain intensity
  premultiply       // Premultiply alpha
/>

Use for: Film look, hiding banding, texture

God Rays (Volumetric Light)

tsx
import { GodRays } from '@react-three/postprocessing';

// First, create a light source
const sun = useRef<THREE.PointLight>(null!);

<GodRays
  sun={sun}
  exposure={0.34}
  decay={0.9}
  density={0.96}
  weight={0.4}
  samples={100}
/>

Effect Chains

tsx
import {
  EffectComposer,
  RenderPass,
  Bloom,
  Vignette,
  Noise,
  ChromaticAberration,
} from '@react-three/postprocessing';

function CinematicLook() {
  return (
    <EffectComposer>
      <RenderPass />
      <Bloom
        intensity={0.3}
        luminanceThreshold={0.8}
        luminanceSmoothing={0.9}
      />
      <ChromaticAberration offset={[0.001, 0.001]} />
      <Noise opacity={0.03} />
      <Vignette offset={0.3} darkness={0.3} />
    </EffectComposer>
  );
}

Performance Tips

tsx
// Disable expensive effects on mobile
const isMobile = /iPhone|iPad|Android/i.test(navigator.userAgent);

function AdaptivePostProcessing() {
  return (
    <EffectComposer>
      <Bloom intensity={isMobile ? 0.2 : 0.5} />
      {!isMobile && <DepthOfField focusDistance={0.02} />}
      <Vignette offset={0.5} darkness={0.5} />
    </EffectComposer>
  );
}

Custom Shaders

tsx
import { Effect } from '@react-three/postprocessing';

const CustomEffect = shaderMaterial(
  { uTime: 0, uIntensity: 0.5 },
  // Vertex shader (pass-through)
  `
    varying vec2 vUv;
    void main() {
      vUv = uv;
      gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
  `,
  // Fragment shader
  `
    uniform float uTime;
    uniform float uIntensity;
    varying vec2 vUv;

    // Simple color shift effect
    void main() {
      vec2 uv = vUv;
      float shift = sin(uTime) * uIntensity;
      vec4 color = texture2D(tDiffuse, uv);
      color.r += shift * 0.1;
      color.b -= shift * 0.1;
      gl_FragColor = color;
    }
  `
);

extend({ CustomEffect });

Anti-Patterns

DON'T:

  • Use all effects at once (looks overprocessed)
  • Enable expensive effects on mobile without testing
  • Use bloom with low threshold (everything glows)
  • Forget that effects render at full resolution

DO:

  • Use effects intentionally for mood/style
  • Adjust effect intensity with gameplay state
  • Test on target hardware
  • Use lower resolution buffers when possible

Checklist

Before adding post-processing:

  • Effect serves clear artistic purpose
  • Intensity tested in different lighting
  • Performance acceptable on target platform
  • Effect doesn't interfere with gameplay visibility
  • Mobile variant considered

Common Looks

Sci-Fi Interface

tsx
<EffectComposer>
  <Bloom intensity={1.5} luminanceThreshold={0.2} />
  <ChromaticAberration offset={0.005} />
  <Noise opacity={0.1} />
</EffectComposer>

Vintage Film

tsx
<EffectComposer>
  <Noise opacity={0.15} premultiply />
  <Vignette offset={0.2} darkness={0.8} />
  <HueShift hue={-0.05} />
</EffectComposer>

Dream Sequence

tsx
<EffectComposer>
  <Bloom intensity={0.8} luminanceThreshold={0.5} />
  <DepthOfField focusDistance={0.01} bokehScale={3} />
  <HueShift hue={0.1} />
</EffectComposer>

Related Skills

For material basics: Skill("ta-r3f-materials") For custom shaders: Skill("ta-shader-sdf")

External References

Didn't find tool you were looking for?

Be as detailed as possible for better results