<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Unreal Engine Issues - Latest Bugs]]></title><description><![CDATA[Latest Bugs and Feature Requests For Unreal Engine.]]></description><link>https://issues.unrealengine.com</link><image><url>https://issues.unrealengine.com/favicon.png</url><title>Unreal Engine Issues - Latest Bugs</title><link>https://issues.unrealengine.com</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 08 Jun 2026 18:12:24 GMT</lastBuildDate><atom:link href="https://issues.unrealengine.com/bugs" rel="self" type="application/rss+xml"/><item><title><![CDATA[Mutable Dataless Generation - Regenerate Imported Models Crash]]></title><description><![CDATA[<p>Crash when  working with Dataless Mutable content. When selecting meshes in the instance, there is a crash in <em>RegenerateImportedModels</em>.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-383496</link><guid isPermaLink="false">UE-383496</guid></item><item><title><![CDATA[Crash editing Primary Assets Label in ShooterGame assets in 5.8]]></title><link>https://issues.unrealengine.com/issue/UE-383372</link><guid isPermaLink="false">UE-383372</guid></item><item><title><![CDATA[Niagara NDC GPU Instance Counter leak]]></title><description><![CDATA[<p>In <tt>NiagaraDataChannelData.cpp</tt>, <tt>FNiagaraDataChannelDataProxy::EndFrame</tt> enqueues a GPU readback for each entry in <tt>PendingGPUReadbackBuffers</tt>, but the corresponding <tt>FNiagaraGPUInstanceCountManager::FreeEntry</tt> call is commented out with the intent of deferring the release to the next frame. (See <tt>NiagaraDataChannelData.cpp</tt> L740+)</p>

