.claude/skills/r3f-postprocessing/SKILL.md
React Three Fiber post-processing - EffectComposer, bloom, depth of field, custom effects. Use when adding visual effects or enhancing rendered output.
npx skillsauth add tadams95/kardashev-network r3f-postprocessingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
import { EffectComposer, Bloom, Vignette } from '@react-three/postprocessing'
function Scene() {
return (
<Canvas>
<mesh>...</mesh>
<EffectComposer>
<Bloom luminanceThreshold={0.5} intensity={1.5} />
<Vignette offset={0.3} darkness={0.5} />
</EffectComposer>
</Canvas>
)
}
import {
Bloom,
DepthOfField,
Noise,
Vignette,
ChromaticAberration,
SMAA,
} from '@react-three/postprocessing'
<EffectComposer>
{/* Bloom/Glow */}
<Bloom
luminanceThreshold={0.5}
luminanceSmoothing={0.9}
intensity={1.5}
mipmapBlur
/>
{/* Depth of Field */}
<DepthOfField
focusDistance={0.01}
focalLength={0.02}
bokehScale={2}
/>
{/* Film grain */}
<Noise opacity={0.1} />
{/* Vignette */}
<Vignette offset={0.3} darkness={0.5} />
{/* Chromatic aberration */}
<ChromaticAberration offset={[0.002, 0.002]} />
{/* Anti-aliasing */}
<SMAA />
</EffectComposer>
import { Selection, Select, EffectComposer, Bloom } from '@react-three/postprocessing'
function Scene() {
return (
<Selection>
<EffectComposer>
<Bloom intensity={1} luminanceThreshold={0} mipmapBlur />
</EffectComposer>
{/* Only selected objects bloom */}
<Select enabled>
<mesh>
<boxGeometry />
<meshStandardMaterial emissive="red" emissiveIntensity={2} toneMapped={false} />
</mesh>
</Select>
{/* Not selected, no bloom */}
<mesh position={[2, 0, 0]}>
<boxGeometry />
<meshStandardMaterial color="blue" />
</mesh>
</Selection>
)
}
import { Selection, Select, EffectComposer, Outline } from '@react-three/postprocessing'
<Selection>
<EffectComposer>
<Outline
blur
visibleEdgeColor={0xffffff}
edgeStrength={100}
width={1000}
/>
</EffectComposer>
<Select enabled={hovered}>
<mesh>...</mesh>
</Select>
</Selection>
import { N8AO } from '@react-three/postprocessing'
<EffectComposer>
<N8AO
aoRadius={0.5}
intensity={1}
distanceFalloff={1}
quality="high"
/>
</EffectComposer>
import { GodRays } from '@react-three/postprocessing'
function Scene() {
const sunRef = useRef()
return (
<>
<mesh ref={sunRef} position={[0, 10, -20]}>
<sphereGeometry args={[2]} />
<meshBasicMaterial color="white" />
</mesh>
<EffectComposer>
<GodRays sun={sunRef} density={0.96} decay={0.92} weight={0.3} />
</EffectComposer>
</>
)
}
import { Effect } from 'postprocessing'
import { forwardRef, useMemo } from 'react'
const fragmentShader = `
uniform float time;
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
vec2 offset = vec2(sin(uv.y * 50.0 + time) * 0.005, 0.0);
outputColor = texture2D(inputBuffer, uv + offset);
}
`
class WaveEffectImpl extends Effect {
constructor() {
super('WaveEffect', fragmentShader, { uniforms: new Map([['time', { value: 0 }]]) })
}
}
const WaveEffect = forwardRef((props, ref) => {
const effect = useMemo(() => new WaveEffectImpl(), [])
return <primitive ref={ref} object={effect} />
})
// Usage
<EffectComposer>
<WaveEffect />
</EffectComposer>
development
Web3 integration with wagmi and viem - wallet connection, contract interactions, transactions, RainbowKit. Use when implementing wallet features, reading/writing contracts, or handling blockchain transactions.
content-media
Three.js textures - loading, configuration, UV mapping, environment maps. Use when loading images, configuring texture properties, or working with HDR environments.
data-ai
Three.js shaders - GLSL, ShaderMaterial, uniforms, custom effects. Use when creating custom visual effects, modifying vertices, writing fragment shaders, or extending built-in materials.
testing
Three.js post-processing - EffectComposer, bloom, depth of field, custom passes. Use when adding visual effects, screen-space effects, or enhancing rendered output.