VR Optimization Guide - DCS 2.5.6.60

Before or after the PD 0.5 SS 450%?
MSAA has a big impact on FPS for most people. It certainly does for me.
I tried PD 0.5 and SS 200% and FPS seemed more or less the same as PD 1.0 and SS 50%. I haven’t figured out how to log the FPS results in FpsVR yet. :slight_smile:
And I’m using the shader mod.

Because PD 0.5 is halving the setting on the DCS side then MSAA will do better (it just scales bad performance wise at high resolutions).

The trouble with ‘use SteamVR 500%’ is that the different headsets have different scaling factors for their default 100% resolution. WMR is crazy in this regards with a Reverb G1 being 145% native and a G2 being 100%. Valve built that value around the Vive and then Index proportions.

Also DCS PD is a quadratic value so 0.5 = 400% less pixels, hence the 500% on the SteamVR side to scale back up (which uses a scalar single resolution dimension).

I still haven’t watched the vid or tried this yet, but it needs some math I think, per headset type.

1 Like

This interesting stuff! I made a Viggen Rocket attack track and did some tests.
Normally I fly DCS at PD 1.0 and Steam SS 50%.

Here are my test results.

PD 1.0 Steam SS 50% MSAA Off 78 FPS
PD 1.0 Steam SS 50% MSAA x2 76 FPS
PD 1.0 Steam SS 100% MSAA Off 66FPS
PD 0.5 Steam SS 200% MSAA Off 87 FPS
PD 0.5 Steam SS 200% MSAA X2 86 FPS

First of all, MSAA doesn’t have the impact I thought it had…
Second, I don’t get the math behind this. I think PD 0.5 for a G2 is 2160x1080. But what am I seeing when this resolution is supersampled by Steam VR to 200%…?
I feel PD 0.5 and Steam SS 200% is almost as good as PD 1.0 and 100%. Placebo?

If only we had someone who could explain this, so even pilots would understand… :wink:

frustrated kermit the frog GIF

The FPS better, that I can tell.

2 Likes

I know the Rift S is out of fashion these days. But for those who are still flying on the cheap, the beta drivers suggested in the video above do seem to work in X-Plane. I am running a pixel override of 1.5 with similar smoothness to what 1.3 yielded before.

I feel baited :slight_smile: but will have a go anyway. I need some coffee, so hope this is right.

So the DCS Pixel Density is a scaling value on the default output resolution of your device. It has a big impact because it’s what DCS is using to scene render on its side. If it has less stuff to render (plus LOD stuff culling things out that can’t be seen at various limits etc) then DCS will use less CPU and use less GPU resources (VRAM especially). It’s like running DCS at 1024x1024 on a 4K monitor - you’re going to get good results.

PD is a value applied to both height and width resolution values, so say you have a device that reports back a native resolution of 4320x2160 (like the Reverb) then it would be 1.0 x 4320 by 1.0 x 2160. So for 0.5 x 2160 by 0.5 x 2160 that’s a lot less pixels to render and work to do (now 2160x1080 at 0.5).

Example:
PD = 0.5 => 2160x1080 resolution = 2,332,800 pixels
PD = 1.0 => 4320x2160 resolution = 9,331,200 pixels
PD = 2.0 => 8640x4320 resolution = 37,324,800 pixels

So now we have an output frame with PD 0.5 that’s 400% less work (!) for DCS to do in pure number of rendered pixels. Because of how the DCS graphics engine uses deferred shading for its lighting it is an algorithm that hurts at the tail, in that performance drops off dramatically as pixels scale up quadratically.

The VR side of scaling up images to prevent barrel distortion and over-sample the native pixels to give greater clarity (literally providing a bigger image the displays can use to get a raw antialiasing impact) is just brute force stuff the stack does on the raw frame given by DCS. There are limits to what it can do (usually run out of VRAM) but it’s not a CPU intensive thing, so scales with the power of your GPU nicely.