<p>The deferred-release path was never wired up (BeginFrame's loop over <tt>PendingGPUReadbackBuffers</tt> is unreachable because EndFrame calls <tt>PendingGPUReadbackBuffers.Reset()</tt> before the next BeginFrame can see the entries). </p>

<p><tt>EnqueueReadback()</tt> itself does not free the offset either. It only uses the offset to read from the count buffer. As a result, every GPU readback path through an NDC Writer DI permanently leaks one entry from <tt>FNiagaraGPUInstanceCountManager</tt>. <tt>UsedInstanceCounts</tt> has no decrement path, so the stat "Used GPU Instance Counters" grows monotonically.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-383224</link><guid isPermaLink="false">UE-383224</guid></item><item><title><![CDATA[Water plugin's RVT/ISR shader permutations fail PSO creation with instanced stereo (D3D12 SM6)]]></title><description><![CDATA[<p>With Instanced Stereo Rendering enabled and the Water plugin enabled (default), PSO precaching speculatively compiles WorldGridMaterial × FWaterVertexFactory* permutations for the Runtime Virtual Texture pass. These PSO creations fail at D3D12 with E_INVALIDARG. The failures are non-fatal (precached PSOs that never get drawn), but the D3D12 debug layer logs them continuously.</p>



<p>Removing the Water plugin eliminates the errors entirely. No water assets exist in the level — this is purely the precacher walking the plugin's registered VF permutations against materials in the cook set.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-383023</link><guid isPermaLink="false">UE-383023</guid></item><item><title><![CDATA[UBackgroundBlur crashes at PSO creation under D3D12 SM6 when stereo rendering is enabled]]></title><description><![CDATA[<p>Any Slate widget that triggers the Slate post-process blur (e.g., a UBackgroundBlur with non-zero strength) hits a fatal D3D12 CreateGraphicsPipelineState failure on first render. The fatal is funneled through PipelineStateCache.cpp:707 ("Shader compilation failures are Fatal"), but the underlying error is E_INVALIDARG (0x80070057) from a VS/PS signature linkage mismatch, not an HLSL compile error.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-383022</link><guid isPermaLink="false">UE-383022</guid></item><item><title><![CDATA[Crash in UWidgetAnimation::CreateDirectorInstance when switching resolution]]></title><description><![CDATA[<p>Hello,</p>

<p>We've encountered a crash in UWidgetAnimation::CreateDirectorInstance when repeatedly switching resolutions. We've had it for a while but it's not until recently that we've found a consistent repro.</p>




<p>Our understanding is that it's a lifetime issue. Sequence of events:</p>




<ol>
	<li>Viewport resizing triggers Slate to rebuild its widgets</li>
	<li>Some widget with an active animation gets destroyed/marked for delete</li>
	<li>UMGSequenceTickManager::ForceFlush is called</li>
	<li>During Flush MovieSceneEventSystem::TriggerEvents fires</li>
	<li>Consequently CreateDirectorInstance is called on UWidgetAnimation</li>
	<li>GetPlaybackContex() returns null</li>
	<li>CastChecked LogFatal (crash)</li>
</ol>
]]></description><link>https://issues.unrealengine.com/issue/UE-382532</link><guid isPermaLink="false">UE-382532</guid></item><item><title><![CDATA[Instanced Actors: PCG on RuntimeGrid "None" assigns created IAManagers RuntimeGrid "MainGrid", causing cross-grid reference]]></title><description><![CDATA[<p><b>Context</b></p>

<p>PCG can be used to spawn Instanced Actors via the PCG IA Interop plugin, that makes Spawned Instanced Actors available as node. When a PCGActor placed in the level runs a PCG graph that spawns Instanced Actors, this creates Instanced Actors Managers with instances.</p>

<p><b>Problem</b></p>

<p>The created Instanced Actor Manager actors get <em>MainGrid</em> assigned as Runtime Grid, even if the PCGActor that spawned them didn’t have a Runtime Grid value (i.e. its <em>None</em>). Next time the map is loaded, this results in error messages:</p>

<blockquote><p>Actor /Game/MAP_ReproPCG.PCG_PlaceInstancedActors references an actor in a different runtime grid /Game/MAP_ReproPCG.InstancedActorsManager_-1_-1_0<br>
Actor /Game/MAP_ReproPCG.PCG_PlaceInstancedActors references an actor in a different runtime grid /Game/MAP_ReproPCG.InstancedActorsManager_0_-1_0<br>
Actor /Game/MAP_ReproPCG.PCG_PlaceInstancedActors references an actor in a different runtime grid /Game/MAP_ReproPCG.InstancedActorsManager_-1_0_0<br>
Actor /Game/MAP_ReproPCG.PCG_PlaceInstancedActors references an actor in a different runtime grid /Game/MAP_ReproPCG.InstancedActorsManager_0_0_0 </p></blockquote>

<p><b>Suggested Fix</b></p>

<p>The PCG actor and spawned IAMs runtime grids should match. If the PCG actor had it set to None, perhaps leave the IAMs value as None as well.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-382301</link><guid isPermaLink="false">UE-382301</guid></item><item><title><![CDATA[Instanced Actors: Moving element in editor is not undoable]]></title><description><![CDATA[<p><b>Context</b></p>

<p>Instanced Actors can be moved by unchecking Lock Instance Locations on an IAM, and double-clicking into the actor → comp → instance to select an instance.</p>

<p><b>Problem</b></p>

<p>Moving an IA via the gizmo isn’t properly recorded as an undoable/redoable transaction. It can’t be undone or redone.</p>

<p><b>Suggested Fix</b></p>

<p>For user friendliness, the action should be undoable.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-382300</link><guid isPermaLink="false">UE-382300</guid></item><item><title><![CDATA[Instanced Actors: Editor preview don't show correct relative mesh transforms]]></title><description><![CDATA[<p><b>Context</b></p>

<p>Actors can be converted into Instanced Actors via the IA plugin. During runtime and in the editor, an instanced actor’s visual is generated from the collection of StaticMeshComponents on the actor blueprint.</p>

<p><b>Problem</b></p>

<p>Any non-uniform transforms of StaticMeshComps on the actor blueprint aren’t correctly previewed in the editor. Instead, the IA representation in editor shows all meshes with the identity transform, albeit the IA’s location is correct. The relative transform from actor to mesh isn’t correctly previewed. See screenshots and repro project.</p>

<p><b>Suggested Fix</b></p>

<p>The relative transform should be correctly previewed.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-382299</link><guid isPermaLink="false">UE-382299</guid></item><item><title><![CDATA[Backout attempted fix for - AutoSize triggers ensure on shortened Skel Anim Section moved past anim length]]></title><description><![CDATA[<p>In Sequencer, calling "Edit &gt; Auto Size" on a UMovieSceneSkeletalAnimationSection triggers the LowerBound &gt; UpperBound ensure in UMovieSceneSection::SetRange (MovieSceneSection.h:333) when the section has been shortened below the animation length and then moved so that its start frame is beyond the animation length.</p>

<p>Root cause is in UMovieSceneSkeletalAnimationSection::GetAutoSizeRange (MovieSceneSkeletalAnimationSection.cpp:337). It calls InnerToOuterTransform.TryTransformTime(InnerEndTime).Get(InnerEndTime), and when the inverse transform fails to map InnerEndTime to an outer time (because the value is outside the Inner Clamp or Inner Loop range), the .Get(InnerEndTime) fallback returns the raw inner-tick value. That value is then used as if it were an outer-tick value in GetInclusiveStartFrame() + (OuterEndTime - OuterStartTime).FrameNumber, mixing inner-tick and outer-tick values and producing a negative or otherwise invalid length. SetRange then refuses the range and Auto Size has no effect.</p>

<p>This behavior was introduced by CL 40829088 (
    <span class="jira-issue-macro resolved" data-jira-key="UE-254882">
                [Link Removed]
                                                    <span class="aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf">Closed</span>
            </span>
, fixed in 5.6), which replaced the previous TOptional check with a .Get(fallback) pattern.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-382288</link><guid isPermaLink="false">UE-382288</guid></item><item><title><![CDATA[Assert crash when playing Groom Cache with Card Mesh LOD ]]></title><description><![CDATA[<p>Playing a <b>Guides</b> Groom Cache while <b>Card Mesh LOD (Guide-Based)</b> is active causes an assert in <tt>RunHairStrandsInterpolation_Cards</tt> when the renderer switches to Card LOD.</p>

<p><b>Assert location:</b> <tt>Plugins/Runtime/HairStrands/Source/HairStrandsCore/Private/GroomManager.cpp:2011</tt></p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>check(InstanceData.CardInstance-&gt;Guides.RestResource);</pre>
</div></div>

<p><b>Root cause:</b><br>
Card LOD guide resources are not created when only Groom Cache drives deformation (no simulation, graph deformer, global interpolation, or skinning binding).</p>

<p>In <tt>GroomComponent.cpp</tt> (~line 3219), <tt>bNeedDeformedPositions</tt> for Card LOD omits <tt>bIsSimulationCacheEnable</tt>:</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>const bool bNeedDeformedPositions = bHasSimulation || bHasDeformation || bHasGlobalDeformation || BindingType == EHairBindingType::Skinning;</pre>
</div></div>

<p>When this is false, <tt>InstanceLOD.Guides.RestResource</tt> and related Card LOD guide resources are never assigned (~lines 3256–3277).</p>

<p><b>Proposed fix:</b><br>
Add Groom Cache to Card LOD initialization in <tt>GroomComponent.cpp</tt>:</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>const bool bNeedDeformedPositions =
    bHasSimulation || bHasDeformation || bHasGlobalDeformation
    || BindingType == EHairBindingType::Skinning
    || HairGroupInstance-&gt;HairGroupPublicData-&gt;bIsSimulationCacheEnable;</pre>
</div></div>]]></description><link>https://issues.unrealengine.com/issue/UE-382081</link><guid isPermaLink="false">UE-382081</guid></item><item><title><![CDATA[Niagara Mesh Renderer registers NumParticles x NumMeshVariants TLAS instances]]></title><description><![CDATA[<p>When using the Niagara Mesh Renderer with multiple mesh variants selected via MeshIndex, the number of TLAS instances allocated  is NumParticles × NumMeshVariants and enabling the Path Tracer can cause a 24-bit InstanceId overflow:</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>Ensure condition failed: InstanceDesc.InstanceId &lt;= 0xFFFFFF
[File: RayTracingInstanceBufferUtil.cpp] [Line: 316]
InstanceId must fit in 24 bits.</pre>
</div></div>

<h3><a name="RootCause"></a>Root Cause</h3>

<p><tt>GetDynamicRayTracingInstances()</tt> in <tt>NiagaraRendererMeshes.cpp</tt> (line ~1660) force-disables sort/cull for the RT path:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp">ParticleMeshRenderData.bNeedsSort = <span class="code-keyword">false</span>;
ParticleMeshRenderData.bNeedsCull = <span class="code-keyword">false</span>;
ParticleMeshRenderData.bSortCullOnGpu = <span class="code-keyword">false</span>;</pre>
</div></div>

<p>This causes <tt>PerformSortAndCull()</tt> to return the total particle count for every mesh variant,. Each mesh variant creates an <tt>FRayTracingInstance</tt> with <tt>NumTransforms</tt> set to all particles.  The total TLAS instances is NumParticles × NumMeshVariants. The raster path handles this correctly via <tt>SortAndCullIndices</tt> / <tt>FNiagaraSortCullHelper::IsVisibile()</tt> which filters by MeshIndex.</p>

<p>The InstanceId is set to <tt>InstanceSceneDataOffset + TransformIndex</tt> with <tt>bIncrementUserDataPerInstance = true</tt> (in <tt>PrimitiveSceneInfo.cpp:SetupCachedRayTracingInstance</tt>), which can exhausts the 24-bit DXR InstanceId space.</p>

<h3><a name="AdditionalNotes"></a>Additional Notes</h3>

<ul>
	<li>Path Tracer disables RT instance culling (<tt>RayTracingInstanceCulling.cpp:71</tt>), so all ghost instances are included in the TLAS.</li>
	<li>Temporal samples do NOT multiply the instance buffer — the TLAS is built once per frame.</li>
	<li><tt>CalculateMeshUsed()</tt> already scans particles to determine which meshes are active, but only produces a boolean per variant, not a count. It also only works for CPU sims.</li>
</ul>


<h3><a name="PotentialFix"></a>Potential Fix</h3>

<p>Re-enable MeshIndex culling for the RT path. For CPU sims, the existing <tt>FNiagaraSortCullHelper</tt> already filters by MeshIndex — remove the force-disable in the RT path and call <tt>InitializeSortInfo</tt> before <tt>PerformSortAndCull</tt>. For GPU sims, a lightweight count pass or one-frame-latent readback of per-variant counts would be needed since particle data is not CPU-accessible.</p>

<h3><a name="AffectedCode"></a>Affected Code</h3>

<ul>
	<li><tt>Engine/Plugins/FX/Niagara/Source/Niagara/Private/NiagaraRendererMeshes.cpp</tt> — <tt>GetDynamicRayTracingInstances()</tt></li>
</ul>
]]></description><link>https://issues.unrealengine.com/issue/UE-381970</link><guid isPermaLink="false">UE-381970</guid></item><item><title><![CDATA[GameplayTagEventMap is cleared on clients when "AbilitySystem.Fix.ReplicateTagCountContainerWithIris" is enabled]]></title><link>https://issues.unrealengine.com/issue/UE-381939</link><guid isPermaLink="false">UE-381939</guid></item><item><title><![CDATA[[Sequencer MRQ] Spatialized audio is not heard in MRQ renderings]]></title><description><![CDATA[<p>Per customer case: <span class="error">&#91;25102237 | Case | Salesforce|https://epicgames.lightning.force.com/lightning/r/Case/500QP00001V41PqYAJ/view&#93;</span></p>

<p>Audio that uses an Attenuation to set Spatialized Audio (just positioned, nothing to do with HRTFs or multichannel plugins) does not get rendered with the MRQ files. Initial discovery revealed that the listener is not getting updated correctly in MRQ code. </p>

<p>Slack thread: [Link Removed] </p>]]></description><link>https://issues.unrealengine.com/issue/UE-381932</link><guid isPermaLink="false">UE-381932</guid></item><item><title><![CDATA[PrepareTextureResources is being called repeatedly (on commandlets and potentially other cases)]]></title><description><![CDATA[<ol>
	<li>Implement a commandlet that renders (with `-AllowCommandletRendering`) and frequently calls `CommandletHelpers::TickEngine()`.</li>
	<li>Have the commandlet load a map containing a world-partitioned landscape. The more streaming proxies, the worse the issue.</li>
	<li>Capture performance with UnrealInsights and notice that `ALandscape::PrepareTextureResources` is called every tick for every ALandscapeStreamingProxy (in a highly redundant fashion).</li>
</ol>


<p>Relates to EPS case : [Link Removed] </p>

<p>Relates to Git PR : [Link Removed] </p>]]></description><link>https://issues.unrealengine.com/issue/UE-381906</link><guid isPermaLink="false">UE-381906</guid></item><item><title><![CDATA[Blocky artifacts in right eye when reflection captures are used]]></title><link>https://issues.unrealengine.com/issue/UE-381655</link><guid isPermaLink="false">UE-381655</guid></item><item><title><![CDATA[Sequencer: Expansion State of Animation Track Properties is not saved]]></title><description><![CDATA[<p>The expansion state of Animation Track properties is only saved when Section &gt; Advanced is expanded or collapsed.`</p>]]></description><link>https://issues.unrealengine.com/issue/UE-381517</link><guid isPermaLink="false">UE-381517</guid></item><item><title><![CDATA[AutoSize triggers ensure on shortened Skel Anim Section moved past anim length]]></title><description><![CDATA[<p>In Sequencer, calling "Edit &gt; Auto Size" on a UMovieSceneSkeletalAnimationSection triggers the LowerBound &gt; UpperBound ensure in UMovieSceneSection::SetRange (MovieSceneSection.h:333) when the section has been shortened below the animation length and then moved so that its start frame is beyond the animation length.</p>

<p>Root cause is in UMovieSceneSkeletalAnimationSection::GetAutoSizeRange (MovieSceneSkeletalAnimationSection.cpp:337). It calls InnerToOuterTransform.TryTransformTime(InnerEndTime).Get(InnerEndTime), and when the inverse transform fails to map InnerEndTime to an outer time (because the value is outside the Inner Clamp or Inner Loop range), the .Get(InnerEndTime) fallback returns the raw inner-tick value. That value is then used as if it were an outer-tick value in GetInclusiveStartFrame() + (OuterEndTime - OuterStartTime).FrameNumber, mixing inner-tick and outer-tick values and producing a negative or otherwise invalid length. SetRange then refuses the range and Auto Size has no effect.</p>

<p>This behavior was introduced by CL 40829088 (
    <span class="jira-issue-macro resolved" data-jira-key="UE-254882">
                [Link Removed]
                                                    <span class="aui-lozenge aui-lozenge-subtle aui-lozenge-success jira-macro-single-issue-export-pdf">Closed</span>
            </span>
, fixed in 5.6), which replaced the previous TOptional check with a .Get(fallback) pattern.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-381333</link><guid isPermaLink="false">UE-381333</guid></item><item><title><![CDATA[VSM + Nanite Tessellation + Volumetric Fog Shadow leaking while the Directional lighting is rotating]]></title><link>https://issues.unrealengine.com/issue/UE-381266</link><guid isPermaLink="false">UE-381266</guid></item><item><title><![CDATA[Open Formats: Interchange Import - UCX Convex Hull Import Bug]]></title><description><![CDATA[<p>When importing custom UCX collision meshes from FBX files into Unreal Engine, certain geometry profiles fail to generate correctly if the option "One Convex Hull Per UCX" is unchecked. The engine's collision generation pipeline either creates an "exploded" collision shape with vertices shooting out infinitely into world space, or collapses the hull into a completely solid, simplified block that ignores structural openings such as doors and garage entryways.</p>



<p>See attached PDF for more details. </p>]]></description><link>https://issues.unrealengine.com/issue/UE-381239</link><guid isPermaLink="false">UE-381239</guid></item></channel></rss>