← Back to BLACKWIRE PRISM BUREAU Procedural Botany Rendered linden tree showing branching structure and shading from the procedural growth algorithm

A single procedurally grown linden, visualized after 30 simulated seasons, illustrating light‑driven crown formation.

PROCEDURAL TREE GROWTH METHOD REVEALS LIGHT-DRIVEN CROWN SHAPES

*A new implementation of the Palubicki et al. self‑organizing tree model shows how light competition sculpts virtual canopies. The technique balances resource distribution, pruning, and geometry to produce realistic forests on demand.*

By PRISM Bureau - BLACKWIRE  |  October 26, 2026, 11:00 CET  |  procedural trees, light competition, growth algorithm, virtual foliage, self‑organizing models

A hobbyist coder has turned a SIGGRAPH 2009 paper into a fully functional procedural tree engine. The method, based on self‑organizing tree models, treats every bud as a competitor for light and a conduit for growth resources. By iterating a season‑by‑season loop, the system measures light, distributes a proportional resource, and grows shoots that reshape the light field for the next round. The result is a virtual crown that emerges organically, without hand‑crafted rules. The implementation showcases how simple feedback—light, resource, pruning—can generate complex, believable arboreal forms suitable for games, simulations, and visual effects.

The Core Loop: Light, Resource, Growth

Each season begins by measuring light at every bud using a voxel shadow grid. Buds add a widening pyramid of shadow; deeper voxels receive less light. The grid returns two values: an available‑light scalar Q and a direction vector V toward the darkest neighbor within the bud's perception cone. Light values are summed down the branching hierarchy to produce a base resource v = α Q_base. This resource climbs back up, splitting at each node. Buds that receive at least one unit of resource generate a shoot of ⌊v⌋ metamers, subject to a cap. Dormant buds receive less than one unit and remain inactive. The loop repeats, letting the crown emerge from this feedback.

How does light competition shape the tree crown?

The shadow grid creates a natural gradient: interior buds become orange (shaded) while peripheral buds stay cyan (well exposed). Buds read the direction V toward the least shaded voxel and bias growth that way. As shoots extend, they cast new shadows, deepening interior darkness and reinforcing peripheral expansion. The model also supports space colonization, where marker points act as growth targets and are removed once occupied. This dynamic ensures that only well‑lit branches persist, while shaded twigs are shed after a grace period. The result is a crown that mirrors real trees: a dense, light‑seeking outer canopy and a pruned interior.

Buds compete for light; the tree distributes growth resources, and only those receiving enough produce new shoots.

What role does the lambda parameter play in branch dominance?

In the extended Borchert‑Honda formulation, the main axis receives v_m = v * (λ Q_m) / (λ Q_m + (1‑λ) Q_l). λ balances resource between the main and lateral sides. At λ = 0.5, resource follows light proportionally, producing a spreading crown. Raising λ to 0.56 shifts more resource to the main axis, yielding a dominant leader. Lowering λ to 0.46 favors laterals, creating a broader canopy. The small shift between 0.46 and 0.56 produces a visibly different crown shape, demonstrating how a single bias parameter can control overall tree architecture.

How are thickness and foliage rendered after the skeleton forms?

Branch thickness follows the pipe model: r_parent^n = Σ_i r_i^n. Starting with a fixed tip radius, the algorithm accumulates toward the root, preserving cross‑sectional area when n = 2. Larger exponents generate slimmer trunks, but shed branches still contribute to girth below them, so trunk size never shrinks. After the skeleton, a bark mesh is swept along each axis. Foliage uses twig‑spray cards: each card holds a small twig with several leaves drawn from a procedural atlas. Cards replace whole leaf clumps, and their normals blend toward an ellipsoid to simulate volumetric shading. Lower LODs drop card count, and distant trees switch to baked directional impostors. The pipeline can also bake depth‑field views for forest‑scale rendering.

Frequently asked questions

How does the voxel shadow grid determine light for each bud?

Each bud adds a widening pyramid of shadow to the voxel grid; the grid returns an available‑light value Q and a direction V toward the least shaded neighboring voxel.

What threshold decides whether a bud grows or stays dormant?

A bud receiving less than one unit of growth resource stays dormant; otherwise it produces a shoot of floor(v) metamers.

How does the lambda parameter affect crown shape?

Lambda balances resource between main and lateral branches; λ = 0.5 yields a spreading crown, λ = 0.56 creates a dominant leader, and λ = 0.46 favors laterals.

The open‑source implementation proves that realistic forest generation need not rely on massive datasets or manual sculpting. By encoding light competition, resource bias, and pruning into a tight seasonal loop, developers can spawn diverse, believable trees on the fly. As virtual environments demand ever greater scale, this light‑driven approach offers a scalable, analytically grounded path forward.

Sources: Hacker News – Growing Trees (https://brashandplucky.com/2026/10/15/growing-trees.html)