As I’ve written about before, the 100% value in SteamVR is sort of dependent on the device, as sometimes 100% represents the x1.4 barrel distortion multiplier (like in the G2) and sometimes 100% represents it without (Reverb G1, O+ etc). meaning you have to set to 140% to be ‘even with native resolution in the center’. It’s also a bit more complicated as the scaling factor in SteamVR is based on the aspect ration of the Vive, while other devices uses square or different resolution aspects.

I’m not sure if that helps. One thing I would say is that if you change SteamVR scaling then you do need to restart DCS each time - I don’t believe it does it dynamically but only at startup.

4 Likes

So downscale in DCS and upscale in SteamVR to get the pixels back.

It means that in this process some visual detail must be lost, right? A bit like running Render Scale in MSFS below 100% and up-ing the counerpart setting in OpenXR.

So - while this process adds some FPS - it comes at the expense of lost visual clarity I suppose.

Yep, a bit. I guess it might be the case where the lens, panels and eyesight we have means that it makes less impact than intuitively we’d think.

MSFS at internal render scale of 80 with TAA and a OXR at ‘100%’ (which is another nightmare value in itself to describe) is similar to this.

The big gain is that the upscaler on the VR side is just pure GPU math and is pretty much linear O(n) in performance if VRAM is available, while anything on the DCS side of gains is pretty much CPU bound and O(N²) on a good day.

1 Like

Hook, line and sinker.
The Troll caught another one…

So I got this right.
But how can Steam take that and make it look like this:

Because, it does…

A bit. But you might need to break out the crayons for this…
What resolution am I seeing in my G2, with PD 0.5 and Steam SS 200%?
2,332,800x2 doesn’t seem right, because that would only be halfway to native resolution, and it sure looks better than that. :thinking:

1 Like

I don’t have a G2 to check, but fpsVR should show your final output resolution. My G1 would be 2208x2160 at 100%, and 3124x3056 at 200%.

I believe the SteamVR 100% on a G2 includes the needed x1.4 barrel distortion, it could be something like this (at a guess):

G2 SteamVR 100% = 3095x3024
G2 SteamVR 200% = 4374x4278

For the ‘barrel distortion’ the first couple minutes from here is a great explanation of why it’s needed and anything less that using it is sort of like under-sampling: https://www.youtube.com/watch?v=ya8vKZRBXdw&t=362s

1 Like

Even if DCS renders at PD 0.5…?

Probably, haven’t looked. I’ll peek in fpsVR tonight and see.

EDIT: See posts below.

1 Like

I think so, yes. Steam SS of 50% equals native resolution, or close to, 2160x2160 per eye.

1 Like

So had a quick peek and it’s all a bit odd (of course). Here’s my quick results on a Reverb G1:

SteamVR SS % SteamVR Resolution DCS PD DCS Resolution Notes
150% 2696x2640 1.0 2696x2639 My usual
150% 2696x2630 0.5 1348x1319 Looks like lego
400% 4404x4316 0.5 2202x2158 Looks pretty good
500% 4924x4824 0.5 2462x2412 As good as My usual better fps

So the PD is altering the size of the render as SteamVR SS changes, which makes it not look like blocky lego. The relationship seems to be a linear one (it take the SteamVR SS value and multiplies each with the PD value), which explains why performance is better but not magic, as it’s doing less work on pushing pixels on the DCS side and heavily oversampling on the VR side.

fpsVR has a ‘Detect Resolution’ button you can use to get these figures when in DCS. You’ll need hand controllers active and hit the right thumbstick down to bring up the SteamVR fpsVR overlay to see it.

It’s all a bit academic for me as even with the shaders mod I get about 70-80 fps with PD 0.5/500%, so I’m not hitting a reliable 90Hz in DCS. Because I want that, I then enable reprojection that locks it down to 45 fps in-game anyway, and put up with the artifacts. It does mean I have a lot of headroom for reprojection though. The 90/45 split is pretty hard for DCS, and it’s a shame for WMR, as SteamVR and the Index have some nicer reprojection and refresh rate limits.

4 Likes

So…is the PD in DCS, dependent on the SS resolution you set in Steam VR?
So, if you increase the Steam VR resolution, PD 1.0 suddenly means more pixels from DCS as well as Steam VR…

