Skip to content
Andrew Voirol
Monday, August 17, 2026mujo-watercolor

48 elastic bristle rods on the GPU

WebGPUMUJŌShadersAnimation

Replaced the simple swept-capsule brush with 48 Position-Based Dynamics elastic guide rods running entirely in WGSL compute shaders. Each bristle has distance constraints, bending rigidity, Coulomb friction against the paper surface, and capillary clumping when wet. The brush fans out under pressure, pinches on turnarounds, and flicks on lift-off with real inertia. Three brush types: Maru-fude (round calligraphy), Menso (fine liner), and Hake (broad wash). The difference is visceral — strokes went from "digital stamp" to "I can feel the paper" in one refactor. Also added a procedural Web Audio soundscape: bamboo water drops, singing bowls, and paper friction acoustics that respond to brush pressure.

← Previous

Modeling botanical fiber topologies for Japanese washi

Next →

Fixing stair-stepped brush strokes with timestamp kinematics


Andrew Voirol

Builder, hacker, shipper. Currently leaving localhost.

Navigate

WorkThreadsBuilder's LogAboutContactRSS Feed

Connect

X / TwitterGitHubLinkedIn

© 2026 Andrew Voirol·Back to top ↑
✦Just one prompt away from figuring it all out.