Description

From licensee:

When building and running the package on windows or other platforms, the game stops at an Assert when a particle is being rendered (off screen) from a thread other than the game thread

Console output when Assert is stopped Assertion failed: IsInGameThread () unreal \ Engine \ Source \ Runtime \ Engine \ Private \ Particles \ ParticleComponents.cpp] [Line: 4922]

The timing of rough processing until offscreen rendering is as follows.

1. The actor deciding whether the character should take damage is running in tick 2. At the occurrence of the damage, the character actor is notified via the event 3. The character who received the event generates the particle effect, and generates the damage effect (Off-screen rendering using SceneCaptureComponent 2D).

The stop in Assert occurs almost 100%. (I also received reports that there are things that will not stop, but as far as I tried it was 100%)

If the texture is not rendered, this issue will not occur. Also, it seems that the issue does not occur even if delay processing for damage writing is delayed. 

I would like information such as means to avoid this phenomenon and some related findings.

Thank you.

 

Originally reported here:

パッケージ実行時にSceneCaptureComponent2Dを使用したオフスクリーンレンダリングを行うと、Assertで停止する

Steps to Reproduce
  1. Open attached project
    1. [Link Removed]
  1. Press the Launch button to launch on Windows
  1. Observe crash
Callstack
> UE4Game.exe!UWorld::MarkActorComponentForNeededEndOfFrameUpdate(UActorComponent * Component, bool bForceGameThread) Line 839 C++
 UE4Game.exe!UParticleSystemComponent::FinalizeTickComponent() Line 4919 C++
 UE4Game.exe!UParticleSystemComponent::WaitForAsyncAndFinalize(UParticleSystemComponent::EForceAsyncWorkCompletion Behavior, bool bDefinitelyGameThread) Line 4966 C++
 UE4Game.exe!UParticleSystemComponent::SendRenderTransform_Concurrent() Line 3617 C++
 UE4Game.exe!UActorComponent::DoDeferredRenderUpdates_Concurrent() Line 1373 C++
 UE4Game.exe!UWorld::SendAllEndOfFrameUpdates::__l2::<lambda>(int Index) Line 954 C++
 UE4Game.exe!ParallelForWithPreWork(int Num, TFunctionRef<void __cdecl(int)> Body, TFunctionRef<void __cdecl(void)> CurrentThreadWorkToDoBeforeHelping, bool bForceSingleThread) Line 234 C++
 UE4Game.exe!UWorld::SendAllEndOfFrameUpdates() Line 986 C++
 UE4Game.exe!USceneCaptureComponent2D::CaptureScene() Line 514 C++
 UE4Game.exe!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 4543 C++
 UE4Game.exe!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 733 C++
 UE4Game.exe!UObject::ProcessContextOpcode(FFrame & Stack, void * const Z_Param__Result, bool bCanFailSilently) Line 2167 C++
 UE4Game.exe!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 954 C++
 UE4Game.exe!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 856 C++
 UE4Game.exe!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 954 C++
 UE4Game.exe!UObject::CallFunction(FFrame & Stack, void * const Z_Param__Result, UFunction * Function) Line 856 C++
 UE4Game.exe!UObject::ProcessInternal(FFrame & Stack, void * const Z_Param__Result) Line 954 C++
 UE4Game.exe!UFunction::Invoke(UObject * Obj, FFrame & Stack, void * const Z_Param__Result) Line 4543 C++
 UE4Game.exe!UObject::ProcessEvent(UFunction * Function, void * Parms) Line 1314 C++
 UE4Game.exe!AActor::ProcessEvent(UFunction * Function, void * Parameters) Line 699 C++
 UE4Game.exe!AActor::ReceiveTick(float) C++
 UE4Game.exe!AActor::Tick(float DeltaSeconds) Line 896 C++
 UE4Game.exe!AActor::TickActor(float DeltaSeconds, ELevelTick TickType, FActorTickFunction & ThisTickFunction) Line 878 C++
 UE4Game.exe!FActorTickFunction::ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 133 C++
 UE4Game.exe!FTickFunctionTask::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr<FGraphEvent> & MyCompletionGraphEvent) Line 273 C++
 UE4Game.exe!TGraphTask<FTickFunctionTask>::ExecuteTask(TArray<FBaseGraphTask *,FDefaultAllocator> & NewTasks, ENamedThreads::Type CurrentThread) Line 784 C++
 UE4Game.exe!FNamedTaskThread::ProcessTasksNamedThread(int QueueIndex, bool bAllowStall) Line 651 C++
 UE4Game.exe!FNamedTaskThread::ProcessTasksUntilIdle(int QueueIndex) Line 571 C++
 UE4Game.exe!FTickTaskSequencer::ReleaseTickGroup(ETickingGroup WorldTickGroup, bool bBlockTillComplete) Line 559 C++
 UE4Game.exe!FTickTaskManager::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 1454 C++
 UE4Game.exe!UWorld::RunTickGroup(ETickingGroup Group, bool bBlockTillComplete) Line 760 C++
 UE4Game.exe!UWorld::Tick(ELevelTick TickType, float DeltaSeconds) Line 1421 C++
 UE4Game.exe!UGameEngine::Tick(float DeltaSeconds, bool bIdleMode) Line 1221 C++
 UE4Game.exe!FEngineLoop::Tick() Line 3296 C++
 UE4Game.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 166 C++
 UE4Game.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 199 C++
 UE4Game.exe!__scrt_common_main_seh() Line 253 C++
 kernel32.dll!00007ff8f2218364() Unknown
 ntdll.dll!00007ff8f24f7091() Unknown

Have Comments or More Details?

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

10
Login to Vote

Won't Fix
ComponentUE - Niagara
Affects Versions4.18.34.19
CreatedFeb 15, 2018
ResolvedAug 18, 2021
UpdatedSep 19, 2021