All articles
Tutorials · 8 min read

Why your scattered vegetation looks fake, and the five rules that fix it

Random scatter is not how nature works. Clustering, attract/avoid species relationships, edge gradients, structured size variation, and terrain logic form five rules that turn procedural placement into a believable ecosystem, with the numbers that make each one work.

Illustration comparing an evenly spaced grid of dots with natural clusters

In short: Pure randomness reads as artificial because real vegetation is the opposite of random: it's the visible outcome of competition for light, water and soil. You don't need to simulate any of that ecology. You need five placement rules that fake its results: cluster, relate species, grade the edges, structure the sizes, and let terrain decide what grows.

Mountain valley: conifers clustering by moisture and slope, meadows between No gardener placed this. Trees clump along water and shelter, thin out on rock and ridge, and the meadow-to-forest edge is a gradient: every rule in this article is visible in one photograph.

The core insight: nature is rules plus noise

Before the five rules, the mental model that makes them click: a real landscape is not random and it is not ordered; it is rule-driven with noise on top. Seeds fall near parents, plants compete for light, water pools in valleys, wind punishes exposed ridges. The result looks organic precisely because simple rules produced it and then randomness roughened the edges. Uniform random placement skips the rules and keeps only the noise, which is why it reads as "computer did this." Everything below is a way to add the rules back cheaply.

Rule 1: Nature clusters

Uniform random placement produces an even sprinkle that exists nowhere on Earth. Real plants clump around whatever seeded them, with genuinely empty gaps between clumps. Push clustering further than feels safe.

Trees stand in groves; flowers bloom in patches; even desert scrub bunches around drainage lines. The empty space between clusters isn't wasted: it's what makes the clusters read, gives sightlines somewhere to breathe, and (bonus) renders cheaper than uniform fill because empty ground costs nothing and clumps cull as units. A practical target: aim for clump sizes of 3–12 instances with gaps of several clump-widths between them, rather than a mathematically even field.

Why "further than feels safe"? Because in the editor, from a top-down view, strong clustering looks too sparse, and your instinct is to fill the gaps. Then you drop to eye level, walk it, and the gaps have become clearings, sightlines, and places for light to pool. Trust the ground-level read over the top-down one; the top-down view is lying to your sense of density.

Rule 2: Species have relationships

Two relationship types cover most of ecology: ATTRACT (mushrooms near trunks, ivy near walls, reeds near water) and AVOID (ground flowers away from dense canopy, saplings away from mature trees). A handful of pairs beats doubling your asset count.

Mushrooms clustered on a mossy log on the forest floor Mushrooms don't scatter randomly across a meadow: they follow deadwood and moisture. One "attract to trunks and logs" rule reproduces this instantly, and viewers read it as truth without knowing why.

The pairs that earn their keep in almost any temperate scene:

  • mushrooms → attract tree trunks and fallen logs (decomposers follow deadwood)
  • grass → avoid dense canopy (it loses the competition for light)
  • ferns → attract shade edges (they want moisture, not darkness)
  • young trees → avoid old trees (the parent shades the seedling out)
  • reeds → attract water lines; meadow flowers → avoid them
  • rocks/boulders → attract slope bases (they roll downhill and gather)

The reason this sells realism so cheaply: viewers don't consciously know the botany, but they've walked through ten thousand real scenes where these correlations held. Violations register as "game-y" without the player being able to articulate why the forest feels wrong. A scatter setup that speaks attract/avoid relations with distance parameters, as Numivo's scatter does, turns the entire list above into five or six rule entries, evaluated automatically as you paint.

Rule 3: Edges are where forests are made

A forest boundary is not a wall of full-grown trees. It's a gradient: grass, then shrubs, then small trees, then canopy, usually over 5–15 meters. Dedicate a transition band wherever two zones meet.

Ecologists call it the ecotone, and it's where the eye spends most of its time, because paths, roads, camps and combat spaces all hug the edges (the deep forest is mostly occluded anyway). A good edge gradient outperforms a good deep-forest mix every single time. The same principle applies at every boundary: meadow/rock, rock/water, water/sand, cultivated/wild. If you do only one "advanced" thing to your vegetation, make it edge bands with their own species mixes: it's the highest-leverage change available.

The failure mode to avoid is the hard edge: a crisp line where dense forest becomes bare meadow. Nothing in nature has that line except a mowed lawn or a bulldozer. Even a fire boundary or a treeline feathers over meters. A hard vegetation edge reads as a level-design boundary, which breaks immersion exactly where players look most.

