Foveated Rendering for VR

With the exponential progress of display technology, I wouldn’t be surprised that headset resolutions will reach 8K/eye within a few years (at which time there is little need for further increases since we will practically have reached human eye resolution).

However, it would take at least a few more generations of CPUs & GPUs (I9-15900, RTX 50xx?..) to be able to render at 90 fps.

In the meantime, if foveated rendering manages to elevate the rendering rate consistently above 45 fps in VR, reprojection (despite its imperfections) can help bridge the gap with 1 interpolated frame every 2 (instead of the current 2 interpolated frames out of 3).

1 Like

Why is this marked down as “Not VR Specific” in the weekly feedback snapshot?!

Someone needs to address this with the Devs as it’s very clearly specific to Eye Tracking devices which include VR.

2 Likes

Exactly. It doesn’t even have to support eye tracking (not many devices do) - it’s enought to do a “fixed foveated rendering” - so just the central regiou would be more hi-res, while surrounding regions, which are not as sharp due to lenses anyway, will have less resolution

Fixed foveated rendering (FFR) is good enough for those of us without eye tracking in our HMD. It has definite benefit. As much as I think the “metaverse” is a pile of old ■■■■, I am hoping it will shed enough light on VR/AR technology that software developers will start taking it seriously enough to include basic stuff like FFR into their software without us having to rely on 3rd party addons.

While it’s true that Foveated Rendering isn’t VR specific, the increase in performance that it can bring would be much more noticeable in VR due to much higher demand on CPU and GPU resources.

So I would argue that it is very much a VR specific wish :slightly_smiling_face:

1 Like

Well, the good news is, soon enough, you should all be able to make up your own opinion!


Very first screenshot of VR Fixed Foveated Rendering working in Flight Simulator 2020 with the OpenXR Toolkit

This is super WIP (Work In Progress) but very promising. If you take a closer look at the screenshot, you’ll be able to see the image going half resolution, then one quarter resolution, the further we go from the center of the screen! On this particular scene, the gain with FFR on was +8FPS (but with some noticeable degradation), and with some less aggressive foveation settings (almost no noticeable degradation), about +6FPS.

PS: I just got this working 10 minutes ago. So NO, IT’S NOT RELEASED YET, and it will not be for a little while.

16 Likes

Wow! I knew you would come up with something!
Hope you’ll be able to further improve the gain, but anything is better than nothing :rofl:
Thanks for your hard work and looking forward to seeing it released!

1 Like

There’s not much more to do for the perf, but just like the upscaling stuff, it’ll come down to finding the best settings. Like how big the foveation regions. There’s some guidance in the Nvidia SDK, and so far I tested “Highest performance” with the “Balanced” pattern (even though I actually have exposed all the knobs to customize every setting independently):

image

Personally I found that “Balanced” wasn’t that great, because you could see the lower resolution too much. So I started widening the foveation towards “Wide”, but of course this reduced the FPS gain a little bit.

Maybe some won’t be as sensitive. Also it will likely depend on the optics of your headset.

I want to look into the super-sampling options (VRSS), however since the game does not seem to support MSAA out of the box (but please prove me wrong), this is a much much larger effort, perhaps not possible.

EDIT: Also just to be clear, VRS will only work on Nvidia cards when using DX11. AMD does not provide support for DX11. I’ll try to get VRS to work with AMD when using DX12, but this will be best I can do.

1 Like

Sounds promising, or rather more than before.

That was a different discussion @notsofearless. That discussion you quoted was for applying the upscaling/sharpening pass only to a region.

Here we are talking about a different technology, where were ask the GPU to throttle down it’s pixel rasterization for certain regions. This is much much higher bang for the buck, because the rasterization is one of the most demanding phase of rendering (vs the sharpening being much much smaller in terms of time).

2 Likes

Asobo announced during the Jan/27 Development Update that they are working on DLSS and they seem to be pretty happy about it, so that’s something else we should be watching…

Luckily, I have Nvidia.
It would be interesting to find out how many of us have Nvidia and how many have AMD.

1 Like

Yep, the https://github.com/fholger/vrperfkit fixed foveated rendering works well with raster VRS in sims, which is what I was trying (and failing) to say before. No matter, and it is good you’re finding similar benefits on this side now.

1 Like

What an exciting time, imagine the synergistic results when many technologies are applied simultaneously!

1 Like

This is a fantastic addition. Could you allow us to set up the ring sizes (fraction of 100%) via the config menu? This is what vrperfkit does but via a config file (Which I believe you are trying to avoid). It has 4 rings… max_res, max_res / 2, max_res / 4, max_res / 16

Yes it works like that already. Will probably add a few presets for people in a hurry and leave the custom menu for advanced users

4 Likes

As an FYI, vrperfkit uses VRSS and it works quite nicely. I think 4 rings is great because you can set the very outer ring to 1/16th of your normal res and I don’t notice it at all. It is of course very dependent upon what headset you use and how big your sweet spot is I guess.

That’s not how VRSS works, VRSS is about supersample so its not a fraction.

Big fan of that project myself but I can show you specifically the code that does VRS only:

https://github.com/fholger/vrperfkit/blob/6f6b08a0d09eff26bcd93809275bf683953b3869/src/d3d11/d3d11_variable_rate_shading.cpp#L227

VRSS requires the game to support MSAA, its not something controllable outside the game.

Yeah, sorry, I meant the ring size being a fraction (of total ring size). Looks like sampling is fixed at 2, 4, 16. I guess I simplified mDidn’t realise its based on MSAA though which I guess gives you some restrictions if MSAA is unavailable. Still, I’m sure you’ll work something out :smiley: Looking forward to whatever you come up with.

Edit: Ahh, I think I see what you mean. I simplified my description as being a 1/16th of the resolution, but its a “sampled” 4x4 resulting in a 16th of the max resolution.

Yes you are right I misrepresented the available resolutions. However going back to your suggestion I was planning on having 3 rings, not 4. I’m not convinced that a 4th ring helps, but I guess I’ll have to try.

As ever great work @mbucchia , I wonder how this would tie in with a smaller FOV :thinking: obviously something to play with when you release it and I’m very much looking forward to that.

Something that does play on my mind though is potential eye issues, I find I’m constantly glancing my eye around the view rather than turning my head to the use the"sweet spot". With even more lower Res edge areas in the G2 I can see this may affect eyesight, again as above not something anyone can know until it’s in use so just food for thought (for me at least!).

Regardless as above great work, but I do find it a shame that we have to continually rely on community modders to make VR better. Asobo have a VR team, the head Devs use VR themselves - they need to pull their fingers out quite frankly and get a move on.
Talking about it in the next Q&A is one thing, but it’s time to see results not listen to continuous chat about the topic of improving VR.

1 Like