Is this just moving workload from the CPU to the GPU, and because DCS is CPU dependent, things are moving faster because supersampling is GPU business…?

The artifacts aren’t that bad though.

That’s one thing I liked about the Rift S. 80/40. It was easier to reach 80 FPS than 90, so I saw less ASW.

But yeah, a 66 FPS reprojection would be nice.

1 Like

Yes. The way I think it works is that DCS doesn’t know/care what headset you have or what native resolution it can support, it just asks the OpenVR driver for the ‘device scene resolution size’ at start-up. That’s the value put out with SteamVR SS applied.

If you have a resolution in SteamVR set to 2696x2640 then DCS will multiply it by the current PD value and target that as its device resolution size. The 0.5 is taking 500% SteamVR of 4924x4824 and doing 4924 x 0.5 by 4824 x 0.5, so that means 2462 by 2412 for DCS to use. DCS uses whatever OpenVR (and I assume the Oculus SDK as well) and has the PD as a simple multiplier on both resolution dimensions.

Yes. DCS is batching calls in a single thread to the GPU, working out lots of stuff/vertex’s, doing lighting passes, culling stuff out, lots of shader work while a VR scaler is comparatively simple and something GPUs are just plain good at. Asking DCS to draw two scenes at 2696x2639 (with my SS150% / PD 1.0) is more taxing that asking for 2462x2412 (SS500% / PD 0.5), and the gains seem pretty much proportional to the difference in size - the oversampling of the native panel resolution (to 4924x4824(!)) is then also acting like an antialias effect.

Exactly. The current OpenXR has ‘steps’ at 30/45/60 (30 being important for MSFS) and the SteamVR Index has even more, and that’s just reprojection. An ideal future nice thing would be perhaps driving the panels at 75Hz (the index has multiple refresh rates as well) but I don’t think it’s something HP has done.

3 Likes

Well I’m glad ya’ll are able to break down and crunch the numbers under the hood. To me it’s all:

All I know is the fps are substantially up and its looks the same or slightly better than PD 1.0 and SS 50%.

1 Like

Not sure if you figured it out, but here it is just in case. In the fpsVR menu, click Settings then go to fpsVR and click on Save History. Then click on the fpsVR History Viewer shortcut. It will open a separate program unlocking all of the geeky fpsVR stats.

Sort of… But I am unsure of what it records. I’m guessing it stores the entire DCS session, with menues and all?
Is there a way to make it just record the in-sim sessions?

So I’m tackling this process today. Interesting and easy to follow videos by the dude above there. Still a bit confused on what I should be running my G2 in as far as PD and Steam. I’m struggling a bit with the terminology too because my SteamVR Settings Menu simply says “Resolution Per Eye” (I see no reference to Super Sampling, but I assume that is what we are talking about). If I set my Resolution Per Eye to 500% - I get a figure of 7052 x 6900. So my assumption is that I don’t want to do that. Reading the YouTube comments - it sounds like that is working for people… (.5 and 500%) even with the G2…lets give it a whirl…

200% Resolution Per Eye is showing 4460 x 4364.

I also set my mask in that HMD text file to .650. But I also see a mask size setting in the DCS World VR menu…do I need to set both to match or just not set one or the other?

Oh…and I’m planning on setting this as Per-Application Video Settings specifically for DCS World…but now that I’ve moved my slider - what should my global default setting be for when I’m not playing DCS (140%?)

So my numbers above are for the Reverb G1, where to get it clear I put it to 150%. The Reverb G2 in SteamVR uses a different baseline, so that would be equivalent to 100% on that (or higher if you have the umpf).

The final numbers do seem really high, so maybe 300 to 400% on the G2 SteamVR side and then PD 0.5 on the DCS side might do it, it’s all a bit subjective anyway.

I too just did an pre-application setting (leaving my video default to 150%, yours will probably be 100%), but it acts like a multiplier. I just used fpsVR to make sure it ended up the same as I if I had done it just in the main video settings.

1 Like