Quick answer: Send block: Source Attribute = Position. Receiver Init: Inherit Source Attribute Position with non-zero blend.

Sparks emitter sends a GPUEvent on death. Smoke emitter spawns at world origin instead of the spark’s position. Position attribute wasn’t set on the send.

The Fix

Sparks emitter:
  Particle Update:
    + Trigger Event Always (or on death):
        Set Position from Self
  Output: GPUEvent (Send)
    Source Attribute: Position

Smoke emitter:
  Init:
    + Inherit Source Position (1.0)   // from Sparks event
    + Set Lifetime, Velocity etc.

Send writes the source attribute to the event payload. Inherit pulls it into the receiver’s init. Custom attributes work the same way.

Verifying

Spark dies; smoke spawns at the spark’s last position. Without Inherit: smoke spawns at receiver’s origin.

“Send sets. Receiver inherits. Cascade aligns.”

Related Issues

For VFX strip collapse, see strip. For spawn over distance, see distance.

Set source. Inherit. Cascade aligns.