<?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, 12 Oct 2026 22:19:45 GMT</lastBuildDate><atom:link href="https://issues.unrealengine.com/bugs" rel="self" type="application/rss+xml"/><item><title><![CDATA[Deadlock in URigHierarchy]]></title><description><![CDATA[<p>We are regularly hitting a deadlock on 5.8.3.</p>

<p>We have one background worker evaluating an animation, holding the RigHierarchy's ElementsLock and waiting for the global GC lock</p>

<p>And one Background worker inside garbage collection holding up the release of the global GC lock and calling `URigHierarchy::AddReferencedObjects(UObject *, FReferenceCollector &amp;)`, which tries to lock ElementsLock.</p>




<p>This occurs basically 100% for us when playing for a reasonable amount of time, please advise on a fix.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-402200</link><guid isPermaLink="false">UE-402200</guid></item><item><title><![CDATA[Mass instanced skinned mesh sweep removes instances without freeing their ASTP tracks]]></title><description><![CDATA[<p>When an entity stops being batched into an instanced skinned mesh component, the "Collect unwanted items &amp; remove" sweep removes its instance, but never frees its ASTP track. Only ProcessRemovesForComponent calls DeallocateTrack, and outside the stationary ISM switcher and its destructor nothing in MassRepresentation calls RemoveInstance. So for a moving entity the sweep is the only way out of a component, and every despawn, LOD change or significance range change leaves a track behind.</p>




<p>The leaked track stays active, so it is still uploaded every frame, and it keeps its last sequence index. Once that sequence is released with DeallocateSequence, the ensure fires and the track is left pointing at a freed slot.</p>




<p>This is the non-external-ID path. The sweep is the same in //UE5/Main MassVisualizationComponent.cpp#74 (around line 951) and //UE6/Main #12 (around line 1069). We are on 5.8 with 57928894 and 58169258 cherry-picked from UE5/Main, which is where AllocateSequence and DeallocateSequence come from.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-401320</link><guid isPermaLink="false">UE-401320</guid></item><item><title><![CDATA[Mutable Material Switch node not working]]></title><description><![CDATA[<p>When using the Material Switch node in Mutable (UE5.8), I do not seem to get pins to wire in my Materials to switch between. Other switch nodes like Mesh Switch seem to work fine.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-401262</link><guid isPermaLink="false">UE-401262</guid></item><item><title><![CDATA[Substrate: FPrimitiveViewRelevance::operator|= bitwise-ORs SubstrateUintPerPixel, inflating the per-pixel byte count and asserting under the blendable GBuffer]]></title><description><![CDATA[<p>A crash can occur due to this check in Substrate.cpp when a material with 2 units and a material with 5 (20 bpp) uints are combined triggering :</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>check(CurrentMaxBytesPerPixel &lt;= PlatformSettingsBytesPerPixel);</pre>
</div></div>



<p>This can happen with Niagara vfx that has two or more emitters whose materials compile to Substrate uint counts that bitwise OR above the maximum, with blendable Substrate enabled and r.Substrate.ProjectGBufferFormat=0.  The base class FMaterialRelevance operator|= function applies Max() to SubstrateUintPerPixel but the derived class FPrimitiveViewRelevance operator|= does not. When a material with 2 units and a material with 5 (20 bpp) uints are combined with | it results in 7 (28 bpp) which triggers the check().  A potential workaround is to add the missing Max():</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>	/** Bitwise OR operator. Sets any relevance bits which are present in either. */
	FPrimitiveViewRelevance&amp; operator|=(const FPrimitiveViewRelevance&amp; B)
	{
	 const uint32 LocalSubstrateUintPerPixel = SubstrateUintPerPixel;
     
	 // the class is only storing bits, the following avoids code redundancy
	 const uint8 * RESTRICT s = (const uint8*)&amp;B;
	 uint8 * RESTRICT d = (uint8*)this;
	 for(uint32 i = 0; i &lt; sizeof(*this); ++i)
	 {
	 *d = *d | *s; 
	 ++s;++d;
	 }

	 SubstrateUintPerPixel = FMath::Max(LocalSubstrateUintPerPixel, B.SubstrateUintPerPixel);
	 return *this;
	}</pre>
</div></div>

]]></description><link>https://issues.unrealengine.com/issue/UE-400816</link><guid isPermaLink="false">UE-400816</guid></item><item><title><![CDATA[[SSAM]Textures that are still compiling are all counted as UnknownRef]]></title><description><![CDATA[<p>In UE5.8, the texture scale fallback is no longer applied when SSAM is enabled. As a result, if a material cannot access its TextureStreamingData when it is loaded, its textures are treated as UnknownRef, which can easily overflow the texture streaming pool.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-400739</link><guid isPermaLink="false">UE-400739</guid></item><item><title><![CDATA[FDebug::EnsureFailed will only broadcast OnHandleSystemEnsure 4 times.]]></title><description><![CDATA[<p>A licensee is reporting that <tt>OnHandleSystemEnsure</tt> will only be broadcasted for the first 4 ensures in the life of the process. This is hardcoded with MaxPreviousErrorsToTrack. The licensee is using Sentry to collect reports and would like to be able to get all unique Ensures. </p>

<p>There should be a way (CVar) to lift the restriction that prevents the Ensures to be reported. </p>



<p>There is also an error in the logic that collects the CRCs which limits the collection further. Duplicated reports should not be added to the array and\or counted toward the limit. </p>]]></description><link>https://issues.unrealengine.com/issue/UE-400736</link><guid isPermaLink="false">UE-400736</guid></item><item><title><![CDATA[Montage preview does not stop the previous montage from another slot group]]></title><description><![CDATA[<p>In the Animation Editor, when you open a montage that uses a different slot group, the previous montage keeps playing in the preview, and its notifies keep firing. If both montages have a section with the same name, loop settings for the new montage are also applied to the old one. UAnimPreviewInstance::RestartMontage calls Montage_Play, which only stops montages in the same slot group.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-400520</link><guid isPermaLink="false">UE-400520</guid></item><item><title><![CDATA[Camera Component - Regression in Unreal 5.7+]]></title><description><![CDATA[<p><ins><b>POST BODY</b></ins>:</p>

