Real watercolor spreads because pigment particles are suspended in a thin, fast-evaporating film of water that itself flows across the paper's fiber structure. This simulator runs a simplified version of the shallow-water wet-media model (Curtis et al., "Computer-Generated Watercolor", 1997) on a coarse grid beneath your brush:
Water height h: ∂h/∂t = −∇·(h·u) − E(h) (mass conservation + evaporation E)
Velocity u: u ← u + g·∇h·dt then diffuse (pressure-driven shallow flow)
Pigment g_k: ∂g_k/∂t = −∇·(g_k·u) + D∇²g_k (advected by the water, spreads by diffusion D)
Deposit d_k: d_k += g_k·ρ_k·dt while h > h_min (pigment binds to paper as water leaves)
- Wetness sets how much water height h your brush deposits — more water carries pigment farther before it dries, producing soft, spreading edges.
- Pigment concentration sets the initial g_k (dye mass per unit water) laid down by each stroke.
- Evaporation rate controls E(h): faster drying locks pigment in place sooner (crisp strokes); slower drying lets blooms and backruns form as wet fronts push older pigment into rings.
- Wet whole paper pre-wets every cell so the next stroke blooms outward immediately — the classic "wet-on-wet" watercolor technique.
- Different pigments diffuse and settle at different rates here, echoing how real granulating pigments (e.g. ultramarine) separate from staining dyes (e.g. phthalo) when mixed wet-on-wet.
Every stroke's water and pigment fields keep evolving after you lift the brush, exactly like real paper does until it dries — pause diffusion any time to freeze the current state and study it.