Quick answer: Enable Generate Mesh Distance Fields on each static mesh and Affect Distance Field Lighting on each placed actor. Niagara GPU collision uses the scene’s distance field, not traditional physics.
A GPU particle system spawns sparks that should bounce off walls. The Collision module is configured. Sparks pass through walls as if nothing is there. GPU particles don’t do physics queries; they collide against the Distance Field.
GPU vs CPU Collision
Niagara emitters have CPU and GPU simulation modes. Collision behaves differently:
- CPU: Collision module does real physics traces. Works against any physics collider. Slower per particle.
- GPU: Collision module reads the Global Distance Field (SDF). Faster (millions of particles work). Only sees mesh actors that contribute to the SDF.
Enable SDF Contribution
For each static mesh asset that should collide:
- Open the static mesh asset.
- In Build Settings, enable Generate Mesh Distance Fields.
- Apply Changes; let it rebuild.
For each placed StaticMeshActor in the level:
- Select the actor.
- Details → Rendering → Affect Distance Field Lighting = true.
Project-Level Distance Field
In DefaultEngine.ini:
[/Script/Engine.RendererSettings]
r.GenerateMeshDistanceFields=True
r.DistanceFieldShadowing=True
Without these, the engine doesn’t allocate the SDF buffers globally. GPU collision can’t function.
Verify with SDF Visualizer
In the viewport: Show → Visualize → Mesh Distance Fields. The scene renders as the SDF representation. Walls that should collide should appear as solid shapes. Missing walls = SDF contribution disabled on those meshes.
Particle Collision Quality
SDF is a coarse approximation. Tiny features (mesh detail less than ~10 cm) get smoothed away. For precise collisions on small objects, use CPU emitters with the physics-trace Collision module.
Verifying
Trigger the effect near a wall. Sparks should bounce off correctly. View the SDF in Show menu to confirm the wall is captured. If the SDF is empty where the wall should be, the mesh’s SDF settings are off.
“GPU Niagara collision is SDF-based. Enable distance field generation on meshes and on the project.”
For dynamic geometry, SDF isn’t updated continuously — GPU particles ignore dynamically-moved actors. Switch to CPU emitter for moving collider scenarios.