scottstts/threejs-precipitation-surfaces
Build coupled precipitation and affected surfaces in Three.js. Use for falling snow, snow accumulation, model snow caps, wet asphalt puddles, procedural ripple normals, splash flipbooks, rain streaks, shared weather envelopes, and surface wetness or coverage transitions.
npx skills add https://github.com/scottstts/Threejs-Awesome-Graphics-Agent-Skills --skill threejs-precipitation-surfaces
Treat weather as a coupled event, particle, and surface-response system. Do not
add rain or snow particles that are visually disconnected from the ground.
weather envelope
-> falling precipitation volume
-> world/object surface mask
-> displaced or optical surface response
-> impact residue and splashes
-> shared lighting/post presentation
Read references/precipitation-surface-systems.md
for snow accumulation, object capping, wrapped precipitation volumes, wet
puddle masks, procedural ripple normals, splash placement, debug outputs, and
licensing boundaries.
Read the
snow accumulation implementation
for camera-wrapped snowfall, shared wind/time uniforms, world-space snow masks,
single-source snow height and normals, model snow capping, and optional ice
surface composition.
Read the
wet puddle rain implementation
for rain-progress wetness, asphalt puddle masks, procedural ripple normals,
instanced rain streaks, upward-surface splash sampling, and flipbook splashes.
This example includes GPL-licensed source material;
preserve its license boundary when copying or publishing it.
Use $threejs-water-optics for bounded pool simulation, caustics, Fresnel,
refraction, and Beer-Lambert water volumes. Use $threejs-procedural-vfx for
general sparks, plasma, trails, and non-weather particles. Use
$threejs-temporal-surfaces for screen-space touch history or frost clearing.
This skill owns precipitation events and the surfaces they visibly alter.
Take scottstts/threejs-precipitation-surfaces 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.