<ul>
	<li>Summary<br>
Hey there - I’ve been sticking with Unreal Engine 5.6 for cinematics because of a regression that's been made to CineCameraActors (specifically the CameraComponent nested inside of them) that's been in every version since Unreal 5.7+</li>
</ul>


<p>When using LookAt tracking in a CineCameraActor, the camera aims to keep the target in the exact center of the image. But oftentimes, you’ll want to rotate the camera slightly up, down, left, right etc.</p>

<p>You were able to do this in all versions of Unreal 5.6 and prior by changing the CameraComponent inside of the CineCameraActor. This served as a simple offset to absolutely nail your composition and camera, but it seems like this no longer works in Unreal 5.7+ and I've just confirmed it still doesn't work in Unreal 5.8. If you try to adjust the rotation of the component inside once LookAt tracking is enabled, it simply doesn’t allow you to change the rotation, locking you into center-framing on your offset. </p>

<p>Before 5.7 you could adjust the rotation in the CameraComponent when LookAt tracking was enabled<br>
Now in 5.7+5.8, adjusting the CameraComponent rotation does nothing when LookAt tracking is enabled.</p>

<p>Has anyone found a solution for this or is there a clean way to modify the engine to keep the original behavior of CineCameraActors? This is something I use in 75% of my shots so I’ve been using to Unreal 5.6 and it's prevented me from using the latest version of Unreal for a while. Cheers!</p>

<ul>
	<li>What Type of Bug are you experiencing?<br>
Other</li>
</ul>


<ul>
	<li>Steps to Reproduce<br>
In Unreal 5.7+, enable LookAt tracking and assign an Actor to Track. If you try to open up your cinecameraactor and adjust the CameraComponent nested inside, if you use the rotation sliders or type in a number, they do nothing and always default back to a value of zero.</li>
</ul>


<ul>
	<li>Expected Result<br>
