Quick answer: The Mesh Renderer in Niagara requires three things that are easy to miss: a Static Mesh assigned in the Meshes array, a nonzero particle scale, and a material whose Usage flags include Used With Niagara Meshes. If any one is missing, particles spawn silently and draw nothing.

Here is how to fix a Niagara emitter with a Mesh Renderer that spawns particles but draws nothing. The emitter preview shows the right spawn count. The stats panel confirms alive particles. The simulation bounds are visible. Yet the viewport is empty. This is almost always a renderer setup problem, not a simulation problem.

The Symptom

You created a Niagara emitter, switched the default Sprite Renderer to a Mesh Renderer, and assigned a mesh. Particles spawn according to the spawn rate. The Niagara debug overlay shows active particles. But the viewport renders nothing visible. You bump the particle size. Still nothing. You toggle the emitter on and off. Nothing.

If you check the Niagara System stats, you see Num Active Particles: 128 or similar, confirming the simulation works. The CPU and GPU cost columns show the emitter doing work. The only thing not happening is drawing. The log is usually silent — Niagara does not warn you when a renderer has nothing valid to render.

Sometimes one renderer in a multi-renderer emitter is invisible while others work. Sometimes the emitter renders in the preview panel but not in a placed Niagara component in a level. Sometimes it works in the editor but disappears after cooking for shipping.

What Causes This

The Mesh Renderer has more dependencies than the Sprite Renderer. For a sprite, Niagara can fall back to a default material and a unit quad. For a mesh, it needs an explicit Static Mesh, compatible materials, and correctly set particle attributes. When any of these are missing, the renderer silently outputs nothing.

The Meshes array. At the top of the Mesh Renderer module is a Meshes array. Each entry holds a Static Mesh asset pointer, optional material overrides, and an LOD bias. If the array is empty, nothing draws. If the array has entries but the Static Mesh field is null (common after a mesh asset is deleted or renamed), the renderer treats that slot as a skipped draw.

Particle.Scale defaults. Niagara does not apply an implicit scale to meshes the way it does to sprites. If your particle spawn module does not set Particle.Scale, the default value depends on the template you started from — sometimes (1, 1, 1), sometimes (0, 0, 0). A zero scale renders correctly: invisibly tiny meshes.

Material usage flags. Every material in Unreal has a Usage section listing which rendering paths it supports. For particles rendered as meshes, Used With Niagara Meshes must be enabled. If you assign a material that is only marked for Used With Static Lighting or Used With Skeletal Mesh, the shader compiler generates an error variant that falls back to the default material (pink checker) or to invisible depending on version.

bUseStaticMeshes flag. The Mesh Renderer has an internal toggle to switch between static meshes assigned in the array and dynamic meshes sampled from a data interface. Mis-configuration here produces no visible meshes even though the array has entries.

The Fix

Step 1: Confirm the Meshes slot is populated. Open the emitter. In the Selection panel, click the Mesh Renderer. In Details, expand Meshes. The array should have at least one entry. Expand entry 0 and verify:

Step 2: Verify particle scale. Select the Particle Spawn stage. Confirm there is an Initialize Particle or explicit Set [Particle] Scale module that sets Particle.Scale to a nonzero vector. In the Parameters panel, inspect Particle.Scale to confirm its default.

// Example: C++-equivalent of what the Particle Spawn module sets
FVector3f DefaultScale = FVector3f(1.0f, 1.0f, 1.0f);
if (Particle.Scale.IsNearlyZero())
{
  UE_LOG(LogNiagara, Warning, TEXT("Particle scale is zero — mesh will be invisible"));
}

If you use a Set (Particle) Mesh Index module to pick which mesh to draw (for multi-mesh emitters), ensure the index is within bounds of the Meshes array. An out-of-bounds index draws nothing.

Step 3: Check material usage flags. Double-click any material used by the Mesh Renderer or its overrides. Scroll to the Usage section in Details. Enable Used With Niagara Meshes. The material will recompile — wait for shaders to finish.

If you want the material to work on sprites and ribbons too, enable Used With Niagara Sprites and Used With Niagara Ribbons. These flags add shader permutations and cost nothing at runtime; the only downside is slightly longer cook times.

Step 4: Enable facing and sort mode if the geometry suggests billboarding. Some imported meshes have bounds that treat small objects as edge-on to the camera and cull them. Set Facing Mode to Default (never cull on orientation) and Sort Mode to View Distance to avoid z-fighting and to guarantee the particles render in depth order.

Step 5: If nothing still renders, check the component. Sometimes the issue is outside the system. Select the Niagara Component in the level, and in Details verify:

Niagara culls whole systems if the component bounds do not overlap any visible view frustum. If your particles spawn far from the component origin, set Calculate Bounds Mode to Dynamic or increase the fixed bounds.

Why This Works

The Mesh Renderer is a pipeline stage that consumes particle attributes and produces GPU draw calls. It requires a mesh (geometry), a scale (transform), and a material (shader). If any input is invalid, the stage produces no draw calls. Unlike sprites which have safe defaults baked into Niagara, meshes have no implicit fallback because the engine cannot guess a reasonable mesh.

Material usage flags are how Unreal prevents incompatible shader code paths from being compiled for every material in the project. Enabling Used With Niagara Meshes tells the compiler to generate the variant with per-particle transforms baked in; without that variant, the shader simply cannot execute correctly on a mesh particle and the render silently fails.

Related Issues

If Niagara particles spawn but the simulation bounds are wrong and cause culling, see Fix: Unreal Niagara Particles Culled by Bounds.

For Niagara systems that work in the editor but not in packaged builds, see Fix: Unreal Niagara System Not Working in Packaged Build.

Mesh assigned. Scale nonzero. Material flagged Used With Niagara Meshes. Three checkboxes, three invisible bugs.