Appearance
Flow Nodes
Flow nodes control the execution path and structure of a graph. They allow you to repeat transforms, split points along a condition, or delegate work to a separate graph asset.
Loop
Category: Flow
Description: Applies a transformation to points iteratively.
Ports
| Direction | Name | Type |
|---|---|---|
| Input | In | Point |
| Output | Out | Point |
Settings
| Field | Type | Default | Description |
|---|---|---|---|
iterations | int (1–20) | 3 | Number of iterations to run. |
offsetPerIteration | Vector3 | (0, 0, 0) | World-space position offset added per iteration. |
rotationPerIteration | Vector3 | (0, 0, 0) | Euler-degree rotation added per iteration. |
scalePerIteration | Vector3 | (1, 1, 1) | Scale multiplier per iteration. (1, 1, 1) means no change. |
accumulatePoints | bool | true | Controls the loop mode (see below). |
Modes
Accumulate mode (accumulatePoints = true)
Each iteration duplicates all source points, applying a cumulative transform at factor i+1. The total output count is sourcePoints × iterations. Use this to create arrays, scatter copies, or fractal-like repetition.
Iterative mode (accumulatePoints = false)
The transform is applied in-place to the same set of points, building on the result of each previous iteration. The output count equals the input count. Use this to move or rotate the same points over time.
Notes
- Scale is computed as
1 + (scalePerIteration − 1) × factor, so a value of(1.2, 1.2, 1.2)adds 20 % per iteration. - Transforms are applied in TRS order: translate → rotate → scale.
- The
iterationsrange is clamped to 1–20 in the Inspector.
Branch
Category: Flow
Description: Routes points to different outputs based on an attribute threshold comparison.
Ports
| Direction | Name | Type |
|---|---|---|
| Input | In | Point |
| Output | True | Point |
| Output | False | Point |
Settings
| Field | Type | Default | Description |
|---|---|---|---|
sourceSelector | PPGAttributeSelector | BuiltIn(Density) | The attribute to evaluate for each point. Can be a built-in property or a custom named attribute. |
threshold | float | 0.5 | The value to compare the attribute against. |
compare | CompareMode | GreaterThan | Comparison operator (see table below). |
CompareMode Values
| Value | Condition |
|---|---|
GreaterThan | attribute > threshold |
LessThan | attribute < threshold |
GreaterOrEqual | attribute >= threshold |
LessOrEqual | attribute <= threshold |
IPPGAttributeConsumer
Branch implements IPPGAttributeConsumer. When sourceSelector targets a custom attribute, the attribute name is reported as consumed so upstream nodes can produce it correctly.
Notes
- Points exactly equal to
thresholdare sent to False when usingGreaterThan, and to True when usingGreaterOrEqual. - Both output ports always receive a
PPGPointDataobject (possibly empty). Downstream nodes that require points should tolerate zero-count inputs. - The
TrueandFalseoutputs share the same metadata as the input.
Sub Graph
Category: Flow
Description: Executes another PPG graph asset as a nested sub-graph within the current graph.
Ports
| Direction | Name | Type |
|---|---|---|
| Input | In | Any |
| Output | Out | Any |
Settings
| Field | Type | Default | Description |
|---|---|---|---|
subGraph | PPGGraphAsset | null | The graph asset to execute. Must contain a Graph Input node to receive data. |
Behavior
- The data arriving at In is forwarded to the sub-graph's Graph Input node.
- The sub-graph executes fully (instancers are skipped to avoid double-spawning).
- All data produced by the sub-graph's Graph Output node is forwarded to Out.
- Intermediate data produced inside the sub-graph is disposed after execution; only the data passed to Out (and the original In data) survives.
Recursion Protection
- A direct or indirect recursive reference (a graph calling itself) is detected at runtime and produces an error log. Execution is aborted for the offending node.
- The maximum nesting depth is 16. Exceeding it also aborts execution with an error.
Notes
- If
subGraphis not assigned the node logs a warning and produces no output (execution continues). - Sub-graph execution failures (errors in child nodes) are reported as warnings and cause the Sub Graph node to return
false, stopping the parent graph at that point. - The node accepts and outputs
Anydata type, so it can wrap graphs that operate on Points, Splines, or Surfaces.