Back

Procedural Mushroom Tool

February 2022

project houdini vex python

Building on my experience with the procedural flower tool, I wanted to explore more complex organic structures. Mushrooms presented an interesting challenge—combining geometric construction of caps, gills, and stems with a biologically-inspired growth algorithm. This tool generates fully art-directable mushrooms and uses space colonization to simulate realistic growth patterns.

Inspiration

I drew inspiration from the iconic Amanita muscaria mushroom, studying its distinctive dome-shaped cap, radial gill structure, and cylindrical stem. Understanding the natural proportions and organic variations in real mushrooms was essential for creating convincing procedural results.

Amanita muscaria mushroom reference Mushroom reference

Cap Construction

The mushroom cap starts as a basic hemisphere, which is then sculpted using a user-defined profile curve. This approach allows for a wide range of cap shapes—from flat parasols to bulbous domes. Noise is applied to break up the geometric perfection and add organic variation to the surface.

Profile curve for cap shape

Profile curve input

Base hemisphere shape

Base hemisphere

Cap with organic deformation

Organic deformation

Gill Generation

The gills are generated using a radial distribution of lines emanating from the center, bounded by the cap’s edge. Each line is then extruded and shaped into a blade-like form with tapered edges. The gill count, length, and curvature are all controllable parameters.

Radial line distribution

Radial distribution

Boundary ring

Boundary definition

Final gill geometry

Final gill geometry

Stem Construction

The stem is built by sweeping a circle along a user-provided curve input, allowing for straight, curved, or twisted stems. Noise displacement adds natural imperfections to the surface. The tool accepts any curve as input, making it easy to integrate with the space colonization growth paths.

Input curve

Input curve

Swept stem geometry

Swept geometry with noise

Houdini network

Subnetwork setup

Space Colonization Algorithm

To simulate organic mushroom growth across terrain, I implemented a simplified version of the space colonization algorithm in VEX. This algorithm was originally developed for modeling tree branching, where growth points compete for “attractor” points scattered in space, creating complex branching structures.

For mushrooms, I adapted the algorithm to produce non-branching growth paths. Unlike trees that split into multiple branches, mushroom stems grow as single stalks toward the surface. Each growth point claims a single attractor and extends directly toward it, resulting in smooth, upward-reaching paths that mimic how real mushrooms push through soil toward light.

The simplified algorithm works as follows:

  1. Scatter attractors in the volume above the terrain where mushrooms should grow.
  2. Initialize growth points on the terrain surface.
  3. Find closest attractor for each growth point.
  4. Extend upward by adding new points in the direction of the claimed attractor.
  5. Remove attractors when a growth point gets close enough.
  6. Repeat until all attractors are consumed or maximum iterations reached.
Space colonization algorithm diagram

The standard space colonization algorithm (shown above) produces branching structures. My implementation simplifies this by removing the branching behavior—each stem grows as a single path toward its target attractor.

VEX implementation in Houdini

VEX implementation of the space colonization algorithm in Houdini.

Growth Animation

By combining the space colonization paths with the mushroom tool, I created an animated growth system. Mushrooms sprout from a terrain surface, with their stems following the organic growth paths generated by the algorithm. The attractor points define where mushrooms will emerge, and the iterative growth creates a natural-looking animation of mushrooms pushing up through the ground.

Space colonization paths visualization

Generates predetermined growth paths

Terrain with growing mushrooms

Animates along path by resample length

Final Result

Future Improvements

There are several areas I’d like to explore to enhance this tool:

  • Mushroom variety — Expand the tool to generate a wider range of mushroom types beyond the classic toadstool shape, including chanterelles, morels, and shelf fungi.
  • Softer growth animation — Add easing to the end of the growth animation and introduce subtle noise-based movement at the final height to simulate mushrooms naturally swaying over time.
  • Cap-aware growth — Account for mushroom cap size in the space colonization algorithm to prevent intersections between neighboring mushrooms, creating more realistic clustering.