Events
This section details all event-related nodes.
EventGenerator
Scope: Simulation graph.
This is an advanced node, we recommended you do not use it directly but instead use the EventMultiplier or Trail nodes to achieve multiple-events-per-frame emission.
The EventGenerator node is a generalization of the Trigger node, which is able to pulse multiple events per frame.
The EventMultiplier and Trail nodes from the core library both use the EventGenerator node.
Minimal setup of an EventGenerator node:

Input pins |
Type |
Description |
|
|
Dimensionless, initialized to |
|
|
How much to advance the spawn accumulator each frame. |
|
|
Spawn interval size this frame. |
|
|
Fraction in current time-window (frame) at which the events should start being pulsed. |
|
|
Fraction in current time-window (frame) at which the events should end being pulsed. |
Output pins |
||
|
|
Outgoing Accumulator. |
|
|
Outgoing event. |
+ all common properties |
||
When the node is disabled, no events are pulsed.
When the spawn accumulator plus Offset reaches Interval, the node emits one event.
It will emit as many events as necessary until the spawn accumulator becomes lower than Interval.
For example, with an Accum starting at zero, an Interval at 2.5, and an Offset of 0.5, the first 4 simulation frames will produce no event, but the 5th will emit one event, followed by 4 frames with no events, etc…
With an Offset of 10.0, the first frame will spawn 4 events, the second frame will then spawn 4 events again, etc…
Logic:
Accum += Offset;
EventCountThisFrame = int(Accum / Interval);
Accum -= EventCountThisFrame * Interval;
for (evid = 0; evid < EventCountThisFrame; evid++)
PulseEvent();
EventGraphPortal
Scope: Simulation graph.
Experimental feature (undocumented, subject to changes), introduced in v2.8.
EventParent
Scope: Simulation graph.
This node gives access to the parent event wired into the current layer, which gave birth to the current particle.
It allows to extract any payload the event carried.
These payloads can only be extracted at spawn !
Output pins |
Type |
Description |
|
|
Parent event. |
+ all common properties |
||
When the node is disabled, no payloads are present.
EventPayloadAppend
Scope: Simulation graph.
The PayloadAppend node injects a new payload into an event, or replaces an existing one.

Property |
Type |
Description |
|
|
Name of the payload data element. |
|
|
Type of the payload data element.
|
|
|
Payload builtin kind
|
|
|
If enabled, no warning will be emitted when overriding a payload element of the same name and type. |
|
|
If enabled, no warning will be emitted when overriding a payload element of the same name but different type. |
|
|
If enabled, no warning will be emitted if this payload element is unused by the layers it triggers in the layergraph. |
Input pins |
||
|
|
Event to process. |
|
|
Value to add to the payload of |
Output pins |
||
|
|
Processed event with the payload added. |
+ all common properties |
||
When the node is disabled, no payload is added to the incoming event, which is passed-through unchanged.
Troubleshooting: You cannot use this node in the event-graph ! If you want to append a payload to an event flowing through the event-graph, you will have to create a dummy passthrough layer (insert a "layer" node on the existing event wire) that will take care of re-triggering the event, copying the incoming payload from the parent event, and then append the new payloads you need to add.
EventPayloadAppendLinear / EventPayloadAppendCubic
Scope: Simulation graph.
The PayloadAppendLinear or PayloadAppendCubic nodes inject a new payload into an event, or replace an existing one.
They will use the time-fraction in the current frame at which the event was pulsed to interpolate the payload, using the start/end values, and the start/end tangents if any.
This allows to smoothly interpolate the spawn position within a trail, and to even get bent trajectories using the start/end velocity of the parent particle.
This is only an example, you can interpolate any payload value.
Values of type orientation cannot use the cubic interpolation mode, only linear.
When you create the nodes in-editor, both the Linear and Cubic flavors of this node are in fact presets. There is only a single real EventPayloadAppendInterp node which handles interpolated payloads, and allows you to switch between the different interpolation types.

