Natsura Grow

The fundamental building block. Extends your structure by creating new segments from current endpoints, with control over length, angle, and width.

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.

Grow extends your structure by creating new segments from current endpoints. Configure cluster count, segment length, orientation (pitch/yaw), and width. Effectors influence growth direction; decorators handle surface meshing.

Each Grow node represents one step of development. Chain multiple Grows for staged elongation where each stage can have different parameters -- e.g. a thick trunk segment followed by thinner branch segments. Wire Map nodes into any parameter for per-element variation driven by attributes like height, age, or randomness.

Every Grow has a built-in internal decoration that provides a quick meshed preview. For production output, attach external Surface, Cluster, or Trunk decorators instead.

== 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 Node 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.

== Attributes ==

  • u -- Normalized progress along the current growth section.
  • id -- Unique identifier for the internode.
  • parent_id -- ID of the parent internode.
  • generation -- Recursive depth from the root.
  • age -- Time/step counter.
  • branch_count -- The innate forking property (driven by Multiplicity or Fork settings).

== Workflow ==

Base Growth: Use Initialization to set the starting point and orientation.

Recursion: Increase Max Growth Steps to grow a long structure. Map Width to u for tapering.

Forking: Enable Fork to create branches along the stem. Map Probability to control density.

Variation: Connect Mappings to sockets to drive Pitch, Yaw, or Length with noise or gradients.

Simulation: Pass the result to Simulate Node to generate the geometry.

Parameters

Seed

Seed : Seed is used to generate a random value per node in the tree which can be used to drive effects that rely on randomness. Seed can be set per grow, and it is used to derive a unique seed value for each component generated by the Grow.

Phyllotaxy

Spiral Angle° : Node Yaw is most relevant for secondary branches as it effects the orientation on the parent stem. Yaw can be thought of as "swinging" around the parent axis and can be used to control the phyllotaxy of branches along with the parent node roll.

Whorl

Whorl Angle° : Branch spread determines whether the the branch whorls are spaced evenly along an arc or circle.

Arrangement

Start Pitch° : Node Pitch is in degrees and can be thought of as a "bending" action which works together with Roll to produce spiralling behaviour.

Start Yaw° : Node Yaw is most relevant for secondary branches as it effects the orientation on the parent stem. Yaw can be thought of as "swinging" around the parent axis and can be used to control the phyllotaxy of branches along with the parent node roll.

Init Length

Length Scale ∞

Length scale/step : Internode step length determines the scale of the growth step. If length mode is set to scale, this will be a fraction of the length of the previous step.

Orient

ΔRoll °/step : Node Roll is in degrees and can be thought of as a "spinning" action around the axis of growth. Roll works with Pitch to produce spiralling growth patterns

Whorl

Fork Branches ∞ : Branch count controls how many new nodes/internodes are created at the parent node. This parameter can be used along with Cone pitch and cone spread to determine whorling arrangements of secondary branches, or to introduce Bifurcating growth/Forks.

**Fork Spread ** : Branch Cone pitch is placeholder control until we implement more detailed control over branch whorls. For now, this value control the angle of seperation from the central or parent axis.

Fork Whorl : Branch spread determines whether the the branch whorls are spaced evenly along an arc or circle.

empty

Collision

Collision Mode : By default, Natsura Simulations will "collide" with the provided environment. Soon we will present a variety of other modes that simplify climbing behaviours. You can already experiment with projecting components onto geometry but you may find that you can get similar results using thigmotropism which is easier to control using a map.

  • Simulate Node — Define plant growth simulations with Grow nodes and plug them into Simulate to execute the graph and view the result.
  • Split Node — Connect multiple Grow nodes to a Split to generate simultaneous branches with different simulation logic.
  • Switch Node — Plug in a different Grow to each switch input to modify the simulation logic when attribute based conditions are met.
  • Repeat Node — Explicit Begin/End block for advanced recursion.