Description

The following Niagara usage pattern results in either a crash or in incorrect data being read from a Particle Attribute Reader:

Emitter Spawn Stage – A module has an Attribute Reader input specified inline, and stores it as an Emitter Attribute "A"
Emitter Update Stage – A module has an Attribute Reader input specified as the Emitter Attribute "A", and stores it in another Emitter Attribute "B"
Particle Spawn Stage – A module accesses the Emitter Attribute "B" directly
Particle Update Stage – A module has an Attribute Reader input specified as the Emitter Attribute "A"

For the last module above (in the Particle Update Stage), if the Attribute Reader is specified inline or as the Emitter Attribute "B", no problem occurs.

The crash is caused by a check() failure inside UNiagaraDataInterfaceParticleRead::SetShaderParameters() - see callstack. At that time, it seems that the attributes obtained from Context.GetShaderStorage<>() are not correct and don't match those obtained through Context.GetProxy<>().GetRenderDataForSystem().

Steps to Reproduce

=== REPRO PROJECT ===

A.1. Open Niagara System "NS_Test_A", based on "AttributeReaderSimple" from the ContentExamples project. The large particle on the right is spawned by the "Source" emitter with a different color each second. The small particles on the left are spawned by the "Reader" emitter, which copies their color from the large particle on the "Particle Update" stage.
A.2. In the preview tab, note that the color of the particles on the left (from the "Reader" emitter) match the color of the particle on the right
A.3. On the "Reader" emitter, on the "Particle Update" stage, disable module "Get Particle Color by ID - Good" and enable module "Get Particle Color by ID - Bad". The only difference is where they get their Attribute Reader reference from.
A.4. In the preview tab, note that the color of the particles no longer match.

B.1. Open Niagara System "NS_Test_B", based on "AttributeReaderStreamers" from the ContentExamples project. One colored leader particle is spawned each second by the "Leaders" emitter. The "Trail" emitter spawns additional particles that serve as a trail for the leader. Their color is copied on the "Particle Update" stage.
B.2. In the preview tab, note that the color of the trail particles match the color of the leader particles
B.3. On the "Trail" emitter, on the "Particle Update" stage, disable module "Update Particles from Other Emitter - Good" and enable module "Update Particles from Other Emitter - Bad". The only difference is where they get their Attribute Reader reference from.
B.4. UE 5.3/5.4/5.5 displays the wrong color on the Trail particles. UE 5.6/latest crashes with the attached callstack.

Callstack

Assertion failed: InstanceData->AttributeIndices.Num() * InstanceData->AttributeIndices.GetTypeSize() == AttributeIndices.Num() * AttributeIndices.GetTypeSize() [Link Removed] [Line: 2245]

UnrealEditor_Core!FDebug::CheckVerifyFailedImpl2() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:728]
UnrealEditor_Niagara!UNiagaraDataInterfaceParticleRead::SetShaderParameters() [D:\build\++UE5\Sync\Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraDataInterfaceParticleRead.cpp:2245]
UnrealEditor_Niagara!FNiagaraGpuComputeDispatch::SetDataInterfaceParameters() [D:\build\++UE5\Sync\Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraGpuComputeDispatch.cpp:2457]
UnrealEditor_Niagara!FNiagaraGpuComputeDispatch::DispatchStage() [D:\build\++UE5\Sync\Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraGpuComputeDispatch.cpp:1698]
UnrealEditor_Niagara!FNiagaraGpuComputeDispatch::ExecuteTicks() [D:\build\++UE5\Sync\Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraGpuComputeDispatch.cpp:1285]
UnrealEditor_Niagara!FNiagaraGpuComputeDispatch::PreInitViews() [D:\build\++UE5\Sync\Engine\Plugins\FX\Niagara\Source\Niagara\Private\NiagaraGpuComputeDispatch.cpp:2005]
UnrealEditor_Engine!FFXSystemSet::PreInitViews() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Particles\FXSystemSet.cpp:131]
UnrealEditor_Renderer!FSceneRenderer::PreVisibilityFrameSetup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneVisibility.cpp:4848]
UnrealEditor_Renderer!FDeferredShadingSceneRenderer::BeginInitViews() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneVisibility.cpp:5714]
UnrealEditor_Renderer!FDeferredShadingSceneRenderer::Render() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\DeferredShadingRenderer.cpp:1732]
UnrealEditor_Renderer!RenderViewFamily_RenderThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:4825]
UnrealEditor_Renderer!TStaticStateRHI<TStaticBlendState<8,0,1,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0>,TRefCountPtr<FRHIBlendState>,FRHIBlendState * __ptr64>::FStaticStateResource::`vector d() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRendering.cpp:5115]
UnrealEditor_Renderer!`FComputeShaderUtils::AddPass<FSceneCullingDebugRender_CS>'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\SceneRenderBuilder.cpp:916]
UnrealEditor_RenderCore!`FRenderCommandPipeRegistry::StopRecording'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:1547]
UnrealEditor_RenderCore!TGraphTask<TFunctionGraphTaskImpl<void __cdecl(void),1> >::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:706]
UnrealEditor_Core!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:527]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:779]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:668]
UnrealEditor_RenderCore!RenderingThreadMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:318]
UnrealEditor_RenderCore!FRenderingThread::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\RenderCore\Private\RenderingThread.cpp:451]
UnrealEditor_Core!FRunnableThreadWin::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:159]

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-350887 in the post.

0
Login to Vote

Unresolved
ComponentUE - Niagara
CreatedOct 28, 2025
UpdatedNov 4, 2025
View Jira Issue