In all previous versions of Unreal, you could use the CameraComponent's rotation to adjust the composition of your camera while using LookAt tracking. I would expect to be able to use the CameraComponent and it's rotation to adjust the final rotation of the camera, but now it does not affect the camera's rotation whatsoever.</li>
</ul>


<ul>
	<li>Observed Result<br>
Every time you attempt to adjust the CameraComponent's rotation, it always snaps back to zero and never rotates the camera as intended.</li>
</ul>


<ul>
	<li>Affects Versions<br>
5.8<br>
5.7</li>
</ul>


<ul>
	<li>Platform(s)<br>
Windows</li>
</ul>


<h6><a name="CREATEDAT%3A10%2F01%2F202603%3A17PMEDT"></a><ins><b>CREATED AT</b></ins>: 10/01/2026 03:17 PM EDT</h6>

<h6><a name="UPDATEDAT%3A10%2F01%2F202603%3A17PMEDT"></a><ins><b>UPDATED AT</b></ins>: 10/01/2026 03:17 PM EDT</h6>]]></description><link>https://issues.unrealengine.com/issue/UE-400509</link><guid isPermaLink="false">UE-400509</guid></item><item><title><![CDATA[No Interface to Assign Modular Control Rigs in Sequencer with Blueprint]]></title><description><![CDATA[<p>To procedurally spawn ControlRigs in the sequencer through custom commands (needed to populate cinematic scenes automatically) we are using the interface provided by Editor Function Libraries, specifically <b>Find or Create Control Rig Track</b> and <b>Expose Control Rig Components</b> nodes requires a ControlRigClass to instantiate with each ControlRig being its own class child of Control Rig. below:</p>




<p>But to instantiate Modular Control Rigs. Modular Control Rigs are all of type ControlRigRuntimeAsset, they are pure data payload, so it is not possible to cast them to a ControlRig class and pass them to this node.</p>




<p>There is no alternative interface provided to be able to do this with Modular Control Rig; not in Blueprint, not in Python.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-400417</link><guid isPermaLink="false">UE-400417</guid></item><item><title><![CDATA[UBT compiler output is garbled when run via UAT (Japanese system locale)]]></title><description><![CDATA[<p>When UnrealBuildTool (UBT) is launched by UAT, for example by RunUAT.bat BuildCookRun <del>build, localized (Japanese) MSVC error messages show up garbled in the console and in UAT's Log.txt. The UBT log (UBA</del>*.txt) contains the correct text.</p>

<p>The cause is an encoding mismatch:</p>

<ul>
	<li>UAT starts UBT with CreateNoWindow = true, so UBT gets a new hidden console that uses the system OEM code page (932 / Shift_JIS). UBT writes its stdout in that code page.</li>
	<li>UAT reads UBT's stdout as UTF-8. Characters that can't be decoded become U+FFFD, so the original text is lost.</li>
</ul>


<h3><a name="Workarounds"></a>Workarounds</h3>

<p>Pass ERunOptions.NoHideWindow to RunUBT (RunUBT function in UBTUtils.cs). UBT then shares UAT's console, so the code pages match. </p>]]></description><link>https://issues.unrealengine.com/issue/UE-400385</link><guid isPermaLink="false">UE-400385</guid></item><item><title><![CDATA[SKP import - Materials missing and incorrect when using Collapse all]]></title><description><![CDATA[<p>Reported in SF [Link Removed]</p>

<p>When importing a .skp model into Twinmotion 2026.2 Preview as Geoemtry, using the Collapse all mode will cause materials to be displayed incorrectly, replacing most materials with a placeholder material.</p>

<p>This does not occur with the Keep Hierarchy collapse mode. Datasmith imports are also not affected. </p>]]></description><link>https://issues.unrealengine.com/issue/TM-23785</link><guid isPermaLink="false">TM-23785</guid></item><item><title><![CDATA[Mutable Chaos Cloth breaks when culling mesh affects mesh sections with cloth]]></title><description><![CDATA[<p>Encountering an issue since we updated to UE5.8 where characters whose cloth mesh sections have vertices culled will cause mesh degradation in editor and crashes in packaged builds.</p>




