Grow

The primary growth node. Encapsulates core operations (growth, repetition, branching, switching) into a single interface. Defines one or more growth steps with time-varying attributes.

The Grow node is the primary interface for creating procedural vegetation in Natsura.

  • Encapsulated Logic: It wraps grow_core, split, repeat (begin/end), switch, and wrangle into one powerful tool.
  • Recursive or Linear: Can create a single internode or a recursive structure (using built-in repeat) with time-varying attributes.
  • Mapped Interface: Exposes sockets that drive internal core parameters via mapping chains.

Concept

Core Parameters vs. Interface Under the hood, the growth logic is driven by a few fundamental parameters on the grow_core:

  • Length Scale
  • Width Scale
  • Pitch, Roll, Yaw
  • Offset (position on parent internode)
  • Branch Count (innate forking property)

The Grow node maps these raw parameters to user-friendly controls. For example, "Multiplicity" drives Branch Count on the first step, while "Forking" drives Branch Count during recursive repetition.

Forking vs. Splitting

  • Forking is governed by the innate Branch Count property. It creates copies of the growth based on probabilities or gradients mapped to that count.
  • Splitting (via the Split node) creates explicit, parallel branches in the graph topology.

Recursion The built-in repeat allows a single Grow node to generate complex, recursive geometry (like a stem with leaves) by re-evaluating the graph N times. Alternatively, you can use Grow for a single step and wrap it in an explicit Repeat block for advanced workflows.


Inputs

  • Input 0 — Graph Existing growth graph.
  • Input 1 — Parms Geometry with a parms detail dictionary for external constants.
  • Input 2 — Second Graph Secondary graph merged during repetition (e.g., interleaving another recipe).
  • Output — Graph The resulting Apex graph.

Parameters

Initialization Controls the first step of growth.

  • Interval / Offset: Spacing and phase along the parent.
  • Multiplicity: Sets the Branch Count for the initial step (creating multiple siblings).
  • Orientation: Initial Pitch, Roll, Yaw.

Growth (Recursion)

  • Max Growth Steps: How many times to repeat the internal graph.
  • Fraction: Gates the realized steps (allows partial growth).
  • Per-Step Modifiers: Maps that drive Length, Width, and Spiral (incremental orientation) over the recursion.

Fork (Branching) Controls Branch Count during recursion.

  • Enable Fork: Unlocks branching during the repeat loop.
  • Branches: Sets the target Branch Count.
  • Probability: Maps the likelihood of a fork occurring.
  • Spread: Angular distribution of forked branches.

Sockets Connect Mapping chains here to drive the internal parameters in space and time.

  • Mappings: Drive length, width, orientation, etc.
  • Effectors: World-space influences (Gravity, Phototropism).
  • Decorations: Queue geometry (leaves, flowers) to be generated by Simulate.

Attributes

AttributeMeaning
uNormalized progress along the current growth section.
idUnique identifier for the internode.
parent_idID of the parent internode.
generationRecursive depth from the root.
ageTime/step counter.
branch_countThe innate forking property (driven by Multiplicity or Fork settings).

Workflow

  1. Base Growth: Use Initialization to set the starting point and orientation.
  2. Recursion: Increase Max Growth Steps to grow a long structure. Map Width to u for tapering.
  3. Forking: Enable Fork to create branches along the stem. Map Probability to control density.
  4. Variation: Connect Mappings to sockets to drive Pitch, Yaw, or Length with noise or gradients.
  5. Simulation: Pass the result to Simulate to generate the geometry.

NodeRelationship
SimulateEvaluates the graph
RepeatExplicit Begin/End block for advanced recursion
SplitCreates explicit parallel branches
SwitchConditional logic (encapsulated in Grow)