Set Game Paused - Horrible rendering artifacts?

Hello all!

I’m having an issue with a VR project while trying to Pause/Unpause gameplay via blueprint using Set Game Paused.

Once I pause the game, it appears that we are no longer correctly rendering to the HMD. (Oculus Rift using Oculus Runtime with UE4. I could not have a chance to test this on a Vive yet).
2 main issues:

  • UMG User interfaces (WidgetActor) are incredibly blurry and glitchy
  • Lots of drawing issues (different parts of the scene view are ghosted on top of the current scene, and the result is visually different in left vs right eye

Is this because the engine is not properly rendering the scene while paused?
Is this because the user is using a positionally tracked HMD (Not updating the “actor” location - the HMD may be moving through the tracked area, but the actual “Actor” is not moving?)
I am at a loss.

Here is what I have tried to do:

  • Set Player Controller, Player Camera Manager, Pawn, Motion Controllers, etc to be tickable when paused (using the Actor and component nodes)
  • Creating UMG widgets after setting game paused, and then setting widgets to be tickable when paused (both the Widget blueprints + the actors that hold the blueprints)

The Player Pawn remains correctly tracked by the HMD, the motion controllers continue to track. The UMG widgets are fully interactable, with button presses and variables set as expected. All issues are visual, rendering issues.

I’ve tried searching through the forums and google.
It would be great to pause gameplay using the “Set game paused” as it handles many of the AI, physics and other objects very well. Aside from these horrible rendering issues. Does anyone have any suggestions?

Cheers!

Has anyone experienced this? I thought of posting this in the resndering forum but figured it might be more VR related as the HMD / camera is constantly translating after “set game paused”

I’m using 4.14 and have similar issues with 3D widgets, as well as the widget interaction component not updating so you can’t send input events in pause mode. I believe that is fixed in 4.15 but since we can’t update at the office yet, I’m using a basically-zero global time dilation instead (you can change the bounds of the time dilation in the project settings). Hacky but works for me.

Edit: Issue related to the widget interaction component: Unreal Engine Issues and Bug Tracker (UE-38594)

There are issues with Temporal AA and game pause in VR. Try to set r.DefaultFeature.AntiAliasing=0 during pause. Also try to disable instanced stereo rendering.

Hi, was someone able to resolve this issue?

We have this strange artifacts when unpausing our game using SetGamePaused node as you described. We need SetGamePaused because we need the Delays and timeline to pause as well, and setting global time dilation to 0.0 doesn’t do the job.

We tried r.DefaultFeature.AntiAliasing=0 and other rendering console commands but same result.

We need a little piece of light with this problem, thanks in advance.

When we pause, we’re calling the console command “r.DefaultFeature.AntiAliasing=0”. When we unpause, we set it back to 1.
This is still an issue in 4.20.2 when playing in editor.
In a packaged build we dont have this issue.

If someone still have those problems, I found that setting the UWorld->bIsCameraMoveableWhenPaused to “true” helps. This variable is not exposed to BPs, so I made a little BP library function like that:



void UBasicVRFunctionLibrary::SetCameraMovableWhenPaused(UObject* WorldContextObject, bool bMovable)
{
    if (UWorld* World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull))
    {
        World->bIsCameraMoveableWhenPaused = bMovable;
    }
}


Btw, I think this should be set to true by default in VR, because the HMD/Camera and hands are always moving even on pause.
Otherwise, using MSAA instead of TAA also helps of course.

3 Likes

This is totally true, it fixes both TAA and MotionBlur

This is still an issue in 5.0.3

I wasnt able to use

r.DefaultFeature.AntiAliasing

for some reason but

r.AntiAliasingMethod

worked for me.