<p>There are two issues:</p>

<p>1) When some verts are culled from the cloth mesh section, cloth explodes in editor. When this happens in package it can crash</p>




<p>2) If we cull the entire Tshirt so that the mesh underneath the jacket is removed, in editor the transient skeletal mesh shows no clothing data. But in packaged build we get a crash because the mesh section has zero vertices but there cloth data still exists.</p>




]]></description><link>https://issues.unrealengine.com/issue/UE-399655</link><guid isPermaLink="false">UE-399655</guid></item><item><title><![CDATA[GPU Scene reserved resources can break Niagara mesh preview rendering]]></title><description><![CDATA[<p>When a Niagara emitter has multiple Mesh Renderers and each renderer draws a different subset of particles (via Renderer Visibility), all renderers are drawn using the color of particle index 0 in the Niagara Editor preview viewport. Particle transforms (positions) are correct; only the per-particle attributes read in the vertex factory (e.g. Particles.Color) are wrong.</p>

<p>Once the issue occurs, it persists until the editor is restarted. Switching Preview Scene Profiles, toggling Show Environment, or closing and reopening the Niagara asset editor does not fix it. The same Niagara System placed in a level renders correctly in the same editor session.</p>

<p>Work around:</p>

<ul>
	<li>Set r.GPUScene.UseReservedResources=0 in DefaultEngine.ini</li>
	<li>Apply CL 54969077 to the 5.8 engine via cherry-pick.</li>
</ul>
]]></description><link>https://issues.unrealengine.com/issue/UE-399419</link><guid isPermaLink="false">UE-399419</guid></item><item><title><![CDATA[Particle Random Value is the same for all particles with a Niagara Mesh Renderer]]></title><description><![CDATA[<p>A material using the Particle Random Value node returns the same value for every particle<br>
drawn by a Niagara Mesh Renderer. Particle transforms are not affected, only the random value.</p>

<p>This happens when Nanite is disabled for the project and a SceneCapture2D using<br>
"Use ShowOnly List" is present in the level.</p>

