Optimization for photorealistic(ish) VR HTC Vive

All of the settings guides I have found for VR settings and practices either seem to be specifically for Meta headsets or to be compatible for as wide a range of headsets as possible.
I am getting into more archvis and aiming for high quality realistic as possible given time and my skiills kind of work and I want to be able to show VR optimized and at the highest quality possible for my two setups.
I have a Vive pro 2 on my workstation running dual E5-2680 v2, 128GB memory, and an RTX 3090.
I also built a portable briefcase desktop which has a I7-9700k, 64GB memory, and a RTX3060 running a Vive Cosmos headset.
The cosmos has lower resolution so I think optimized settings should be somewhat similar for both setups.
They almost run a standard packaged project well enough. Framerate is deff lower than ideal and they can stutter during movement, show artifacts or occasionally areas that don’t display right. But I think we are pretty close to acceptable. So I am wondering what are the most important values to focus on for improvement? And what are the areas that can be improved with the least loss in quality?

In the guides I noticed some point out changes that are android specific which wouldn’t apply to me. I would also hope that anything running off a half decent tower should be able to outperform the standalone headsets and hopefully be able to offer some graphics improvements.

Since these are archvis a couple other things are also working for me. I won’t have any other characters or movement in the scene. I am also happy having the character move slowly and even some degradation in framerate or quality while moving.

I have a couple old projects that I would like to use as demos but they throw a bunch of errors in static lighting mode. Which brings me to question 1.
Would static lighting be considered necessary or highly recommended where possible? Or is it possible to get things dialed in for these headsets with dynamic lighting?

Most of the guides recommend forward rendering but that seems to result in a notable loss in quality. Can I make these setups work without forward rendering or make forward rendering look better?
There are a lot of settings photorealistic guides recommend cranking up for photorealistic style scenes. Things like lightmass settings, reflections, raytracing, etc.
Are there any that are going to have a big negative impact on VR? Are there any I can leave cranked up without worrying about their impact on VR? Any suggestions on settings to optimize for these setups?

Any other ideas or suggestions? Looking at the regular VR guides like for example Unreal’s Virtual Reality Best Practices | Unreal Engine Documentation
Is there anything that doesn’t apply to my setups? Or anything obvious that I can do differently to get improvements when adjusting specifically to optimize for these setups?

Like I said I think my standard projects are pretty close to being acceptable so I would love to start just by trying to focus on specific tweaks that would hopefully give the biggest gains in performance with the smallest losses in quality.

Thanks

Dang no thoughts on this?

Hello,

I think the first step would be to profile the GPU while playing. (Ok to be playing in flat-screen)

Press CTRL + Shift + Comma

Then you’ll see which bubbles are taking up the most frametime. Usually it’s lighting/shadows, maybe post-processing.

Result of first try.

Thanks,

So now to optimize you’d want to zero in on what’s taking the longest (most ms) to render.

If that large dark-green bubble is volumetric clouds, you could try lowering values on it or taking a different approach to clouds.

For PC based VR - Performant dynamic lighting should be possible (assuming you’d always be running on a mid/high tier GPU from the last ~3 years or so(3060+?))

For Archvis, I’d imagine you’d want to use Lumen. Lumen is not compatible with Forward Rendering.

Thanks for the input. I guess my question still is where the best balance of gains in performance while maintaining as much quality as possible.
For example the biggest single hit I can find so far is hardware raytracing ragen default indirect.
I also just noticed as I dig deeper into the subfolders in other high value areas like lumenreflections that hardware raytracing tends to be the highest on the list like reflectionhardwareraytracing rayen hit lighting and default.

But it also seems like raytracing does a lot for quality. So would I want to disable it? Or are there settings or ways to keep most of it’s benefits while being less resource intensive? Or ways to get similar and optimized quality without it while reducing resource intensiveness?

Disabling raytracing took me from 20.93 to 20.56

Now some of the highest are
tracemeshSDF
Update radiance caches
Raster passes under render virtual shadow maps non nanite
Capture convolve sky env map
lumen scene lighting radiosity and direct lighting

Post processing temporal super resolution

You’re welcome,

In the bigger picture of things - I think we’re at a point in time now where Lumen works for VR, but is not “officially supported” due to performance hit.

Follow this community member to keep up to date on the latest/what’s coming.

You’re asking good questions, but I don’t have enough experience to know. (My 980ti can’t do raytracing! :wink: )

One idea would be to make a copy of your map/project and attempt to use baked lighting. (I know earlier I said you’d probably want to use Lumen, but you might find that the increase in performance is worth the switch)

Ah cool thanks.
Sounds like migrating 5.2-5.3 should be the first step then go from there.
I’ll try to post updates if I learn anything new.

Okay so I installed the 5.3 preview tonight and played around with some things. I didn’t do this as extensively in 5.2 but I feel like the results I am seeing in 5.3 are pretty in line with what I was seeing in 5.2.
In fact jumping back into the same project in 5.2 I am seeing probably about 5% higher framerates both in monitor and vr modes.

This is with my workstation so
Dual Xeon(R) CPU E5-2680 v2
128 GB memory
RTX 3090
Vive Pro 2

Resolution 1280x720
scalability high

In monitor mode around 40 FPS with CPU and GPU pretty much idling.
In VR it is dropping down to about 20 FPS but the computer is still pretty much idling. GPU around 10%, CPU not much above average.

Going through that guide and tweaking all the recommended settings to VR settings and cutting my lightmass settings gains a few FPS and drops GPU down even further but the difference is small.

