Advanced mode
Reaction-diffusion
Two chemicals, one that feeds and one that consumes, diffusing across a surface at different rates. Alan Turing proposed it in 1952 as an explanation for animal markings, and it remains the best one we have.
On the surface, not on a texture
This is the distinction that matters. A reaction-diffusion texture is computed on a flat grid and then wrapped onto a model, which means it stretches where the UVs stretch and breaks at every seam.
Rhea solves it on the mesh itself, using the cotangent Laplacian — the same discrete operator behind the curvature field. Diffusion follows the actual surface, so the pattern has no seams, does not stretch, and responds to the geometry it lives on. Spots crowd where faces are dense; stripes follow the form.
The six presets
Gray-Scott is governed by two numbers, feed and kill, and the space of interesting results is a thin ribbon through that parameter plane. A few thousandths in the wrong direction and you get a blank surface or a uniform wash. The presets are points on that ribbon:
- Coral
- Branching, growing structures that keep extending into empty space. The most organic of the six and the one most people want.
- Spots
- Isolated round dots that settle into an even distribution. Leopard, ladybird, poison-dart frog.
- Stripes
- Parallel banding. Follows the surface flow, so on an elongated form the stripes run along it without being told to.
- Maze
- Winding labyrinth corridors that never quite close. The brain-coral pattern, and the most immediately recognisable.
- Mitosis
- Blobs that grow, elongate and split in two. Genuinely dynamic — the result depends heavily on how long you run it.
- Worms
- Long meandering forms with rounded ends. Between spots and stripes, and less stable than either.
Custom uses the feed and kill rates as set, so the presets are a starting point rather than a fence.
The parameters
- Feed0 – 0.2
- Rate at which chemical A is replenished. Higher generally means more pattern and more coverage.
- Kill0 – 0.2
- Rate at which chemical B is removed. Higher means less pattern. Feed and kill only make sense together — moving one without the other usually falls off the ribbon entirely.
- Diffusion A0 – 1
- How fast A spreads. Conventionally about twice B, and the ratio between them is what sets the scale of the pattern.
- Diffusion B0 – 1
- How fast B spreads.
- Time step0.01 – 2
- Integration step size. Lower is more stable and slower. See the note below — this is the control that quietly ruins results.
- Iterations per step
- Simulation sub-steps between progress updates. Higher means fewer viewport refreshes and a faster overall run.
- Steps
- How many progress steps to run. Patterns need time: a hundred steps at ten iterations each is a thousand iterations, which is roughly where most presets start to look like themselves.
Stability, and the checkerboard that is not a pattern
Rhea bounds the step against the mesh's own vertex areas so this cannot happen silently. If a result looks like static rather than a pattern, lower the time step.
Seeding
The simulation needs somewhere to start. A uniform surface stays uniform forever.
- Random
- Scatters seed patches across the surface. Coverage sets what share of vertices are seeded — five percent is plenty, and more does not produce more pattern, only a faster start.
- Vertex group
- Seeds only where a group has weight. This is how you art-direct it: the pattern grows outward from where you painted, so you decide where the coral starts.
- Selection
- Seeds from the current vertex selection. The fastest route to a specific answer.
Seed makes random placement reproducible. Change it for a different but equally valid pattern; it costs nothing to try several.
Output
The finished pattern is written to a colour attribute, a named float attribute, a vertex group, or several at once. Which you want depends on what reads it next:
colour attribute → visible in the viewport, readable by shaders float attribute → read by every Rhea engine vertex group → read by native Blender modifiers
Feeding it into everything else
A reaction-diffusion field is just a field, which means every consumer in Rhea accepts it. This is where it stops being a pretty picture and starts being a design tool:
- Drive tessellation thickness. Scales grow tall along the coral branches and stay flat between them. This is the single most effective combination in the whole toolkit.
- Drive cell thickness. A honeycomb shell whose struts thicken along a maze pattern reads as bone that grew under load.
- Drive displacement. The Brain coral effect is exactly this — the maze preset raised into relief.
- Drive adaptive subdivision. Mesh density that follows the pattern, so detail lands only where the pattern is.
- Drive Voronoi seed density. Cells crowd along the branches, giving a two-scale structure.
Two passes
Run spots first, write to one attribute. Run stripes second with a different seed, write to another. Combine them in a formula field with min(spots, stripes) or a mix. Layered biological patterning is how real animal markings work, and it does not come from a single run.
Running time
Cost is vertices times iterations, and both need to be reasonably high for the pattern to develop. A hundred thousand vertices at a thousand iterations is a real wait. Practical advice:
- Develop on a low-resolution version of your mesh. The pattern scale relative to the surface stays roughly the same, so what you tune transfers.
- Raise iterations per step so the viewport refreshes less often. Most of the visible cost on a big mesh is redraw, not simulation.
- The run is modal and cancellable. Watch it, and stop it when it looks right rather than when the counter runs out — mitosis in particular has no final state worth waiting for.