<p>It does not reproduce in 5.7. Setting r.GPUScene.UseReservedResources=0, which is the 5.7<br>
default, avoids the issue.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-399300</link><guid isPermaLink="false">UE-399300</guid></item><item><title><![CDATA[[Niagara][5.8] Data Channel Read and Write register with an identical type hash when fx.Niagara.DataChannels.Enabled is set from ini, hitting checkf in FNiagaraTypeRegistry::RegisterTypeInternal]]></title><description><![CDATA[<p><b>Affects:</b> 5.8 (verified on Release-5.8), Windows, Editor</p>

<h2><a name="Summary"></a>Summary</h2>

<p>Adding <tt>fx.Niagara.DataChannels.Enabled=true</tt> to an ini file makes the Niagara editor assert when a Data Channel Read is created. The same operation does not assert when the cvar is left untouched.</p>

<h2><a name="StepstoReproduce"></a>Steps to Reproduce</h2>

<p>Add the following to <tt>&lt;Project&gt;/Config/DefaultEngine.ini</tt>:</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>[ConsoleVariables]
fx.Niagara.DataChannels.Enabled=true</pre>
</div></div>

<p>Then:</p>

<ol>
	<li>Launch the editor and open (or create) a Niagara System / Emitter.</li>
	<li>Create a Data Channel Read.</li>
	<li>The editor hits the checkf described below.</li>
</ol>


<h2><a name="ObservedResult"></a>Observed Result</h2>

<p>Assertion at <tt>Engine/Plugins/FX/Niagara/Source/Niagara/Private/NiagaraTypeRegistry.cpp:331</tt>:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp">bNeedsRegistration = !OldType.IsValid();
checkf(bNeedsRegistration || (NewType == OldType),
    TEXT(<span class="code-quote-red">"bNeedsRegistration: %d, NewType: %s, OldType: %s NewTypeHash: %x OldTypeHash: %x"</span>), ...);</pre>
</div></div>

<p><tt>NewType</tt> and <tt>OldType</tt> are two different types that resolved to the same <tt>RegisteredTypeDefIndex</tt>, and the <tt>NewTypeHash</tt> / <tt>OldTypeHash</tt> values printed by the assert are identical.</p>

<h2><a name="ExpectedResult"></a>Expected Result</h2>

<p>Creating a Data Channel Read does not assert, regardless of whether the cvar was set from an ini file.</p>

<h2><a name="Analysis"></a>Analysis</h2>

<h3><a name="1.RegistrationofthetwoNDCdatainterfaceshappensonlyinsidethecvarchangecallback"></a>1. Registration of the two NDC data interfaces happens only inside the cvar change callback</h3>

<p><tt>Engine/Plugins/FX/Niagara/Source/Niagara/Private/NiagaraModule.cpp:168</tt></p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp"><span class="code-keyword"><span class="code-object">void</span></span> INiagaraModule::OnDataChannelsEnabledChanged(IConsoleVariable* Variable)
{
    ...
    FNiagaraTypeRegistry::Register(UNiagaraDataInterfaceDataChannelWrite::StaticClass(), Flags);
    FNiagaraTypeRegistry::Register(UNiagaraDataInterfaceDataChannelRead::StaticClass(), Flags);</pre>
</div></div>

<p>These are the only <tt>FNiagaraTypeRegistry::Register</tt> call sites for these two classes in the engine — there is no registration in <tt>StartupModule</tt> or anywhere else.</p>

<p>The cvar default is already <tt>true</tt> (<tt>bool INiagaraModule::bDataChannelsEnabled = true;</tt>), so writing <tt>=true</tt> in ini does not change the value, but the ini apply path still calls <tt>Set()</tt> and fires the change callback. The callback therefore runs during early startup, at a point where the <tt>UClass</tt> objects are not yet fully initialized and <tt>StaticClass()-&gt;GetFName()</tt> returns <tt>NAME_None</tt>.</p>

<h3><a name="2.TheruntimetypehashisderivedpurelyfromtheFNamechain"></a>2. The runtime type hash is derived purely from the FName chain</h3>

<p><tt>Engine/Plugins/FX/Niagara/Source/Niagara/Private/NiagaraModule.cpp:1659</tt></p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp"><span class="code-keyword"><span class="code-object">void</span></span> FNiagaraTypeDefinition::GeneratePathNameHash()
{
    if (ClassStructOrEnum)
    {
        UnderlyingTypePathNameHash = GetTypeHash(ClassStructOrEnum-&gt;GetFName());
        <span class="code-keyword">const</span> UObject* Parent = ClassStructOrEnum;
        <span class="code-keyword">while</span> ((Parent = Parent-&gt;GetOuter()) != <span class="code-keyword">nullptr</span>)
        {
            UnderlyingTypePathNameHash = HashCombineFast(UnderlyingTypePathNameHash, GetTypeHash(Parent-&gt;GetFName()));
        }
    }
    <span class="code-keyword">else</span>
    {
        UnderlyingTypePathNameHash = GetTypeHash(NAME_None);
    }
}</pre>
</div></div>

<p><tt>Engine/Plugins/FX/Niagara/Source/Niagara/Public/NiagaraTypes.h:1195</tt></p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp"><span class="code-keyword">friend</span> <span class="code-keyword">inline</span> uint32 GetTypeHash(<span class="code-keyword">const</span> FNiagaraTypeDefinition&amp; Type)
{
    <span class="code-keyword">return</span> HashCombine(HashCombine(Type.UnderlyingTypePathNameHash, GetTypeHash(Type.UnderlyingType)), GetTypeHash(Type.GetFlags()));
}</pre>
</div></div>

<p>The hash has only three inputs. When <tt>GetFName()</tt> returns <tt>NAME_None</tt> the name chain contributes nothing distinguishing, and <tt>UnderlyingType</tt> and <tt>Flags</tt> are identical for the two data interfaces (the same <tt>Flags</tt> value is passed at both call sites). All three inputs therefore match, so <tt>UNiagaraDataInterfaceDataChannelRead</tt> and <tt>UNiagaraDataInterfaceDataChannelWrite</tt> produce the <b>same</b> type hash.</p>

<h3><a name="3.Theregistrydedupesonthathash%2Csothesecondregistrationsilentlyaliasesontothefirst"></a>3. The registry dedupes on that hash, so the second registration silently aliases onto the first</h3>

<p><tt>Engine/Plugins/FX/Niagara/Source/Niagara/Private/NiagaraTypeRegistry.cpp:290</tt></p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-cpp"><span class="code-keyword">const</span> uint32 TypeHash = GetTypeHash(NewType);
...
if (<span class="code-keyword">const</span> int32* ExistingIndex = RegisteredTypeIndexMap.Find(TypeHash))
{
    NewType.RegisteredTypeDefIndex = *ExistingIndex;
}</pre>
</div></div>

<p>Both classes end up sharing a single <tt>RegisteredTypeDefIndex</tt>, i.e. a single entry in <tt>RegisteredTypes</tt>.</p>

<h3><a name="4.Theassertfireswhenacorrectlynamedtypelaterreachesthesharedindex"></a>4. The assert fires when a correctly-named type later reaches the shared index</h3>

<p>When a properly initialized Data Channel Read type reaches <tt>RegisterTypeInternal</tt>, it resolves onto that shared/stale index. <tt>OldType</tt> is valid so <tt>bNeedsRegistration</tt> is false, <tt>NewType != OldType</tt>, and the checkf at <tt>NiagaraTypeRegistry.cpp:331</tt> fires.</p>

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

<ul>
	<li><tt>GetPersistentTypeHash()</tt> in the same header uses <tt>GetPathNameSafe(Type.ClassStructOrEnum)</tt> rather than <tt>GetFName()</tt>, so it does not degrade to <tt>NAME_None</tt>. The runtime <tt>GetTypeHash()</tt> does.</li>
	<li>The checkf message already prints <tt>NewTypeHash</tt> / <tt>OldTypeHash</tt>, which makes the collision directly visible in the assert output.</li>
	<li>The same callback additionally runs {{FNiagaraWorldManager::ForAllWorldManagers([](FNiagaraWorldManager&amp; WorldMan)
{ WorldMan.GetDataChannelManager().Init(); }
<p>)}} and <tt>FNiagaraSystemUpdateContext Context; Context.AddAll(true);</tt> (commented "Re-init everything for now") during this early startup invocation, even though the cvar value did not actually change.</p></li>
</ul>
]]></description><link>https://issues.unrealengine.com/issue/UE-399252</link><guid isPermaLink="false">UE-399252</guid></item><item><title><![CDATA[Light Function and Post Process domain material thumbnails show the default material]]></title><description><![CDATA[<p>Since 5.8, materials whose Material Domain is Light Function or Post Process no longer<br>
preview correctly in the editor. They render as the default material (WorldGridMaterial)<br>
instead of the material itself:</p>

<ul>
	<li>Light Function: both the Content Browser thumbnail and the Material Editor preview<br>
viewport are affected.</li>
	<li>Post Process: only the Content Browser thumbnail is affected. The Material Editor<br>
preview is correct, because a Post Process material is previewed through an<br>
APostProcessVolume blendable rather than on the preview mesh.</li>
</ul>


<p>This is a regression - the same materials preview correctly in 5.7. Light Function<br>
rendering at runtime is unaffected, so the impact is limited to editor workflow: artists<br>
can no longer identify or browse these materials by their auto-generated thumbnails.</p>

<p><b>Workaround</b><br>
Adding the two domains to that check appears to restore the previous preview and<br>
thumbnail behaviour:<br>
Engine/Source/Runtime/Engine/Private/Materials/MaterialInterface.cpp (around line 3057)</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>// if (MaterialDomain != MD_Surface &amp;&amp; MaterialDomain != MD_DeferredDecal &amp;&amp; MaterialDomain != MD_Volume &amp;&amp; MaterialDomain != MD_UI)
if (MaterialDomain != MD_Surface &amp;&amp; MaterialDomain != MD_DeferredDecal &amp;&amp; MaterialDomain != MD_Volume &amp;&amp; MaterialDomain != MD_UI &amp;&amp; MaterialDomain != MD_PostProcess &amp;&amp; MaterialDomain != MD_LightFunction)</pre>
</div></div>]]></description><link>https://issues.unrealengine.com/issue/UE-399018</link><guid isPermaLink="false">UE-399018</guid></item><item><title><![CDATA[ResolvedView.DirectionalLightColor and DirectionalLightDirection go black when one of several directional lights is removed from the scene]]></title><description><![CDATA[<p>With more than one directional light in the scene, <tt>ResolvedView.DirectionalLightColor</tt> and <tt>ResolvedView.DirectionalLightDirection</tt> can report the wrong light, or black and a zero vector, while a directional light is still lighting the scene normally. This was hit in a day/night cycle that swaps between a sun and a moon light. Materials that read these values break during the swap.</p>