The biggest question right now is what is the bottleneck?

When I get some time I might try making a 5.3 VR project then start trying to drop assets from this project into that to see what happens. This project has gone from 5.1 to 5.2 to 5.3 and has been a big learning curve for me so maybe it’s messed up settings somewhere or something but why is it not using more resources for more quality?

I did check and as far as I can tell it’s not maxing any one CPU core. I mention that as I have had this issue in other games where single threading hit a wall while GPU was barely working.

Oh and as another point of reference in VR Steam Home it is using about 75% GPU and 15% CPU. So it seems something in this project is causing a bottleneck that is making pretty much all other settings have minimal impact.

Another update
Stereo and Dynamic Fovation and instanced stereo haven’t changed framerate but turning the three on does make it much smoother. I haven’t played with them independently yet.

Lightmass settings have very negligible if any impact on FPS even changing things like static lighting level scale 0.1, indirect bounces 30 sky lighting bounces 30, indirect lighting quality 2

Setting scalibility to low does get me up to 45 FPS but it looks like garbage.
Medium knocks it all the way down to 22 FPS and it still doesn’t look great.

I do have things like some trees moving in the wind and shadows, I also have the SunSky with clouds. I feel like somewhere it was mentioned that could be a problem.

The big frustration for me though is why is my resource usage still so low. On that note I do remember at one point I realized that my task manager gave me different readings than CPUID so I just checked it and the Geforce overlay against the task manager and sure enough they are reporting around 75% GPU usage when the Task Manager is reporting around 20%. But even on the highest settings I can get it to run and only a few FPS it still won’t report over 75% GPU. And why does the task manager, CPUID, and Geforce overlay report the same GPU on something like Steam Home, but not in anything Unreal?
Also remembering right now I am running beta Steam and Vive so one more thing I guess I should test and compare.

I did start a 5.3 VR project. I haven’t added anything to it but tested it a little. Framerates are much better but there are these matrixy flickering boxes that take up a lot of the frame in VR but not visible in the monitor so I would need to figure that out before I do much of anything with that one.

Well now I just got the GPU to 98% on CPUID in high scalibility.
So I guess at least part is going back to figuring out what is using the most resources.

Wondering if the Task Manager GPU reading wrong is worth reporting as a bug? It seems it has to be related to Unreal.

I tried moving my project to a VR project but that just resulted in broken blueprints and all kinds of issues. Is there an easy way to do this? I am starting to get the feeling that trying to do a photorealistic project then transfer it to a VR project is not the correct workflow lol.

Presumably I can change all the necessary settings in my existing project but I haven’t been able to get much improvement without massive loss in graphical quality. I have a ton of errors that come up in static lighting mode. If I designed for that from the beginning it might be more viable but I don’t want to spend the time to fix all the overlapping UVs and whatever other errors there are. Forward shading looks horrible.
Anything else I mess with seems to have pretty negligible gains.

Thanks for mentioning your specs again. I think your CPU is the bottleneck. (CPU is not fast enough to feed the GPU, which is why you saw the GPU idling.) Interesting that you mentioned seeing full GPU utilization later though.

Someone correct me if I’m wrong, but Unreal Engine is single threaded. (Unless you’re compiling shaders, in which case multiple threads are used)

E5-2680 v2 benchmarks at 12.5k

Whereas a medium-high tier CPU from 3 years ago (Ryzen 7 3700X) is about twice that.

You don’t need to move your project to a VR project, you could add a VR Pawn to any existing project.

1 Like

To be clear I have a server board with dual Xeons so it still holds it’s own pretty well on multi threading.
If unreal still tries to do heavy lifting with single thread that would be pretty disappointing.
When I looked at the performance monitor I am pretty sure it looked like load was pretty evenly distributed across the cores though. I guess I could have missed one running high load while trying to scroll through the list of 20+20 virtual

I am also sure at this point there is some issue with the Windows task manager not always reporting GPU usage properly. I have only ever seen this with games and some games. Not sure if they are all Unreal but I first noticed it with a couple games on Steam and then remembered today and noticed it doing the same on all my projects. CPUID and Geforce monitoring both seem to report the same always. Interestingly enough if say my VR goggles are in Steam VR home and I am working on a 3D project on my monitor the task manager reads higher than CPUID and Geforce. But then go into that project in VR and Task manager reports 60-75 when CPUID and Geforce are reporting 75-98.
Not particularly helpful other than knowing it can’t be trusted but I think it’s interesting and if others experience this probably something that should be addressed.

As for going to a VR project I wasn’t worried about the pawn but was more thinking it was an easy way to 1. get into a 5.3 project since my current one has been bouncing around since at least 5.1. Then to get back to more VR default project and world settings without trying to figure out what settings I might need to change in the current one.

I think when I get some time though I am just going to start going back through and trying to figure out what areas I want to compromise to try to keep the best quality while gaining a little more performance. I am sure my noobness is causing some loss here and there but I am also thinking VR performance may still be preventing me from getting remotely close to the quality I want. While the graphics look nice in some of these examples I think in reality they are probably way less resource intensive than what I was going for with this archi project.
I guess I’ll just keep messing around with it. Any other thoughts are definitely welcome though.

It’s not the best out there but I am always pretty happy with it for a 5 year old budget build that has just had a couple new GPUs and periphrials thrown at it since.
It’s biggest weakness is single thread but I mean anything more complex than notepad shouldn’t be single thread anymore.