| name | threejs-procedural-vegetation |
| description | Generate authored procedural trees, grass, ivy, and vegetation in Three.js. Use for surface-following vines, painted ivy paths, stylized or GPU grass, trunks, recursive branches, roots, canopies, leaf cards, species presets, deterministic growth, and rooted blade or petiole-hinge wind. |
Procedural Vegetation
Represent a plant as a growth hierarchy plus rendering adaptations. Do not model it as randomly scattered cylinders.
Build sequence
- Define a per-level species table: length, radius, taper, child count, emergence range, angle, twist, gnarliness, sections, radial segments.
- Grow branches iteratively from a queue so recursion depth and budgets remain inspectable.
- Emit each branch as oriented rings with an intentional UV seam.
- Update section orientation from:
- inherited direction;
- stochastic curvature;
- tropism or external force;
- optional attraction constraints.
- Spawn children with stratified longitudinal slots and independently permuted angular slots.
- Generate leaves only after branch topology is stable.
- Build foliage normals from both card orientation and local crown volume.
- Choose wind scope explicitly. Leaf-root deformation, branch hierarchy deformation, and whole-tree sway are separate systems.
Read references/structured-ash-growth-system.md and preserve its preset, continuation, child-placement, leaf, material, wind, and composition contracts before tuning.
Read the Ash Growth System implementation
with its authored preset for a
contract-accurate implementation and its diagnostic attributes.
Read the
stylized meadow grass implementation
for authored blade-cluster geometry with a procedural fallback, image-driven
path masking, per-instance origin/facing attributes, circular-arc rooted wind,
gust fronts, tip flutter, color clumps, macro variation, translucency, and rim
diagnostics.
Read the
GPU-computed grass implementation
for MRT blade-parameter generation, deterministic terrain-conforming placement,
Voronoi clumps, Bezier blade folding, wind-facing yaw, distance LOD/culling,
normal/color fading, translucency, and field diagnostics.
Read the
procedural surface ivy entry
and its complete
TypeScript implementation
for seeded spline-following stems, repeated mesh reprojection, tangent-plane
creep and droop, parallel-transport tube rings, growth reveal, instanced leaves
and umbels, and rigid petiole-hinge wind. Treat the TypeScript modules as the
only implementation; the entry file only re-exports them.
Visual failure conditions
- branches form visible helices;
- dense grass ignores terrain height or clump-level variation;
- every child emerges at the same relative height;
- bark texture scale changes with branch radius;
- leaves reveal flat card normals under rotation;
- leaf wind moves card roots instead of remaining anchored;
- branch wind is claimed to match a reference whose branches are static;
- different seeds change species identity rather than controlled variation;
- geometry cost grows without a per-level budget;
- surface-following stems are offset from the host or flip normals across seams;
- ivy branches ignore the tangent plane while attached;
- leaf wind rotates around the card center instead of the petiole.
Routing boundary
Use $threejs-procedural-geometry for generic branch-ring emission without a
growth model. This skill owns species tables, vine and branch topology,
surface-following growth, foliage, grass fields, roots, and rooted wind.