<p>Both values come from <tt>FScene::SimpleDirectionalLight</tt>. It is set to the first directional light added to the scene and ignores the rest, whatever their intensity or <tt>ForwardShadingPriority</tt>. When that light is removed, which includes hiding it, the pointer is set to null and never re-picked from the directional lights still in the scene. So the result depends on the order the lights were added, not on which light is actually lighting the scene.</p>

<p>Expected: the values follow the same directional light the renderer already selects every frame (by <tt>ForwardShadingPriority</tt>, then intensity) for forward shading, translucency and volumetric fog, and that the Forward Selected Directional Light material node reads. The height fog and volumetric fog fallbacks read the same pointer and have the same problem. Present in 5.6 through current mainline.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-399013</link><guid isPermaLink="false">UE-399013</guid></item><item><title><![CDATA[Update prepackaged dotnet to latest 10 patch release due to crash on Mac OS.]]></title><description><![CDATA[<p>A dotnet crash occurs sporadically with a sigsev or sigbus when running on Mac OS. This is in the dotnet executable itself, and can happen on commands like `dotnet build`, not just on executing the built assembly. in fact, this seems to be where it is most often seen.</p>




<p>This is happening very infrequently. For one a particular project, it is seem once or twice a week across thousands of dotnet invocations.</p>




<p>Based on an analysis of the dotnet diagnostics it appears to be a manifestation of this issue in dotnet <a href="https://github.com/dotnet/runtime/issues/119761#issuecomment-4780332027" class="external-link" rel="nofollow noreferrer">https://github.com/dotnet/runtime/issues/119761#issuecomment-4780332027</a></p>

<p>This issue is fixed in this change <a href="https://github.com/dotnet/runtime/pull/129763" class="external-link" rel="nofollow noreferrer">https://github.com/dotnet/runtime/pull/129763</a>, but that fix landed after the current version of dotnet in Unreal.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-398886</link><guid isPermaLink="false">UE-398886</guid></item><item><title><![CDATA[Editor hangs for several seconds when closing multiple asset editors]]></title><description><![CDATA[<p>CL 51680020 added an async write in SStandaloneAssetEditorToolkitHost::SaveTabLocation(). This can cause multi-threaded write conflicts on EditorPerProjectUserSettings.ini.<br>
As a result, the file move fails repeatedly and the editor freezes for a while.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-398781</link><guid isPermaLink="false">UE-398781</guid></item><item><title><![CDATA[Widget animations queued before Slate creation are not carried out in UE5.8]]></title><description><![CDATA[<p>We are currently upgrading some of our systems from Unreal 5.6 to Unreal 5.8, and we've noticed an issue with Widget animations. In one of our commonly used actors, a Widget animation is queued in the actor's BeginPlay using QueuePlayAnimation (representing a monitor being switched on). In Unreal 5.6, once the Slate for this widget has been constructed, the animation plays out, and the actor behaves correctly. Unfortunately under Unreal 5.8 this does not happen - the queued animation is being dropped and never plays, meaning that the actor behaves incorrectly.</p>]]></description><link>https://issues.unrealengine.com/issue/UE-398754</link><guid isPermaLink="false">UE-398754</guid></item></channel></rss>