Help me narrow down VR optimization problems

I’m sorry I can’t seem to upload things here. I have a very large map https://i.imgur.com/8tT7u0m.png that I am using to have different scenarios for Firefighters to teleport around and manage different scenarios. Each scenario has volume activated particles which are not active when the player is not present. After trying for two weeks to optimize it, I’ve decided to scrap it and start over, building small levels and streaming from a persistent staging level in which the player is in the fire truck and is “responding” to the call. I’m hoping this doesn’t break immersion because there will be radio traffic as they listen to the information about the call they are going TO, so I have 5-10 seconds when they won’t move.

That being said, I want to learn more about what went wrong. Note: most assets are from PolyPixel which have been demonstrated to work for VR as far as I know

Things I’ve tried :

  1. Set all Lights to Static (I STILL can’t bake precomputed visibility because it takes forever, 18 hours gets me to 2 percent, lightmass is set to a scale of 4, not one)
  2. Screenresolution changed to 50 % with no improvement
  3. All foliage actors removed shows minimal improvement
  4. Looking straight down does not improvement performance that much and the lowest is 11 m/s https://i.imgur.com/1Ly11DE.png
  5. Culling appears to work normal, see here https://i.imgur.com/lSNwTmJ.png
  6. Shader Complexity isn’t that bad, and again, I removed these trees to test - https://i.imgur.com/1YXrAq3.png
  7. Forward Rendering is enabled with NO performance increase. FXAA barely registered, it was like 0.3 - 0.5 m/s I believe.
  8. Ambient Occlusion is off in the World Settings AND Project settings, I have no post process volumes on the map
  9. Reprojection is disabled in the Steam VR settings)
  10. r.HZBOcclusion is set to 0. When I put it to one, my m/s DOUBLES

Please chime in and help me try different things. I don’t want to start over without understanding what went HORRIBLY wrong on this map. I also don’t want to re-duplicate all that effort and find out it was because of a simple global setting or optimization that I didn’t enable. (Might not even be a VR based optimization, I don’t know, I didn’t try forward rendering until the 2nd day of trying to fix things). Thank you very much for your help.

It is hard to say what could be causing this to happen without more information. Have you checked out the following page on VR Performance?

https://docs.unrealengine.com/latest/INT/Platforms/VR/Profiling/Overview/

Give that page a read and see if there is anything on there that might help. If that does not help you will need to take a look at what your GPU and CPU are doing using the profiling tools. Nine times out of ten you are going to GPU bound so I would first look into GPU profiling which you can read more about using the following link.

If that does not help then you will need to profile your CPU which you can find out how to do using the following link.

If you do end up posting pictures of stats make sure you sort them from highest cost to lowest cost(You do this by clicking on the MS tab in the GPU profiler) so we can see what is taking up the most time.

I’d like to note that I was talking this over with him and that scene has a 16-20k draw call count depending on facing…

I suggested that those be reduced prior to micro optimizations.

I’ve been watching your streams and reading through the various docs. Unfortunately this map was built with complete and reckless disregard for optimization (I’m a Firefighter/Paramedic, so I’m used to just diving into things) I’m probably doing every single thing wrong, so I doubt any single change is going to let to fixes. But I did want to check here…Do you have any recommendation for for a good resource for fixing drawcall issues? Other than the optimization livestream and rendering best practices, as well as the TechArt aids to optimization, I don’t have a good resource for learning about reducing drawcalls. (Most material deals with finding the problem, not necessarily fixing it). Mordentral mentioned to me, that’s probably my biggest culprit.

Looks like you are using modules to build the houses, if yes you should merge them to single houses, using merge tool, it will reduce your drawcalls.
Also make sure you have lod`s correctly setup, and check the tris count in the scene, it should be not more than 1 500 000 tris and 1000 Drawcalls use stat RHI

One last thing to notice, use this .Ini for VR, from this great article
https://www.gamasutra.com/blogs/LeszekGodlewski/20160721/272886/The_Vanishing_of_Milliseconds_Optimizing_the_UE4_renderer_for_Ethan_Carter_VR.php
Here is the DefaultEngine.ini, put it in Config folder of your project

[SystemSettings]
r.TranslucentLightingVolume=0
r.FinishCurrentFrame=0
r.CustomDepth=0
r.HZBOcclusion=0
r.LightShaftDownSampleFactor=4
r.OcclusionQueryLocation=1
r.HZBOcclusion=0
r.SeparateTranslucency=0
r.AmbientOcclusionLevels=0
r.DepthOfFieldQuality=0
r.SceneColorFormat=2
r.TranslucencyVolumeBlur=0
r.MaxAnisotropy=8
r.LensFlareQuality=0
r.SceneColorFringeQuality=0
r.FastBlurThreshold=0

Thanks, this is great stuff. I did have a question though, I was reading the docs regarding Merge Actors - Merging Actors in Unreal Engine | Unreal Engine 5.3 Documentation … do you have any recommendations of good settings for the Merge Actors for VR? I imagine I would want to merge materials to reduce draw calls. One issue is that I’d like to be able to simply reduce the resolution of all the materials and them merge them for every LOD but I have to designate a specific LOD which would mean I’d be stuck with whichever LOD was selected was there when I merged it.

2017-10-27_2057 is a link to a video showing the simulator live. While it looks great the performance is obviously lacking…which is frustrating because I don’t have to worry about low end or even middle range hardware…I’m using a 7700k with a 1080TI and that’s what the platform would run on currently…it still can’t handle it.

https://content.screencast.com/users…10-27_2124.png direct link to RHI view

https://content.screencast.com/users…10-27_2132.png GPU Profile. Ouch.

Actor Merging, you can use default settings for the near houses, with “use all lods” and generate light map with value of 1024(2048 if the house is big)

For the background houses and buildings you can generate simple mesh with only one texture for the house, so it will dramaticly reduce the draw calls, but it work only for the distant houses, they will look ugly upclose
Also make sure you have static lighting builded, dynamic lighting is super havy for VR

is this still good advice in 2019? I’m getting into optimization and don’t want to break anything

You have to bake your lights. I’ve noticed the same issue before when I had poor performance in VR but when I baked the lights I noticed at least a 30% improvement in performance. That of course is not going to be easy for you if it takes 18 hours to get to 2% built.