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

Explicit integration diverges once the per-vertex diffusion gain passes one half. Past that, values oscillate between extremes every step. Since the result is clipped to a valid range for display, divergence does not look like an error — it looks like a fine checkerboard, which is easy to mistake for a legitimate high-frequency 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.