Quick answer: Source emitter Particle Update → add Collision module with Generate Events enabled. Receiver emitter → Event Handler with Source = source emitter, Event Type = Collision. Receive Collision Event reads position/normal.

Spark particles bounce off walls (collision works visually) but the secondary smoke emitter never spawns at hit points. Events aren’t firing.

The Symptom

Niagara particles collide correctly but downstream events don’t produce sub-particles. Or some events fire and some don’t.

The Fix

Source emitter:

Particle Update:
  + Collision (CPU or GPU)
      Generate Events:    true
      Bounce:             true (optional)
      Friction:           0.3

Receiver emitter:

Event Handler Properties:
  Source:           SparkEmitter
  Event Type:       Collision
  Spawn Behavior:   Spawn one per event

Particle Spawn:
  + Receive Collision Event
      Position:    -> Particles.Position
      Velocity:    -> Particles.Velocity

Generate Events from source. Event Handler on receiver. Read payload in Particle Spawn.

CPU vs GPU

CPU collision uses Unreal’s standard collision channels. Most reliable for events. GPU collision (depth buffer or distance fields) is faster but events from GPU emitters may have latency or limited fidelity in older UE versions.

Verifying

Console: fx.Niagara.Debug.PrintEvents 1. Logs each emitted event with payload. Confirms source generates and receiver consumes.

“Generate on source. Handler on receiver. Events propagate.”

Related Issues

For Niagara CPU/GPU readback, see CPU/GPU readback. For Niagara mesh attribute, see mesh attribute.

Generate. Handle. Receive.