Rule 4: Size tells a story

Identical scale is an instant giveaway, but naive random scale is barely better. Structure it: larger specimens in sheltered centers, smaller wind-bitten ones at exposed edges, plus small rotation and a few degrees of tilt.

Useful defaults that survive scrutiny:

  • Scale range 0.85–1.25× within a species, biased small at edges and altitude. Uniform ±40 % randomness looks like a toy box because it produces giants next to dwarfs with no logic.
  • Random yaw on everything; broadleaf trees additionally get 2–5° of tilt. Perfectly vertical trees on a slope scream "placed"; real trees on a hillside lean, reach for light, and grow crooked.
  • Sink instances 2–5 cm into the ground. Floating grass at ankle height is the single most common scatter artifact there is, and it's invisible in the editor and glaring in a screenshot.
  • Per-instance color variation of a few percent breaks the copy-paste shimmer in large fields more effectively than adding mesh variants: the eye catches repeated color faster than repeated shape.

The deeper point: size should encode the same story the clustering and edges tell. Big sheltered trees in the valley, stunted ones on the ridge, saplings at the bright forest edge where light gets in. When size agrees with position, the scene reads as an ecosystem with a history; when size is random, it reads as assets sprinkled on terrain.

Rule 5: Terrain decides what grows

Slope and height masks are free ecology: steep faces hold rock and hardy shrubs, not lawns; valley floors are lusher than ridgelines; species change with altitude. The geometry you already have encodes it.

Thresholds that map well to perception: grass and ground cover fade out above ~30–35° of slope; shrubs hang on to ~45°; beyond that, bare rock and the occasional cliff-dweller. Height bands matter even in small scenes: a valley mix and a ridge mix, blended over the transition, sells a big-world logic that flat uniform coverage never will. Add moisture as a third mask where your engine allows it (near water, in hollows) and you've encoded the three axes real ecosystems actually respond to: light, elevation and water.

The beauty of terrain masks is that they cost nothing to author: the slope and height data already exist in your heightmap. You're not painting where grass goes; you're telling the system "grass, but not on cliffs," and the cliffs mask themselves.

Putting it together

The encouraging part: the rules compose in one pass. Clustered oaks, mushrooms attracted to them, grass avoiding the canopy, a shrub band at the forest edge, and slope masks keeping cliffs bare: that's five settings, not five weeks of hand placement. Then run the final check.

The grayscale squint test: screenshot the scene, flip it to black and white, and squint. Real vegetation produces uneven, clumpy value patterns: dark masses, bright clearings, a restless texture. If your grayscale looks like smooth, even noise, your distribution is still uniform underneath and you need to go back to Rule 1 and push the clustering harder. This test works because desaturating strips away the color that was flattering you and leaves only the distribution, which is what actually reads as natural or fake.

Field numbers worth stealing

  • Clump size that reads natural: 3–12 instances, gaps of several clump-widths
  • Forest edge gradient width: 5–15 m of dedicated transition band
  • Scale variance: 0.85–1.25×, biased small at edges and altitude
  • Tilt: 2–5° on broadleaf trees; ground sink: 2–5 cm on everything
  • Grass slope cutoff: ~30–35°; shrubs: ~45°
  • Species needed for a rich scene: ~2 canopy, 2 shrub, 2–3 ground, 1–2 accent; distribution beats count

Mini-FAQ

Does this apply to stylized games? Completely. Clustering, edges and terrain logic are about distribution, not fidelity: a hand-painted world with natural distribution reads more believable than a photoreal one with a uniform sprinkle. Distribution is the layer players read first, before texture.

How many species do I actually need? Fewer than you think. One scene carries well on two canopy trees, two shrubs, two or three ground covers and a couple of accent species, with relationships between them. Distribution quality beats species count every time: ten assets placed with rules beat forty placed at random.

What about performance? Clustering is your friend: clumps cull as units, gaps cost nothing, and edge bands concentrate detail where players look. Natural-looking scatter is usually cheaper than uniform density, not more expensive, since the empty space you were tempted to fill is free frame time.

Can I fake all this with one big noise texture? Partly. Noise gives you clumping, but not species relationships or edge gradients, which are the parts that read as ecology rather than just variation. Noise is Rule 1 only; the believability comes from Rules 2 and 3.

Five rules, one pass, and the grayscale test to verify. Nature isn't random; it's rule-driven with noise on top, which is exactly what a good scatter setup is.