Quick answer: Mobile Vulkan / Metal must support GPU compute. Enable Mobile GPU Compute in DefaultEngine.ini, or set the emitter sim target to CPU as a fallback.
A particle-heavy mobile game uses Niagara GPU emitters for performance. iOS Metal works; Android shows no particles. Older GPUs/drivers don’t support the required compute paths.
Enable Mobile Compute
// DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.Mobile.SupportGPUParticles=1
r.Mobile.UseHDRPrebufferToggle=1
Project Settings → Rendering → Mobile. Enables compute paths. Some devices still won’t support.
Fallback to CPU
For broad compatibility:
- Set the Emitter Sim Target dropdown in Niagara Editor: CPUSim instead of GPUSim.
- Reduce particle count (CPU is slower per particle).
- Or duplicate the emitter: GPU version for capable devices, CPU version for fallback, toggle via SetVariableBool.
Device Capability Check
if (GRHISupportsAtomicUInt64) {
SpawnSystem(GPUSystem);
} else {
SpawnSystem(CPUSystem);
}
Branch on capability at runtime. GRHISupportsAtomicUInt64 is one of the flags Niagara requires for GPU sim.
Profile on Device
Use stat gpu and stat niagara on device. GPU emitters that fall back to CPU show 0 in the GPU column and high cost in CPU.
Verifying
Run on representative Android devices. Particles render. Frame rate stable. No crashes from missing compute features.
“Mobile GPU compute is uneven. Test on target devices, fall back to CPU when needed.”
For Android shipping, build a device matrix: Adreno 5xx, 6xx, 7xx, Mali variants. Capability differs enough that one test device isn’t enough.