Skip to content

IO Nodes

IO nodes handle data entering and leaving a graph, wire management, asset persistence, and variable-based communication between parts of the graph.


Graph Input

Category: IO
Description: Receives external data into the graph. Every graph has exactly one Graph Input node, which is created automatically.

Ports

DirectionNameType
OutputOutConfigurable (see Settings)

Settings

FieldTypeDefaultDescription
outputTypePPGDataTypePointThe expected data type coming in from outside. Controls port color and type-checking display in the editor.

Notes

  • This node is a pass-through: it forwards whatever external data is injected into the graph without modification.
  • When a graph is executed as a Sub Graph (see Flow / Sub Graph), the parent's output data is supplied here.
  • When a graph is executed standalone by a PPGComponent, the component's configured source data arrives here.
  • There is always exactly one Graph Input node per graph. Adding a second one manually is unsupported.

Graph Output

Category: IO
Description: Collects the final result of the graph. Every graph has exactly one Graph Output node, which is created automatically.

Ports

DirectionNameType
InputInConfigurable (see Settings)

Settings

FieldTypeDefaultDescription
inputTypePPGDataTypePointThe expected data type being collected. Controls port color and type-checking display in the editor.

Notes

  • This node is a pass-through: it forwards whatever data arrives at In as the graph's final output.
  • The runtime executor reads PPGGraphExecutionResult.OutputData from this node after execution.
  • There is always exactly one Graph Output node per graph.

Load Data Asset

Category: IO
Description: Loads saved PPG point data from a PPGDataAsset ScriptableObject. Each named slot in the asset becomes a separate output port.

Ports

Output ports are dynamic and depend on the assigned dataAsset:

ConditionPorts
No asset assigned, or asset has no slotsSingle port named Out (Point)
Asset has slotsOne Point output port per slot, named after the slot

Settings

FieldTypeDefaultDescription
dataAssetPPGDataAssetnullReference to the ScriptableObject containing saved point data.

Notes

  • Slots with zero points are silently skipped (nothing is output for that port).
  • If no asset is assigned the node logs a warning and produces no output; execution continues.
  • The output port layout refreshes in the editor whenever the asset reference changes.
  • Intended to be paired with Save Data Asset — bake a costly graph once, then load the result cheaply in subsequent graphs.

Save Data Asset

Category: IO
Description: Saves incoming point data to a named slot in a PPGDataAsset ScriptableObject. The node passes data through unchanged so it can sit inline in a graph.

Ports

DirectionNameTypeNotes
InputInPointRequired — execution skips silently if no input is connected.
OutputOutPointPass-through of the input data.

Settings

FieldTypeDefaultDescription
targetAssetPPGDataAssetnullThe ScriptableObject to write into. The named slot is overwritten on every execution.
slotNamestring"Points"Name of the slot inside the asset to write to.

Notes

  • If targetAsset is not assigned the node logs a warning and passes data through without saving.
  • In the Editor, EditorUtility.SetDirty is called on the asset after saving so changes are visible immediately in the Project window and are included in the next asset serialization.
  • In builds, the write still occurs in memory but there is no asset-serialization step. Use this node primarily for editor-time baking workflows.
  • Multiple inputs are merged into a single PPGPointData before saving; the individual inputs are then passed through separately on Out.

Reroute

Category: IO
Description: A minimal pass-through node used purely for wire organisation in the graph editor. Forwards all input data to its output unchanged.

Ports

DirectionNameType
InputInAny
OutputOutAny

Settings

None. The node has no configurable fields.

Notes

  • The node title is intentionally blank so it appears as a small dot on the canvas.
  • Its only purpose is to improve readability of long or crossing wires — it has no effect on data.
  • Tags on each PPGTaggedData item are preserved when forwarding.

Set Variable

Category: IO
Description: Stores all incoming data in a named graph variable for later retrieval by Get Variable nodes. This is a terminal node — it has no output port.

Ports

DirectionNameType
InputInAny

Settings

FieldTypeDefaultDescription
variableNamestring"MyVariable"Key under which the data is stored in the graph's variable table. Case-sensitive.
variableTypePPGDataTypeAnyOptional type filter. If set to a specific type, a warning is logged when the incoming data type does not match. Data is still stored regardless.

Notes

  • Variables live in PPGContext.Variables, a dictionary scoped to a single graph execution. They are not persisted between runs.
  • Execution order matters: a Set Variable node must execute before any Get Variable node that reads the same name. Use the graph's topological order or explicit connection paths to guarantee ordering.
  • SupportsParameterExpose is false — the variable name and type cannot be promoted to graph parameters.
  • Storing Any type and setting variableType to a specific type is valid; the type check is advisory only.

Get Variable

Category: IO
Description: Retrieves data from a named variable previously stored by a Set Variable node. This node has no input ports — data comes from the variable store, not from wire connections.

Ports

DirectionNameType
OutputOutAny

Settings

FieldTypeDefaultDescription
variableNamestring"MyVariable"Key to look up in the graph's variable table. Must match the name used in the corresponding Set Variable node exactly (case-sensitive).
variableTypePPGDataTypeAnyInformational type hint shown in the editor. Not enforced at runtime.

Notes

  • If the variable has not been set (no matching Set Variable has executed yet), a warning is logged and the node outputs nothing. Execution continues.
  • Tags on each stored PPGTaggedData item are preserved when forwarding to Out.
  • SupportsParameterExpose is false.
  • Variables are scoped to the current graph execution and are not shared between a parent graph and a sub-graph.

Get Binding

Category: IO
Description: Reads a scene-object binding declared on the PPGComponent and outputs the appropriate data type. Analogous to Timeline track bindings — the graph declares a slot, and the component assigns the actual object.

Ports

Output type is determined by the binding type configured in the editor:

Binding TypeOutput Port Type
SplineContainerSpline
MeshFilterSurface
TerrainSurface
Transform / GameObjectPoint

Settings (Inspector)

All fields are managed by the graph editor and are hidden in the normal Inspector. They are documented here for reference.

FieldTypeDescription
bindingSlotGuidstring (HideInInspector)GUID that uniquely identifies the binding slot in the graph asset. Set automatically by the editor.
bindingSlotNamestring (HideInInspector)Display name for the slot, used in the node title and PPGComponent Inspector. Set automatically by the editor.
bindingTypePPGBindingType (HideInInspector)Determines how the bound object is interpreted (see table above). Set automatically by the editor.

The node title in the graph canvas displays as Get: <bindingSlotName> once a name is assigned.

Binding Type Details

SplineContainer
Reads all splines from the bound SplineContainer and converts each to world space. Each spline becomes a separate PPGSplineData output.

MeshFilter
Collects all Collider components on the bound GameObject and its children into a PPGSurfaceData. Requires at least one MeshCollider on the target for surface-sampling nodes to work. Logs a warning if no colliders are found.

Terrain
Wraps the bound Terrain component in a PPGTerrainData. The TerrainCollider is also added to the surface's collider list for compatibility with surface-sampling nodes.

Transform / GameObject
Creates a single PPGPointData containing one point positioned at the bound object's world position.

Notes

  • If no object is bound to the slot at runtime, a warning is logged and the node produces no output. Execution continues.
  • Binding slots are created and named in the graph editor's binding panel, not directly on this node's settings.
  • Multiple Get Binding nodes can reference the same slot — they all receive the same bound object.

Procedural Placement Graph for Unity