Hi everyone ,
Since upgrading to UE 5.4.2 and enabling tessellation in my project, as well as converting my landscape to Nanite, I’ve been experiencing frequent crashes. The crash details are as follows:
Runnable thread Foreground Worker #1 crashed.
=== Critical ===
Assertion failed: !RasterizerPass.ClusterComputeShader.IsNull() [File:D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\Nanite\NaniteCullRaster.cpp] [Line: 3905]
[Callstack] 0x00007ffb38427601 UnrealEditor-Renderer.dll!`FPixelShaderUtils::AddRasterizeToRectsPass<FNaniteMarkStencilPS,FNaniteMarkStencilRectsParameters>'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\Nanite\NaniteCullRaster.cpp:3905]
[Callstack] 0x00007ffb3842cab0 UnrealEditor-Renderer.dll!`FPixelShaderUtils::AddRasterizeToRectsPass<FNaniteMarkStencilPS,FNaniteMarkStencilRectsParameters>'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\Nanite\NaniteCullRaster.cpp:4051]
[Callstack] 0x00007ffb38428ab2 UnrealEditor-Renderer.dll!`FPixelShaderUtils::AddRasterizeToRectsPass<FNaniteMarkStencilPS,FNaniteMarkStencilRectsParameters>'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Renderer\Private\Nanite\NaniteCullRaster.cpp:4124]
[Callstack] 0x00007ffb38479669 UnrealEditor-Renderer.dll!FRHICommand<FRHICommandPollOcclusionQueries,FRHICommandPollOcclusionQueriesString2138>::ExecuteAndDestruct() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:855]
[Callstack] 0x00007ffb37ccae3e UnrealEditor-Renderer.dll!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:504]
[Callstack] 0x00007ffb37c84804 UnrealEditor-Renderer.dll!LowLevelTasks::TTaskDelegate<LowLevelTasks::FTask * __ptr64 __cdecl(bool),48>::TTaskDelegateImpl<`LowLevelTasks::FTask::Init<`UE::Tasks::Private::FTaskBase::Init'::`2'::<lambda_1> >'::`13'::<lambda_1>,0>::CallAndMove() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\Fundamental\TaskDelegate.h:171]
[Callstack] 0x00007ffba2a124c5 UnrealEditor-Core.dll!LowLevelTasks::FTask::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\Fundamental\Task.h:627]
[Callstack] 0x00007ffba2a121ff UnrealEditor-Core.dll!LowLevelTasks::FScheduler::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:155]
[Callstack] 0x00007ffba2a3a155 UnrealEditor-Core.dll!LowLevelTasks::FScheduler::WorkerMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\Fundamental\Scheduler.cpp:397]
[Callstack] 0x00007ffba2a023d0 UnrealEditor-Core.dll!UE::Core::Private::Function::TFunctionRefCaller<`LowLevelTasks::FScheduler::CreateWorker'::`2'::<lambda_1>,void __cdecl(void)>::Call() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Templates\Function.h:406]
[Callstack] 0x00007ffba2c07c93 UnrealEditor-Core.dll!FThreadImpl::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\HAL\Thread.cpp:69]
[Callstack] 0x00007ffba306c93d UnrealEditor-Core.dll!FRunnableThreadWin::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:149]
[Callstack] 0x00007ffba30602b7 UnrealEditor-Core.dll!FRunnableThreadWin::GuardedRun() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:79]
[Callstack] 0x00007ffc5ec7257d KERNEL32.DLL!UnknownFunction []
Turning off Nanite tessellation resolves the issue, but I would prefer not to disable this awesome feature (I’ve missed it since UE4).
The crashes occur when I open my world partition map (happens the moment the map opens) or when I run the packaged game (again, right when the level opens). It does not crash every time, but rather occasionally, and without any visible pattern.
I’ve found that tweaking the following values can somewhat mitigate the frequency of crashes, but I haven’t been able to eliminate them completely:
r.Nanite.MaxVisibleClusters=10485760 ; [default: 4194304]
r.Nanite.MaxCandidateClusters=16777216 ; [default: 16777216] Maximum number of Nanite clusters before cluster culling.
r.Nanite.MaxNodes=10485760 ; [default: 2097152]
EDIT 1: See my second post for a more detailed breakdown of conducted tests.
One of my observations is that setting r.Nanite.DicingRate
to 1 in stat NaniteStreaming
results in the fewest Page Requests, but it significantly increases the number of clusters. On the other hand, when I set it to 4, the visuals look fine and there are fewer clusters, but the number of Page Requests goes up. How should I interpret this?
Lastly, is it normal for the Nanite Triangles debug view to be this dense, or could there be something wrong with it?
Has anyone else experienced this issue or found a solution? Any help or suggestions would be greatly appreciated!
Thank you in advance!
Thomas Winged