VR Perf Kit (foveated image scaling and VRSS injector)

Hey everyone, just wanted to share this as it's improved my experience with Vr in Odyssey.... slightly.... but it's a worthwhile change.

For reference, my system is a 5800x and RTX 3080 with Rift S. I can play horizons with pretty much maxed settings at 1.5 HMD super sample and it's enjoyable and performs well. Odyssey really chugs and the AMD FSR option helps a little, though ED's famously rough implementation of AA options is shown off particularly in VR where image upscaling doesn't hold up as well as on flat screen.

This guy fholger on github has been working on these injectors for VR and has been able to add FSR or games that don't natively support it and I've found that it improves my experience in Odyssey quite a bit in the latest version.


It's just two files. Extract and then place copies of them in the same folder as the game exe that you want to inject. The EliteDangerous64.exe inside the odyssey folder, in this case. Then you just modify the settings file to adjust what you want it to do. There are hotkeys to make adjustments while you're in-game which you use to fine tune your settings. Review the log file it makes and then add the settings you land on to the settings file so they will persist the next time you launch.

For me, I had set Odyssey to use FSR 1.0 Ultra quality and set AA to FXAA.
Not everybody agrees with me, but I prefer smoothness over sharpness if it's shimmery with movement, which ED is (a lot!). The recommend SMAA for highest quality, but this always looks shimmery in VR. AA just looks different in VR.
For that reason I always set ED to FXAA. Not only is it the lowest performance overhead but serves to best blur the aliasing in the scene, which I prefer in VR. The only time I don't prefer FXAA for VR games is when it can be temporal AA, which ED doesn't do so it shimmers. Yuck.

With this injector I turn off the in-game FSR and let fholger's implementation do that work. Whatever it does differently it looks much smoother to me. Maybe it's happening at a different point in the draw call? I don't know, but it's much better looking to me even at the same apparent level of subsample and upscale.

My settings: Firstly, the VRSS doesn't work in Elite. It does for other games but not elite. He's said that's because some games he hasn't figured out how to tell which eye the game engine is drawing for at any moment. I don't know, but that means we're only paying attention to the first part which is the sub-sample and then AI upscale to make up for it.
The advantage here is that this injector seems to look smoother when doing it, you can set it more granularly, and it does the upscaling foveated -which means it only happens in a circle at the center of your view, while the edges of the view get a "dumb" and much less costly bilinear upscale. But this matter very little since those areas of the scene are typically more blurry inside the headset anyway and they aren't what you're focussing on.
You can adjust the level of subsample, style of upscale, the level of sharpening, and the size of the circle in which the upscale is applied.
You can turn on a debug mode which shows the circle in red so you can more easily set it's size and see what it's doing.

After much messing around I settled on FSR looking best with a sub sample of 0.8 and sharpening somewhere in the middle. The circle I think I'm using 4. But this will all vary by which headset you have, your computer, and your face and eyes.
With this setup I find that it pretty much matches the performance (maybe slightly ahead?) I got with in-game FSR ultra quality, but this looks more detailed as I think I'm actually doing less sub sampling, plus the smoothing looks much better to me and the shimmering is pretty much gone.
And since this is only happening in the center of the scene, I'm not making my GPU upscale in areas where I won't see the difference. so, boost.
One other benefit is that since FSR is not being applied in-game --only to the VR engine-- it doesn't happen if I launch the game flat. In game settings are "mode normal, SS 1.0, FXAA" which is what I want it to do on flat screen mode so no need to swap anything around.

This could be used to sub sample and scale in a game that doesn't allow it yet, like horizons. As an improvement to my taste in image quality at close to the same performance, by not working on the edges. Or could be used to improve quality if you were already happy with performance by first increasing your HMD super sample setting, and then telling this injector to sub sample by that same factor (meaning your GPU would draw the scene at your previously set res, and then upscale to higher than what you had before, but only in the center)

Some day the ultimate improvement would be if variable rate foveated rendering would work in this game... This would mean (and you can see explained in the injector settings) that the game is rendered at native res in the center circle, and then you have 3 descending rings of lower sampling around the area where you can't tell the difference. This would be better than sub sample / up scaling since that starts with sub sample and thus doesn't allow max detail in the center.
This would also prevent the issues with bloom/ambient occlusion/volumetrics filtering starting from a very low res when sub sampling techniques are used. Everything gets better when you start from the right place. but this helps a little.

Hope you enjoy!
 
Just tried this and it is fantastic, I don't understand the lack of replies unless people can't be bothered to give it a try?
I also much prefer fxaa and would rather have a smooth, less pin sharp image. I still can't get the smoothness as good as in Horizons but it's close.

Thanks for sharing!
 
I actually tested both his mods, first FSR and more recently the foveated rendering. After much testing, on my system at least, there was no performance gain or image quality improvement. I recently tested (and posted on this forum) his new foveated rendering dll and found that it consistently degraded performance by 1-2 FPS. I've actually come full circle with my settings. I have stopped using EDO FSR and have reverted to CAS with HMD quality at 75% and all other scaling at 100. Since doing that all the weird planetary terrain artifacting and anti aliasing(SMAA) is reduced and I'm finally enjoying VR again.
 
Last edited:
I'm kind of changing my mind on this also. After some time-separation I went back over the options and settings. Finding that, yes, I still think it's better than the in-game FSR subsample/upscale. However I'm happier with the look of simply turning all that off for VR and using one notch lower HMD setting. In this case 1.25 for Odyssey. (use 1.5 in horizons)

