Procedural Mushroom Tool
February 2022
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.
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 input
Base hemisphere
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 distribution
Boundary definition
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
Swept geometry with noise
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:
- Scatter attractors in the volume above the terrain where mushrooms should grow.
- Initialize growth points on the terrain surface.
- Find closest attractor for each growth point.
- Extend upward by adding new points in the direction of the claimed attractor.
- Remove attractors when a growth point gets close enough.
- Repeat until all attractors are consumed or maximum iterations reached.
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 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.
Generates predetermined growth paths
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.