Here you will find the reference for all builtin nodes. A builtin node is any node which is not a template.
Sections
Common to all nodes
All nodes have the following common properties:
Property | Type | Description |
CustomName | LocalizedString | Name of the node |
Description | LocalizedString | Description of the node |
Active | bool | Determines if the node is enabled or disabled (acts as a pass-through when disabled) |
ExecStage | enum | Desired evolve behavior of the node
|
ExecFrequency | enum | Desired update rate of the node. Determines how frequently the node update will tick, based on the current LOD.
With default settings and in low-detail LOD conditions, |
Annotation
Annotation nodes allow to comment regions of the graph and visually tidy them up.
They are available in two flavors: Regular annotations, and post-its (since v2.8.0)
Arithmetic
Arithmetic nodes provide basic math operations such as addition, subtraction, multiplication, etc…
Property | Type | Description |
Operation | enum | Arithmetic operation to perform
|
InputCount | int | Specifies how many inputs the node has. Min value: 2 , Max value: 32 Does not apply to the following operations, where the input count will always be 2 : Mod , ShiftLeft , ShiftRight |
Input pins | ||
Value ValueB ... ValueN | float-float4 int-int4 | Input values. |
Output pins | ||
Value | float-float4 int-int4 | Output value, contains the result of the operation. |
+ all common properties |
Assign
The assign node is mainly useful when used in conjunction with discretization paths, and the discretization point node.
It allows redirecting the load/store path, or rather, assigning a new value without changing the load-store path.
Input pins | Type | Description |
Value | float-float4 int-int4 bool-bool4 orientation | Original value / discretization path |
NewValue | float-float4 int-int4 bool-bool4 orientation | Value to inject into the discretization path in place of the Value input. |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | New value, will always be equal to the NewValue pin |
+ all common properties |
Compare
The compare node compares two values and tells if they satisfy a compare operation (equal, not equal, greater or equal, lower or equal, strictly greater, or strictly lower)
Property | Type | Description |
Operation | enum | Compare operation to perform
|
Input pins | ||
Value ValueB | float-float4 int-int4 bool-bool4 | Input values to compare against each other |
Output pins | ||
Result | bool-bool4 | Result of the compare operation, either true or false When comparing vectors, the result will be an identically-sized vector of bool values.You can use the Any or All nodes to bring the result back to a single bool value. |
+ all common properties |
Constant
The constant node represents a static numeric constant in the graph, which can then be wired into the input pins of other nodes.
Note that you usually do not have to use the constant node, as you can specify numeric constants inline in the propertygrid of most nodes instead of wiring in a constant node.
Property | Type | Description |
Type | enum | Type of the constant
|
Semantic | enum | Specifies the semantic of the constant
|
Value* | float-float4 int-int4 bool-bool4 orientation | Constant value |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Outputs the constant value |
+ all common properties |
Constructor
The constructor node allows you to assemble a vector from its separate components. For example, construct a 3D vector from separate X, Y, and Z values each coming from different nodes.
See also the Splitter node.
Property | Type | Description |
Dimension | enum | Dimensions of the output vector
|
Mode | enum | Semantic of the value to assemble, use this to make the effect axis-system independent. The S, U, F nomenclature refer to Side, Up, Forward. Only applicable to 3D vectors.
|
Input pins | ||
X Y Z W | float int bool | Value of each separate X, Y, Z, W components. The number of pins available will depend on the Dimension property. |
Output pins | ||
Value | float2-float4 int2-int4 bool2-bool4 | Final assembled vector |
+ all common properties |
DebugCheck
Allows to perform a runtime check and either break the simulation in-editor when a condition isn’t met, or show a runtime warning in the editor viewport.
When the condition can be evaluated at compile-time, will emit a compile-time diagnostic instead of a runtime one.
Property | Type | Description |
Type | enum | Type of action to perform based on the value of the input condition.
If not a compile-time constant, and set to ‘Error’ or ‘Assert’, will pause the simulation in the editor and select the incriminated particles. |
Message | String | Message to display in the build report |
Input pins | ||
Condition | bool | Condition that should be evaluated |
+ all common properties |
DiscretizationPoint
The discretization node allows to specify “discretization” paths, forcing the graph to do a load & store from one frame to the next, effectively discretizing that value.
The editor displays discretization (load/store) paths with a yellow outline so they are easy to spot and troubleshoot.
You can see the discretization point node as a generalized “store” node.
When a discretization point is placed in the graph, the graph compiler will walk back its input wire until it encounters a node which is not evaluated at evolve. It will create a per-particle storage for this value, store the value at spawn, and insert a load from that storage at the beginning of the frame. The discretization point node will then store to that same storage, causing the next frame to load that value. When multiple discretization nodes are encountered on the same path, the store is only done on the last one. This allows to create accumulators, timers, and things like the physics node. Basically any behavior that needs to accumulate a value from one frame to the next.
See also the Assign node, which is extremely useful to replace a value along a discretization path.
Because the graph compiler will always walk back the first functional input pin of each node it encounters when building the discretization path, and because not all nodes are commutative (such as a subtract or divide node), it means it can sometimes be tedious to make the discretization path walk back the branch you want it to follow. Using the Assign node makes this considerably easier and less error-prone.
Input pins | Type | Description |
Value | float-float4 int-int4 bool-bool4 orientation | Value to discretize (store) |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Same value as the input value |
+ all common properties |
EvaluateAtSpawn
This node evaluates the graph wired into its input pin at spawn.
Wiring any “evolve” nodes in the input pin will output the value they had at the time of the initial spawn.
This is the only node that can convert an “evolve” value back into a “spawn” value.
Input pins | Type | Description |
Value | float-float4 int-int4 bool-bool4 orientation | Input ‘Evolve’ value |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Output ‘Spawn’ value |
+ all common properties |
If
This node selects between two input values based on a condition.
It always evaluates both inputs, and is not a dynamic-branching if
statement, it is identical to a select
operation. Therefore it cannot be used to avoid doing some expensive operations based on a dynamic condition.
The graph optimizer will properly simplify it when the input condition is a compile-time constant though, and entirely remove the branch which ends up not being evaluated.
Input pins | Type | Description |
Condition | bool-bool4 | Condition used to pick between Value and ValueIfFalse |
Value | float-float4 int-int4 bool-bool4 orientation | Value to output when Condition is true |
ValueIfFalse | float-float4 int-int4 bool-bool4 orientation | Value to output when Condition is false |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Output value. Equal to Value when Condition is true .Equal to ValueIfFalse when Condition is false . |
+ all common properties |
Integrate
The integrate node performs a time-based integration of the input graph, analytically if possible, otherwise using per-frame accumulation.
Property | Type | Description |
Base | enum | Integration base:
|
Input pins | ||
Function | float-float4 | Value to integrate along time |
Constant | float-float4 | Integration base constant (initial value) |
Output pins | ||
Integral | float-float4 | Integration result |
+ all common properties |
Layer
The layer node represents a particle simulation. It contains a simulation graph.
A layer node cannot be dropped in a simulation graph, it can only be dropped in an event graph.
Layers are “triggered” by an incoming event, which causes a particle to spawn, and be simulated by the graph contained inside the layer.
To open a layer a view its simulation graph, double-click on it.
Property | Type | Description |
AutoEntrypoint | bool | If enabled, editor will open this template automatically when opening the current graph. Allows to do quick jumps when opening intermediate-level templates to skip boilerplate template indirections |
LODMetricOverride | bool | If enabled, will override the layer’s LOD metrics. Otherwise, will use the effect’s default settings |
LODDistanceMin | float | Distance below which the LOD level is at highest detail (lod = 0.0). A negative value will use the effect’s default value. |
LODDistanceMax | float | Distance above which the LOD level is at lowest detail (lod = 1.0). A negative value will use the effect’s default value. |
PrewarmPreferredSubdivision | enum | Hints the runtime on how to subdivide the prewarm frame.
|
PrewarmMaxTickDelta | float | Maximum delta time used to subdivide and compute the first frame to prewarm the layer. Min: 0.001 |
PrewarmMaxTickCount | int | Maximum subdivisions to prewarm the layer. If the maximum subdivisions isn’t enough to prewarm the default time with the maximum delta time, the maximum delta time will be grown accordingly. Min: 1 |
PreferredSimLocation | enum | Hints the runtime as to where it should try running the simulation for any child layers this template contains. IMPORTANT: Only applicable to layergraph, ignored in datagraphs.
|
PreferredStorageSize | enum | Hints the runtime as to how large the storage for this layer will need to be ingame. It has to take into account the number of simultaneous ingame instances of the effect. So a layer with few particles but many ingame instances will need a larger storage.It’s usually best to keep this to Auto , unless the storage size has been specifically spotted as a problem.
NOTE: The page sizes are indicative and might be adjusted in future SDK updates. |
PreferredLocalization | enum | Hints the runtime as to how insert particles in pages localized or not.
|
Determinism | enum | Hints the runtime as to how random values should behave.
|
RandomSeedModifier | int | Modifies a seed of the random generator. On deterministic templates that receive event from the same parent, the same seed will lead to identical random values. Min: 0 |
+ all common properties |
MathFunction1
This node represents all supported math functions that take a single input value.
All “Fast” versions are faster to compute, but give a lower precision result.
Property | Type | Description |
Function | enum | Math function to apply.
|
AngleUnit | enum | Specifies how this function will interpret angles. Only applies to trigonometric functions
|
Input pins | ||
Value | float-float4 int-int4 bool-bool4 | Input value |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 | Result |
+ all common properties |
MathFunction2
This node represents all supported math functions that take two input values.
All “Fast” versions are faster to compute, but give a lower precision result.
Property | Type | Description |
Function | enum | Math function to apply.
|
AngleUnit | enum | Specifies how this function will interpret angles. Only applies to trigonometric functions ( ArcTan2 )
|
InputCount | int | Specifies how many inputs the node has. Min value: 2 , Max value: 32 Only applies to the following operations: Min , Max , all other functions will always have 2 inputs |
Input pins | ||
Value ValueB | float-float4 int-int4 bool-bool4 | Input values |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 | Result |
+ all common properties |
MathFunction3
This node represents all supported math functions that take three input values.
Property | Type | Description |
Function | enum | Math function to apply.
|
Input pins (Lerp) | ||
Value ValueB Cursor | float-float4 int-int4 bool-bool4 | Input values when Function is set to Lerp |
Input pins (Clamp, Within) | ||
Value Min Max | float-float4 int-int4 bool-bool4 | Input values when Function is set to Clamp or Within |
Input pins (Select) | ||
Value ValueIfTrue Condition | float-float4 int-int4 bool-bool4 | Input values when Function is set to Select |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 | Result |
+ all common properties |
MathWaveform
Samples a waveform
Property | Type | Description |
Function | enum | Math function to apply.
|
Input pins | ||
Value | float-float4 | Input cursor. Range: [-∞, +∞] |
Output pins | ||
Value | float-float4 | Result. Range: [-1, 1] |
+ all common properties |
PartialDerivative
The partial derivative node performs an analytical time-based derivative of the input graph if possible, otherwise using per-frame finite difference.
It also allows automatically and efficiently computing the frame-based derivative of the input value, outputting how much the input value has changed since the last frame.
Property | Type | Description |
Base | enum | Integration base:
|
Input pins | ||
Function | float-float4 | Value to derive across Base |
Output pins | ||
Derivative | float-float4 | Derivative of the input Function across Base |
+ all common properties |
Passthrough
Passthrough nodes are helper nodes that do no operation, their only purpose is to redirect wires to tidy up graphs.
You can easily create passthrough nodes in the graph by placing the mouse cursor near a wire, holding Alt+Shift
, moving the mouse where you want your passthrough to be, then pressing Left-mouse-button
to place the passthrough node.
Reinterpret
The reinterpret node reinterprets the raw bits of the input value to the target type.
It is not a type conversion. To convert from float
to int
or similar, use the TypeCast node.
It performs the same operation as the following script functions:
int asint(float x);
float asfloat(int x);
int4 asint(orientation x);
float4 asfloat(orientation x);
orientation asorientation(float4 x);
For example, passing the integer 0x3FC00000
to the reinterpret node, and reinterpreting as float
, will output the float 1.5
Likewise, passing the float 1.42
to the reinterpret node, and reinterpreting as int
, will output the integer 0x3FB5C28F
Property | Type | Description |
TargetType | enum | Type to reinterpret into
|
Input pins | ||
Value | float-float4 int-int4 orientation | Input value to reinterpret |
Output pins | ||
Value | float-float4 int-int4 orientation | Output reinterpreted value |
+ all common properties |
Script
The script node allows you to use custom scripts instead of nodes.
Not all operations can be done within scripts (such as pulsing events or querying/inserting into spatial layers), but this will eventually change.
You can expose any number of input and output pins to the script node, to manipulate them inside the script.
See the Scripting Reference page for more details.
SetLife
Sets the lifespan of the particle.
Usually takes a constant, or spawn value, but you can also use this node with an evolve value.
Note that if you want to kill a particle at evolve, it is better to use a kill
node with a condition rather than using the condition to select between the regular lifespan and a lifespan of zero.
Input pins | Type | Description |
Life | float | Lifespan of the particle. Ex: a value of 5.0 will make the particle live for 5 seconds. |
+ all common properties |
Splitter
The splitter node allows you to explode a vector into its separate components. For example, split a 3D vector into distinct X, Y, and Z values.
See also the Constructor node.
Property | Type | Description |
Dimension | enum | Dimensions of the input vector
|
Mode | enum | Semantic of the value to split, use this to make the effect axis-system independent. The S, U, F nomenclature refer to Side, Up, Forward. Only applicable to 3D vectors.
|
Input pins | ||
X Y Z W | float int bool | Value of each separate X, Y, Z, W components. The number of pins available will depend on the Dimension property. |
Output pins | ||
Value | float2-float4 int2-int4 bool2-bool4 | Final assembled vector |
+ all common properties |
StaticTest
The static test node tests for a compile-time property of the input value (is the input value spawn or evolve? is the input value evaluated more frequently than medium frequency ? etc…), and outputs a compile-time bool
value.
Useful to make generic templates react differently based on what’s wired into their inputs.
Property | Type | Description |
Test | enum | Which test to perform on the input value properties
|
CompareOp | enum | Determines how to compare the selected property of the input value against TestExecStage or TestExecFrequency , based on the value of Test
The ordered compare operators (lower/greater) are only available when |
TestExecStage | enum | Execution stage to compare against. If the input value’s exec stage is equal to the stage specified, the node returns true
|
TestExecFrequency | enum | Execution frequency to compare against. If the input value satisfies the comparison defined in ‘ExecFrequencyCmp’, the node returns true
|
Input pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Input value whose property should be tested |
Output pins | ||
Value | bool | Test result |
+ all common properties |
StaticTypeSwitch
Similar to an If node. Checks the type of an input test value against a specified type, and uses the result to select two input values at compile time. Only the selected value will be evaluated, the test value, and the other non-selected value will never be evaluated at runtime, and will be removed from the compiled graph.
Property | Type | Description |
TypeEqualTo | enum | Which test to perform on the input value properties
|
Input pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Value that will be output by the node if the type test fails |
ValueB | float-float4 int-int4 bool-bool4 orientation | Value that will be output by the node if the type test succeeds |
TestType | float-float4 int-int4 bool-bool4 orientation | If the type of this value matches the TypeEqualTo property, the node will output ValueB , if it does not match, it will output Value |
Output pins | ||
Value | bool | Selected value, equal to Value if the types do not match, and equal to ValueB if the types match. |
+ all common properties |
StaticVersionSwitch
Checks for the build versions active in the current bake/compile, and selects between two input values at compile-time based on if one of the specified versions is active in the current build.
Allows for example to conditionally turn on or off certain parts of the simulation graph based on the platform.
Similar to the If node.
Property | Type | Description |
Versions | Array<String> | If any of the versions in the list is active for the current compile, outputs Value , otherwise outputs ValueIfFalse |
Value | float-float4 int-int4 bool-bool4 orientation | Value to output when any item of the Versions list is found in the current compile tags |
ValueIfFalse | float-float4 int-int4 bool-bool4 orientation | Value to output when no items of the Versions array are found in the current compile tags |
Output pins | ||
Value | float-float4 int-int4 bool-bool4 orientation | Output value. Equal to Value when no items of the Versions array are found in the current compile tags.Equal to ValueIfFalse when any item of the Versions list is found in the current compile tags. |
+ all common properties |
Template
The template node is rarely created and manipulated directly, most of the time it will be automatically created and setup by the editor for you.
This node instantiates a template (sub-graph), inside the current graph.
Property | Type | Description |
AutoEntrypoint | bool | If enabled, editor will open this template automatically when opening the current graph. Allows to do quick jumps when opening intermediate-level templates to skip boilerplate template indirections. |
SubGraphFilePath | String | Path to the effect containing the template. (empty means local template in this effect file) |
SubGraphName | String | Name of the template in the SubGraphFilePath file |
PreferredSimLocation | enum | Hints the runtime as to where it should try running the simulation for any child layers this template contains. IMPORTANT: Only applicable to layergraph, ignored in datagraphs.
|
Determinism | enum | Hints the runtime as to how random values should behave.
|
RandomSeedModifier | int | Modifies a seed of the random generator. On deterministic templates that receive event from the same parent, the same seed will lead to identical random values. Min: 0 |
+ all common properties |
TemplateExport
The TemplateExport node allows you to expose custom input or output pins from a template (sub-graph), and specify how they should behave & be displayed in the editor.
Property | Type | Description |
ExportedName | String | Name of the exported value |
ExportedType | enum | Type of the exported value
|
ExportedTypeMask | multiselect enum | Type-mask of the exported value, when ExportedType is set to auto
|
Semantic | enum | Specifies the semantic of the exported value
|
Type | enum | Specifies whether this is exported as an input or output pin
|
InputType | enum | (input nodes only) Specifies whether this is exported as a pin, property, attribute, or a combination of those
|
Order | int | Explicit order property used by the editor to sort the various properties & pins in the parent node. When nodes have identical Order values, the editor will use their vertical position in the graph to compute the final order |
VisibleByDefault | bool | When disabled, the pin will not be visible by default when instantiating this graph, the user will have to explicitly expand the node to see it. Useful to avoid cluttering graphs with pins which are useful in some rare cases, but unneeded in the majority of other scenarios. |
TransformSpace | enum | (optional) Specifies whether this 3D coord should be treated explicitly as a local or worldspace coordinate
|
TransformMode | enum | (optional) Specifies whether this 3D coord should be treated as a position (full transforms) or direction (rotate-only)
|
CategoryName | String | Name of the category this value should belong to, in the parent node’s propertygrid. |
DropDownMode | enum | Controls if the property will be displayed as a drop-down containing a list of values, with either single-selection or multi-selection allowed
When using single-selection dropdowns, the output will be the 0-based index of the selected item in |
HasMin | bool | If enabled, tells the UI it should not allow the value of the property to go below a minimum value |
HasMax | bool | If enabled, tells the UI it should not allow the value of the property to go above a maximum value |
UseSlider | bool | If enabled, the property will be displayed with a slider whose min and max ranges will be the min and max values |
EnumList | Array<String> | Values to be displayed in the drop-down when DropDownMode is set to something else than None |
PassthroughInput | String | (output nodes only) Name of the input pin this output should route through when the parent node is deactivated / toggled off. By default, input and output pins of the same name will be passed-through. Use this property when you want to passthrough between pins which are not named the same |
DefaultValue* | float-float4 int-int4 bool-bool4 orientation data | Default value this pin/property should have when the user initially creates the parent node |
MinValue* | float-float4 int-int4 bool-bool4 | Minimum allowed value. Only used for UI purposes if HasMin is disabled. |
MaxValue* | float-float4 int-int4 bool-bool4 | Maximum allowed value. Only used for UI purposes if HasMax is disabled. |
PinRules | enum | Specifies if and how the UI should apply pin visibility rules
|
BaseVisibility | enum | Base visibility. Used when the visibility rule evaluates to false
|
RuleResult | enum | Visibility result when the visibility rule evaluates evaluates to true
|
DependentProperty | String | Rule1: Name of the exported property to look at to determine the first visibility function |
RuleFunction | enum | Rule1: Operation to apply between the value of DependentProperty and RuleValue
|
RuleValue | String | Rule1: Value to compare agains the value of DependentProperty , using the operation defined in RuleFunction .Usually a numeric value. |
DependentProperty2 | String | Rule2: Name of the exported property to look at to determine the second visibility function |
RuleFunction2 | enum | Rule2: Operation to apply between the value of DependentProperty2 and RuleValue2
|
RuleValue2 | String | Rule2: Value to compare agains the value of DependentProperty2 , using the operation defined in RuleFunction2 .Usually a numeric value. |
Input pins | ||
DefaultValue | any | Default value (input export only, optional) |
Value | any | Value to output in the parent graph (output export only) |
Output pins | ||
Value | any | Value wired-in the parent graph (input export only) |
+ all common properties |
Transform
The transform node transforms an input 3D coordinate from a source space to a target space. For example, can be used to transform a float3
from localspace to worldspace, or vice-versa.
Note: Usually, you should use the helper templates found in the core template library instead of the raw transform node:
local position to world
local direction to world
world position to local
world direction to local
localspace
Property | Type | Description |
InputSpace | enum | Coordinate-space to convert from:
|
OutputSpace | enum | Coordinate-space to convert to:
|
TransformMode | enum | Whether or not to translate / rotate the input vector.
|
ApplyScale | bool | If enabled, the transform will take into account the in-engine emitter scale & mirorring |
Input pins | ||
Value | float3 | 3D vector in InputSpace coordinates |
Output pins | ||
Value | float3 | converted 3D vector in OutputSpace coordinates |
+ all common properties |
TransformOrientation
The transform orientation node transforms an input orientation from a source space to a target space. Like the Transform node, but for type orientation
.
Property | Type | Description |
InputSpace | enum | Coordinate-space to convert from:
|
OutputSpace | enum | Coordinate-space to convert to:
|
Input pins | ||
Value | orientation | Orientation in InputSpace coordinates |
Output pins | ||
Value | orientation | converted orientation in OutputSpace coordinates |
+ all common properties |
TypeCast
This node converts a value to a different type. For example, from float
to int
.
Property | Type | Description |
TargetType | enum | Type to convert into
|
Input pins | ||
Value | float-float4 int-int4 | Input value to convert |
Output pins | ||
Value | float-float4 int-int4 | Output converted value |
+ all common properties |