MUJŌ: WebGPU Watercolor Engine
A physics-based Japanese calligraphy and watercolor simulation running entirely in WebGPU compute shaders. Kubelka-Munk pigment mixing, Navier-Stokes fluid dynamics, and 48-bristle brush physics — all on the GPU.
5 pigments · 3 brushes · 3 papers · 60fps GPU

永 character — the calligraphy benchmark. Every stroke tests a different brush dynamic.




MUJŌ (無常) started as a question: can you make a digital brush that feels like real sumi ink on handmade washi paper? Not "looks like" in a screenshot — feels like under your hand.
The answer required going deep.
The physics stack
Every simulation pass is a custom WGSL compute shader — no Three.js, no React, no physics libraries.
| Layer | What it does | Method |
|---|---|---|
| Ink flow | Fluid spreading across paper | Navier-Stokes + Jacobi pressure solver |
| Pigment mixing | Physically correct color blending | 2-flux Kubelka-Munk spectral radiative transfer |
| Paper absorption | Ink soaking into virtual fibers | Darcy tensor porous flow |
| Brush dynamics | 48 elastic guide bristles | Position-Based Dynamics |
| Evaporation | Coffee-ring edge darkening | Pinning model with radial deposition |
Why build this
The Japanese ink painting tradition is built on impermanence — that's what 無常 means. Each stroke is unrepeatable. The ink reacts to your speed, pressure, and water ratio in ways you can't fully control. Most digital painting tools fake this with procedural textures. MUJŌ simulates the actual physics so the ink behaves — it doesn't just look right, it moves right.
What's in the engine
- Five Nihonga mineral pigments: Sumi carbon black, Gofun oyster white, Ai indigo, Shu vermillion, Roku green. Each has measured Kubelka-Munk absorption and scattering coefficients.
- Three Japanese brush types: Fude (calligraphy), Menso (detail), Hake (wash). Different bristle counts, stiffness curves, and ink loading capacities.
- Three washi paper surfaces: Hosho (smooth), Gasenshi (absorbent), Torinoko (sized). Different fiber densities and absorption rates.
- Procedural sound engine: Brush-on-paper audio responds to pressure and speed.