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:

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.