Builtin nodes
Here you will find the reference for all builtin nodes. A builtin node is any node which is not a template.
Common to all nodes
All nodes have the following common properties:
Property |
Type |
Description |
|
|
Name of the node |
|
|
Description of the node |
|
|
Determines if the node is enabled or disabled (acts as a pass-through when disabled) |
|
|
Desired evolve behavior of the node
|
|
|
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 |
|
|
Arithmetic operation to perform
|
|
|
Specifies how many inputs the node has. |
Input pins |
||
|
|
Input values. |
Output pins |
||
|
|
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 |
|
|
Original value / discretization path |
|
|
Value to inject into the discretization path in place of the |
Output pins |
||
|
|
New value, will always be equal to the |
+ 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 |
|
|
Compare operation to perform
|
Input pins |
||
|
|
Input values to compare against each other |
Output pins |
||
|
|
Result of the compare operation, either |
+ 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 of the constant
|
|
|
Specifies the semantic of the constant
|
|
|
Constant value |
Output pins |
||
|
|
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 |
|
|
Dimensions of the output vector
|
|
|
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.
|
Input pins |
||
|
|
Value of each separate X, Y, Z, W components. The number of pins available will depend on the |
Output pins |
||
|
|
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 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 to display in the build report |
Input pins |
||
|
|
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 to discretize (store) |
Output pins |
||
|
|
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 |
|
|
Input 'Evolve' value |
Output pins |
||
|
|
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 used to pick between |
|
|
Value to output when |
|
|
Value to output when |
Output pins |
||
|
|
Output value. |
+ 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 |
|
|
Integration base:
|
Input pins |
||
|
|
Value to integrate along time |
|
|
Integration base constant (initial value) |
Output pins |
||
|
|
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 |
||
|
|
If enabled, editor will open this template automatically when opening the current graph. |
||
|
|
If enabled, will override the layer’s LOD metrics. Otherwise, will use the effect’s default settings |
||
|
|
Distance below which the LOD level is at highest detail (lod = 0.0). A negative value will use the effect’s default value. |
||
|
|
Distance above which the LOD level is at lowest detail (lod = 1.0). A negative value will use the effect’s default value. |
||
|
|
Hints the runtime on how to subdivide the prewarm frame.
|
||
|
|
Maximum delta time used to subdivide and compute the first frame to prewarm the layer. |
||
|
|
Maximum subdivisions to prewarm the layer. |
||
|
|
Hints the runtime as to where it should try running the simulation for any child layers this template contains.
|
||
|
|
Hints the runtime as to how large the storage for this layer will need to be ingame.
|
||
|
|
Hints the runtime as to how insert particles in pages localized or not.
|
||
|
|
Hints the runtime as to how random values should behave.
|
||
|
|
Modifies a seed of the random generator. |
||
+ 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 |
|
|
Math function to apply.
|
|
|
Specifies how this function will interpret angles.
|
Input pins |
||
|
|
Input value |
Output pins |
||
|
|
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 |
|
|
Math function to apply.
|
|
|
Specifies how this function will interpret angles.
|
|
|
Specifies how many inputs the node has. |
Input pins |
||
|
|
Input values |
Output pins |
||
|
|
Result |
+ all common properties |
||
MathFunction3
This node represents all supported math functions that take three input values.
Property |
Type |
Description |
|
|
Math function to apply.
|
Input pins (Lerp) |
||
|
|
Input values when |
Input pins (Clamp, Within) |
||
|
|
Input values when |
Input pins (Select) |
||
|
|
Input values when |
Output pins |
||
|
|
Result |
+ all common properties |
||
MathWaveform
Samples a waveform
Property |
Type |
Description |
|
|
Math function to apply.
|
Input pins |
||
|
|
Input cursor. Range: |
Output pins |
||
|
|
Result. Range: |
+ 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 |
|
|
Integration base:
|
Input pins |
||
|
|
Value to derive across |
Output pins |
||
|
|
Derivative of the input |
+ 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 |
|
|
Type to reinterpret into
|
Input pins |
||
|
|
Input value to reinterpret |
Output pins |
||
|
|
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 |
|
|
Lifespan of the particle. |
+ 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 |
|
|
Dimensions of the input vector
|
|
|
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.
|
Input pins |
||
|
|
Value of each separate X, Y, Z, W components. The number of pins available will depend on the |
Output pins |
||
|
|
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 |
|
|
Which test to perform on the input value properties
|
|
|
Determines how to compare the selected property of the input value against
The ordered compare operators (lower/greater) are only available when |
|
|
Execution stage to compare against. If the input value’s exec stage is equal to the stage specified, the node returns
|
|
|
Execution frequency to compare against. If the input value satisfies the comparison defined in 'ExecFrequencyCmp', the node returns
|
Input pins |
||
|
|
Input value whose property should be tested |
Output pins |
||
|
|
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 |
|
|
Which test to perform on the input value properties
|
Input pins |
||
|
|
Value that will be output by the node if the type test fails |
|
|
Value that will be output by the node if the type test succeeds |
|
|
If the type of this value matches the |
Output pins |
||
|
|
Selected value, equal to |
+ 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 |
|
|
If any of the versions in the list is active for the current compile, outputs |
|
|
Value to output when any item of the |
|
|
Value to output when no items of the |
Output pins |
||
|
|
Output value. |
+ 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 |
|
|
If enabled, editor will open this template automatically when opening the current graph. |
|
|
Path to the effect containing the template. (empty means local template in this effect file) |
|
|
Name of the template in the |
|
|
Hints the runtime as to where it should try running the simulation for any child layers this template contains.
|
|
|
Hints the runtime as to how random values should behave.
|
|
|
Modifies a seed of the random generator. |
+ 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 |
|
|
Name of the exported value |
|
|
Type of the exported value
|
|
|
Type-mask of the exported value, when
|
|
|
Specifies the semantic of the exported value
|
|
|
Specifies whether this is exported as an input or output pin
|
|
|
(input nodes only)
|
|
|
Explicit order property used by the editor to sort the various properties & pins in the parent node. |
|
|
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. |
|
|
(optional)
|
|
|
(optional)
|
|
|
Name of the category this value should belong to, in the parent node’s propertygrid. |
|
|
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 |
|
|
If enabled, tells the UI it should not allow the value of the property to go below a minimum value |
|
|
If enabled, tells the UI it should not allow the value of the property to go above a maximum value |
|
|
If enabled, the property will be displayed with a slider whose min and max ranges will be the min and max values |
|
|
Values to be displayed in the drop-down when |
|
|
(output nodes only) |
|
|
Default value this pin/property should have when the user initially creates the parent node |
|
|
Minimum allowed value. Only used for UI purposes if |
|
|
Maximum allowed value. Only used for UI purposes if |
|
|
Specifies if and how the UI should apply pin visibility rules
|
|
|
Base visibility. Used when the visibility rule evaluates to
|
|
|
Visibility result when the visibility rule evaluates evaluates to
|
|
|
Rule1: Name of the exported property to look at to determine the first visibility function |
|
|
Rule1: Operation to apply between the value of
|
|
|
Rule1: Value to compare agains the value of |
|
|
Rule2: Name of the exported property to look at to determine the second visibility function |
|
|
Rule2: Operation to apply between the value of
|
|
|
Rule2: Value to compare agains the value of |
Input pins |
||
|
|
Default value (input export only, optional) |
|
|
Value to output in the parent graph (output export only) |
Output pins |
||
|
|
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 |
|
|
Coordinate-space to convert from:
|
|
|
Coordinate-space to convert to:
|
|
|
Whether or not to translate / rotate the input vector.
|
|
|
If enabled, the transform will take into account the in-engine emitter scale & mirorring |
Input pins |
||
|
|
3D vector in |
Output pins |
||
|
|
converted 3D vector in |
+ 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 |
|
|
Coordinate-space to convert from:
|
|
|
Coordinate-space to convert to:
|
Input pins |
||
|
|
Orientation in |
Output pins |
||
|
|
converted orientation in |
+ all common properties |
||
TypeCast
This node converts a value to a different type. For example, from float to int.
Property |
Type |
Description |
|
|
Type to convert into
|
Input pins |
||
|
|
Input value to convert |
Output pins |
||
|
|
Output converted value |
+ all common properties |
||