scottstts/threejs-procedural-vfx
Author production real-time VFX in Three.js. Use for raymarched aurora curtains, finite-footprint emissive slabs, uniform volume integration, equirectangular radiance probes, WebGPU voxel fire and smoke, coupled volumetric fluid fields, mesh-surface emitters, signed-distance fire collisions, ship-conforming reentry plasma, generated capsule wakes, instanced analytic sparks, timed dissolving debris, dense-swap effect pools, additive holographic projections, Fresnel rim shells, scanline banding, glitch displacement, swept shape-to-shape handovers, and explicit scene-relative HDR emission hierarchy.
npx skills add https://github.com/scottstts/Threejs-Awesome-Graphics-Agent-Skills --skill threejs-procedural-vfx
Build effects from an event envelope, motion field, geometry representation, and shading response. Avoid independent particle emitters that happen to share a color.
subject/event state
→ effect-specific geometry, voxel fields, or instance attributes
→ flow-facing masks or analytic age
→ material response
→ pool/lifetime ownership
→ HDR and bloom contribution
Read references/procedural-vfx-system.md
for ship-conforming reentry shells, capsule wakes, dense instanced
spark/debris pools, holographic projection shells, HDR hierarchy, and
implementation limits.
Read references/volumetric-fluid-fire.md
for three-dimensional texture ownership, fixed fluid-compute scheduling,
mesh-surface injection, pressure projection, moving SDF boundaries,
temperature-mapped HDR raymarching, exact presets, and failure diagnostics.
Read references/volumetric-aurora-curtains.md
for finite emissive-slab bounds, warped curtain density, uniform ray steps,
gentle start jitter, matching screen/probe materials, exact constants, limits,
and failure diagnostics.
Read the reentry plasma implementation
for closed layered wake shells, flow-axis deformation, advected filament
fields, opacity shaping, and additive emission diagnostics.
Read the
hologram projection material
for the additive rim shell itself: squared Fresnel incidence with grazing
falloff, footprint-filtered object-space scanlines, height-phased glitch
displacement, and index-gated participation. Read its
shape-transition driver
for the shared sweep range across a shape set, the linear progress ramp inside a
longer dwell, and the complementary-discard handover.
Read the
volumetric fluid fire implementation
for the complete WebGPU/TSL velocity, dye, pressure, vorticity, emitter,
collision, raymarch, and diagnostic system plus its calibrated fire preset.
Read the
raymarched aurora implementation
for the reusable emitting field, perspective-ray material, four-sample
equirectangular radiance material, shared uniforms, and calibrated curtain
preset without sky, terrain, weather, lighting, or renderer setup.
ownership and one fixed compute schedule.
steps, gentle start jitter, and step-length-weighted accumulation. Do not add
extinction or an elevation gate after the footprint already removes the long
limb path.
weather, and grading; expose the same radiance through perspective and
equirectangular materials.
non-cubic volume as though its axes had equal scale.
mean rather than to zero.
discards, never per-shape ranges or overlapping coverage.
Use $threejs-temporal-surfaces only for the screen-space
frost/touch-history pipeline. Use $threejs-precipitation-surfaces for
falling rain or snow, splash flipbooks, and weather events that alter ground
materials. Use $threejs-volumetric-clouds for atmospheric weather layers and
planet-scale cloud volumes. Use $threejs-atmosphere-aerial-perspective for
molecular/aerosol sky scattering and surface-segment aerial perspective. Keep
emissive aurora curtain volumes, bounded interactive fire and smoke,
subject-space plasma, generated wakes, sparks, pooled debris, and additive
projection shells in this skill.
Take scottstts/threejs-procedural-vfx from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.