Property |
Type |
Description |
|
|
Name of the payload data element. |
|
|
Type of the payload data element.
|
|
|
Payload builtin kind
|
|
|
If enabled, no warning will be emitted when overriding a payload element of the same name and type. |
|
|
If enabled, no warning will be emitted when overriding a payload element of the same name but different type. |
|
|
If enabled, no warning will be emitted if this payload element is unused by the layers it triggers in the layergraph. |
|
|
Controls how the payload will be interpolated
|
|
|
When enabled, the orientations will be interpolated with a higher-quality algorithm. |
Input pins |
||
|
|
Event to process. |
|
|
Value of the payload at the start of the time-window (frame). |
|
|
Value of the payload at the end of the time-window (frame). |
|
|
Tangent of the payload at the start of the time-window (frame). |
|
|
Tangent of the payload at the end of the time-window (frame). |
Output pins |
||
|
|
Processed event with the payload added. |
+ all common properties |
||
When the node is disabled, no payload is added to the incoming event, which is passed-through unchanged.
EventPayloadClear
Scope: Simulation graph.
Erases one or all payload elements from the incoming event wire.
Property |
Type |
Description |
|
|
If enabled, will remove all payload elements. |
|
|
Name of the payload element to remove. Ignored if |
Input pins |
||
|
|
Event to process. |
Output pins |
||
|
|
Processed event. |
+ all common properties |
||
When the node is disabled, the original Signal event is passed-through unchanged.
EventPayloadCopy
Scope: Simulation graph.
Copies all payloads from one event wire to another.

Input pins |
Type |
Description |
|
|
Event to copy the payloads into. |
|
|
Event to copy the payloads from. |
Output pins |
||
|
|
Processed event. |
+ all common properties |
||
When the node is disabled, the original Signal event is passed-through unchanged.
EventPayloadExtract
Scope: Simulation graph.
This node performs the reverse operation of the EventPayloadAppend node: It extracts a payload from an existing event.
This is usually used inside layers to extract the payloads sent by the parent event and wire them into the simulation computations.

Property |
Type |
Description |
|
|
Name of the payload data element. |
|
|
Type of the payload data element.
|
|
|
Payload builtin kind.
|
|
|
If enabled, no warning will be emitted if this payload element is not found in the input event link. Any numeric payload not found but still extracted evaluates to zero. |
|
|
If checked, overrides |
|
|
If enabled, removes that element from the payload. |
Input pins |
||
|
|
Event to process. |
|
|
Value to output in the output |
Output pins |
||
|
|
Input event passed-through, with the payload removed if |
|
|
Value extracted from the event payload. |
|
|
|
+ all common properties |
||
When the node is disabled, no payload is extracted from the incoming event, the Value pin behaves as if it was unplugged from whatever it is plugged in.
EventPayloadExtractLinear / EventPayloadExtractCubic
Scope: Simulation graph.
These node perform the reverse operation of the EventPayloadAppendLinear / EventPayloadAppendCubic nodes: They extract a payload from an existing event.
This can only be used to extract a payload from the same layer, coming from an EventGenerator node, so its use is limited.
It’s only useful to grab payload interpolation parameters that were added inside a template node you don’t have access to and can’t modify (ex: from the corelib, or from your studio’s template library).

Property |
Type |
Description |
|
|
Name of the payload data element. |
|
|
Type of the payload data element.
|
|
|
Payload builtin kind.
|
|
|
If enabled, no warning will be emitted if this payload element is not found in the input event link. Any numeric payload not found but still extracted evaluates to zero. |
|
|
If checked, overrides |
|
|
If enabled, removes that element from the payload. |
|
|
Controls which interpolation parameters to extract.
|
Input pins |
||
|
|
Event to process. |
|
|
Value to output in the output |
Output pins |
||
|
|
Input event passed-through, with the payload removed if |
|
|
Value extracted from the event payload. |
|
|
|
+ all common properties |
||
When the node is disabled, no payload is extracted from the incoming event, the Value pin behaves as if it was unplugged from whatever it is plugged in, and the Found pin outputs false.
EventStart
Scope: Event graph.
Brings events pulsed from a Timeline into the event graph. One event will be pulsed out of the EventStart node for each event keyframe present in the timeline referenced by the node.
The pulsed event will contain all the payloads specified in the original timeline keyframe.

Property |
Type |
Description |
|
|
Name of the timeline track events should be pulsed from |
Output pins |
||
|
|
Outgoing event. |
+ all common properties |
||
When the node is disabled, no events are pulsed.
EventTrigger
Scope: Simulation graph.
The event trigger node takes a bool condition, and pulses an event whenever it is true.
It is evaluated every frame, meaning that if the condition is true during multiple consecutive frames, it will trigger one event per frame, until the condition becomes false.
When the Condition input is a Spawn value, and the node is not forced to Evolve, the evaluation will happen only once at spawn.
It cannot pulse multiple events per frame, making it unsuitable for things like spawning trails.
To pulse multiple events per frame, use the EventGenerator node instead.
To pulse an event only once, use the TriggerOnce node from the core library.
Input pins |
Type |
Description |
|
|
Tells the trigger node whether or not to pulse an event. |
|
|
Time fraction within the simulation frame at which the event should be pulsed. |
Output pins |
||
|
|
Outgoing event. |
+ all common properties |
||
When the node is disabled, no events are pulsed.