Hi all, sharing two small three.js modules (plain ES modules, MIT, r160+).
PainterlyPass is a post-processing pass that repaints any scene in impressionist brush strokes. It rebuilds world positions from depth and lays strokes on each surface’s own plane, so strokes stay on the building when the camera moves. It replaces RenderPass; no changes to your meshes.
BakedDebris is explosion debris you can scrub and rewind. Collisions are baked once on the CPU against your own solid(x, y, z) query. Each piece is stored as a few ballistic segments in a float texture, and the vertex shader evaluates any time directly. setTime(t) can jump anywhere, backwards included. It also has bullet-time, secondary blasts, and a meshToPieces helper.
Live demos:
- Voxel Paris (about 5M voxels, 22 bursts): Voxel Paris
- Split Time (one building on two clocks): Split Time
- Paint Pulse (music visualizer): Paint Pulse
- Lightspeed Ram (zero-gravity debris): Lightspeed Ram
npm: painterly-pass, baked-debris
Prior art: Barbara Meier’s “Painterly Rendering for Animation” (SIGGRAPH 1996) put strokes on 3D surfaces, and Sekuta82/oil-on-threejs-template does it per mesh in three.js. PainterlyPass does it as a post-process from the depth buffer.
I built this together with Claude Code (I steered and tested; it wrote most of the code). The repo also has an llms.txt, so you can point your own coding agent at it and ask it to add the effect to your scene.
Would love to hear what you think, and I’m curious what you’d paint or blow up with it!