I think if true foveated variable rate shading was working I would use that to only super sample in the middle of the view, but oh well. May never come.
 
I heard about this a few weeks ago, and I still haven't tried it for ED, but I tried it for the first time tonight with iRacing, and the difference was EPIC. Zero noticeable visual loss, and a HUGE performance boost. I was able to turn up so much eye candy, and still run rock solid 90 FPS. Game changer.
 
I heard about this a few weeks ago, and I still haven't tried it for ED, but I tried it for the first time tonight with iRacing, and the difference was EPIC. Zero noticeable visual loss, and a HUGE performance boost. I was able to turn up so much eye candy, and still run rock solid 90 FPS. Game changer.
Sounds like the fixed foviated super sample works in that game.
Really would be great if that worked in EDO
 
I actually tested both his mods, first FSR and more recently the foveated rendering. After much testing, on my system at least, there was no performance gain or image quality improvement. I recently tested (and posted on this forum) his new foveated rendering dll and found that it consistently degraded performance by 1-2 FPS.
That was about the result I had with the radial masking version of his FFR, back when it came in the form of an openvr_api.dll replacer, before that was superseded by vrperfkit (radial masking version has not yet been moved over to vrperfkit); I saw things becoming blocky, as intended, outside the full resolution radius, but got no benefits -slightly on the contrary, as you say.
I could not use the more performant VRS version, because that requires a RTX card, and I have only a 1080Ti -- I take it your system is 20x0 or 30x0 series?
 
Interesting, thanks for the info. Though with regards to shimmering, this is only something I notice in EDO. EDH doesn't shimmer at all (I have all settings on Ultra at 1.0 scaling on my G2).

The issues I'm having in VR in EDO can only be fixed by FD. And VR is very low down on their priority list (which is fine while I can still play EDH :) ). I'm of the opinion that the rendering engine in EDO is still fundamentally broken, at least when applied to VR.
 
I agree the EDO engine appears to be broken, though I don’t think it’s VR specific.
I’ve been trying to track the bug where the game doesn’t fully utilize the computer hardware and frame rate drops at the same time as utilization drops.
This is tougher to measure in vr since you’ll need to turn off any kind of reprojection/ASW to see the true frame rate and give the opportunity to fully utilize.
However I have shown that it happens in both VR and flat, and doesn’t happen in horizons.
Currently collecting user reports of this with a google form, with call for submissions on our podcast, all in the latest episode notes.
 
If I’m right, the game appears to “wait” between drawing frame in some cases. So you’ll only see obvious evidence of this when your computer / detail settings combination is such that the gpu could render more frames if fully utilized, but frame rate is lower than the vsync/cap.
I’ve shown many instances where utilization drops below power cap and frame rate also drops. Which obviously shouldn’t happen in a correctly functioning game engine.
normally, frame rate could only drop if utilization is at 100% and that’s not fast enough to meet vsync / cap.
 
Sounds like the fixed foviated super sample works in that game.
Really would be great if that worked in EDO

Hmm, so I did just try it in ED, now and fixedfoveated doesn't seem to be working indeed.

I tried putting the 2 files in both of these:
C:\Users\username\AppData\Local\Frontier_Developments\Products\elite-dangerous-64
C:\Program Files (x86)\Frontier\EDLaunch

Do we know why? From what is written, this should work with every OpenVR game, and that's what ED is, right? I do recall the vrperfkit_v0.2.2.zip came with an x86 subfolder. For iRacing, it was said not to use the version of dxgi.dll in there, but perhaps ED needs that one? Can try again later.
 
it’s known not to work in elite.

Nvidia describes the requirements for their VRSS as needing game to use “forward rendering” which elite does not.
And specifically in the GitHub of this vrperfkit, the creator describes not being able to get info from the game engine about which eye is being drawn at any point in time, thus they can’t make foviated super sample work.
 
I recall somebody said something a while back, about Cedric's fork being made in order to work with some title that wouldn't cooperate...
Maybe worth a try... https://github.com/cedriclmenard/vrperfkit (EDIT: Ok, I see he mentions the "which-eye?" problem remains, resulting in an offset of the foveated area -- not a significant problem with an original Vive, which has a high degree of overlap between the left and right views .. major problem with something like Pimax, which adds a lot of periphery.)

HAS VRSS been added, by the way? -I see nothing about that in the readme - only VRS.
 
Last edited:
Ugh yeah I won’t be modding any files, myself. No thanks.
I may be saying VRSS when I mean VRS? Just just lowering the res in the edges.
 
Silly question but the install says extract the dxgi.dll and vrperfkit.yml but there is no dxgi.dll, am I missing something here?
 
Maybe you didn’t download the right thing?
Download contains a readme and the two files that get copied to the directory with the game exe
 
I had a go, and whilst sat in a station it did appear to be active (I could change the type via Ctrl F1) and it looked awful and had no performance impact. I use a Vive Pro 2 so the text is usually a good giveaway (being very clear) but with this enabled the aliasing was just awful (shimmering); turned it off and, back to crystal clear. I've played with the settings and will play some more (benefit of the doubt) but the text becoming smudgey just isn't worth it. At the 120fps mode, it sat at a solid 60fps pre and post useage so I'm not sure it's worth it for me.

More when I have some time to fiddle again.
 
Back
Top Bottom