Strange Low FPS performance in Oculus

In my case, my desktop configuration like following:

CPU:(Intel(R) Core™ i5-4590 @3.30GHz)
GPU: (NVIDIA GeForce GTX 960)
RAM:(32.0GB)
System:win7 64bit

But The performance is really strange with a low FPS(47) in the game and the whole game view seems like shaking while u turning around in the playing game. I just can’t believe that I only put 12 meshes with 7000 surfaces and one light in my blank Project template level

Plus if I got closed to the meshes as I can , I just put only one this kind of mesh in the game the performance even becomes to be more worse.

So I want to know if it’s bug or I have forgotten to do something optimization in the VR Game?

because I even have tried to made a number of optimizations like following:

FString CM = TEXT("t.MaxFPS 120");
AUTPlayerController->ConsoleCommand(CM);

FString CM = TEXT("r.Vsync 0");
AUTPlayerController->ConsoleCommand(CM);

FString CM = TEXT("hmd sp 100");
AUTPlayerController->ConsoleCommand(CM);

FString CM = TEXT("r.Earlyzpass 1");
AUTPlayerController->ConsoleCommand(CM);

/////////////////////PostProcessSettings/////////////////
FPostProcessSettings  PostProcessSettings;

//Scene color
PostProcessSettings.SceneFringeIntensity = 0.0f;
PostProcessSettings.GrainIntensity = 0.0f;
PostProcessSettings.ColorGradingIntensity = 0.0f;	

//Bloom setting
PostProcessSettings.BloomIntensity = 0.0f;

//LPV 
PostProcessSettings.LPVIntensity = 0.0f;

//Ambient occlusion 
PostProcessSettings.AmbientOcclusionIntensity = 0.0f;	

//DOF Method Gaussian
PostProcessSettings.DepthOfFieldMethod = EDepthOfFieldMethod::DOFM_Gaussian;
PostProcessSettings.DepthOfFieldDepthBlurAmount = 0.0f;
PostProcessSettings.DepthOfFieldDepthBlurRadius = 0.0f;
PostProcessSettings.DepthOfFieldFstop = 0.0f;
PostProcessSettings.DepthOfFieldFocalDistance = 0.0f;
PostProcessSettings.DepthOfFieldFocalRegion = 0.0f;
PostProcessSettings.DepthOfFieldNearTransitionRegion = 0.0f;
PostProcessSettings.DepthOfFieldFarTransitionRegion = 0.0f;
PostProcessSettings.DepthOfFieldScale = 0.0f;
PostProcessSettings.DepthOfFieldMaxBokehSize = 0.0f;
PostProcessSettings.DepthOfFieldNearBlurSize = 0.0f;
PostProcessSettings.DepthOfFieldFarBlurSize = 0.0f;
PostProcessSettings.DepthOfFieldOcclusion = 0.0f;
PostProcessSettings.DepthOfFieldColorThreshold = 0.0f;
PostProcessSettings.DepthOfFieldSizeThreshold = 0.0f;
PostProcessSettings.DepthOfFieldSkyFocusDistance = 0.0f;

//Motion blur all
PostProcessSettings.MotionBlurAmount = 0.0f;
PostProcessSettings.MotionBlurMax = 0.0f;
PostProcessSettings.MotionBlurPerObjectSize = 0.0f;

//AA FXAA
PostProcessSettings.AntiAliasingMethod = EAntiAliasingMethod::AAM_None;

//SSR 0 MAX roughness
PostProcessSettings.ScreenSpaceReflectionIntensity = 0.0f;
PostProcessSettings.ScreenSpaceReflectionMaxRoughness = 0.01f;

//Ambient cubemap
PostProcessSettings.AmbientCubemapIntensity = 0.0f;

CameraComponent->PostProcessSettings = PostProcessSettings;
  • FString CM = TEXT(“t.MaxFPS 120”);

You don’t need to change this value when using an HMD. It is set automatically when entering VR mode.

  • FString CM = TEXT(“r.Vsync 0”);

Don’t change this value. Turning off Vsync will break many important features on the Rift. It will also decrease performance. There is no reason to turn it off except when debugging low level features.

  • FString CM = TEXT(“hmd sp 100”);

100 is actually a higher value than the default for a GPU like the GTX 960. You should set this somewhere around 80, or even lower if you can’t hit your framerate target.

  • FString CM = TEXT(“r.Earlyzpass 1”);

This probably isn’t going to make any difference.

  • PostProcessSettings.SceneFringeIntensity = 0.0f;

This shouldn’t have any effect in VR. Fringe/lens distortion is automatically disabled.

  • PostProcessSettings.DepthOfFieldMethod = EDepthOfFieldMethod::DOFM_Gaussian;
  • PostProcessSettings.DepthOfFieldDepthBlurAmount = 0.0f;

These settings have no effect in VR. DOF is always disabled.

  • PostProcessSettings.MotionBlurAmount = 0.0f;

These settings have no effect in VR. Motion blur is always disabled.

  • PostProcessSettings.AntiAliasingMethod = EAntiAliasingMethod::AAM_None;

Temporal anti-aliasing has a minimal runtime overhead and is very important for image quality. You shouldn’t disable it.

  • PostProcessSettings.ScreenSpaceReflectionIntensity = 0.0f;

You should adjust r.SSR.Quality instead of intensity. Set it to 1 or 0 to increase performance.

You want to set this to a higher number, not lower.

  • PostProcessSettings.AmbientCubemapIntensity = 0.0f;

This has no effect if you have no ambient cubemap. It’s better to just not assign an ambient cubemap than to edit this value, which might be confusing if an artist later inserts an ambient cubemap, because it will never work for him with no explanation.

  • GPU: (NVIDIA GeForce GTX 960)

The minimum recommended GPU for a Rift is a GTX 970. You will probably struggle to hit the minimum framerate in any desktop UE4 VR demo with a 960, unless you lower the sampling quality. UE4 uses a deferred rendering pipeline, so there is a higher minimum overhead per pixel for rendering than an engine which is capable of using forward rendering, such as Unity. The number of meshes will not have much of an impact on performance in UE4 until you have many hundreds or several thousands of them. A GTX 970 is going to be at least 50% faster than a 960, and that’s a big difference.

A couple of things you can try: disable HZB Occlusion culling if it’s enabled (it’s probably not enabled, the default is currently 0), try lowering the number of ambient occlusion levels (r.AmbientOcclusionLevels 1), try lowering SSR quality (r.SSR.Quality 1), try adjusting the transparency settings (r.SeparateTranslucency 0 or 1, r.TranslucencyLightingVolumeDim 4 or something other number), try lowering the sampling quality (80 or lower).

Disable all dynamic shadows. Reduce the number of dynamic light sources. In some cases, entirely disabling occlusion culling may also give you a speed boost, if you know that everything is always going to be visible.

And buy a GTX 970 :slight_smile:

Thank you very much。it‘s really helped

Could you vote this up or mark it as an answer, that way it will show up in search results for other people looking for performance tips in VR? Thanks! (You don’t have to if you don’t want to, of course).

My pleasure.