Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenVR Dynamic Resolution does not work with certain games #16

Open
Crimson-foxGITHUB opened this issue Jun 6, 2023 · 13 comments
Open
Labels
documentation Improvements or additions to documentation

Comments

@Crimson-foxGITHUB
Copy link
Contributor

Crimson-foxGITHUB commented Jun 6, 2023

I decided to test Propagation VR with your application running, and it didn't change the resolution at all, even when increasing graphics settings to the maximum. UE4 handles resolution scaling stuffs a little differently, and I've noticed that not a single working title listed in WorkingGames.md as of typing this runs on Unreal Engine: every single game listed uses Unity in some form.

@Crimson-foxGITHUB Crimson-foxGITHUB changed the title OpenVR Dynamic Resolution does not work with Unreal Engine 4 games OpenVR Dynamic Resolution does not work with Unreal Engine games Jun 6, 2023
@Erimelowo
Copy link
Owner

Was #15 solved?

@Erimelowo Erimelowo added the documentation Improvements or additions to documentation label Jun 7, 2023
@Crimson-foxGITHUB
Copy link
Contributor Author

Was #15 solved?

maybe?

@Erimelowo
Copy link
Owner

Great, can you still confirm that no unreal engine games work now? I’ll add a note about it if yes.

@Crimson-foxGITHUB
Copy link
Contributor Author

Crimson-foxGITHUB commented Jun 9, 2023

Tested both Propagation VR and Project Wingman with the upscaler. Both games use the deferred renderer with TAA as an anti-aliasing option, both games had "resolution scale" as options in their graphics menus, and both games would make OpenVR Dynamic Resolution change the global resolution, but absolutely nothing happened in-game.

Deferred rendering in VR is much more common with UE4 games, but Skyrim VR also uses it. Beat Saber in a recent update switched from regular Unity forward rendering to a new mode called Single-Pass Stereo. (a Unity 2021 feature, which might explain why both it and After the Fall don't work)

Worth noting however that whenever VRChat does update to Unity 2021, I doubt they are going to use Single-Pass Stereo because it completely changes the way shaders need to be written and would break legacy compatibility way, WAY more than the jump to Unity 2019 did.

@Crimson-foxGITHUB
Copy link
Contributor Author

Crimson-foxGITHUB commented Jun 9, 2023

Tested out Bullet Train through Revive. TAA, the app gives resolution changes the game doesn't respond to, same story. Bullet Train doesn't even have a graphics menu, by the way.

I turn up the resolution: the framerate stays low
I turn down the resolution: the app suggests 500% global res

@Crimson-foxGITHUB Crimson-foxGITHUB changed the title OpenVR Dynamic Resolution does not work with Unreal Engine games OpenVR Dynamic Resolution does not work with Unreal Engine games or any OpenXR game Jun 9, 2023
@Crimson-foxGITHUB
Copy link
Contributor Author

I tested out Google's WebXR sample using Google Chrome 114 and it was completely unresponsive to global resolution changes. Given that a couple of OpenXR-only titles are listed as "not working" this leads me to believe that any OpenXR-only game will not work with this application.

@Erimelowo
Copy link
Owner

I don’t believe OpenXR is a problem, as this can 100% work on post 2019 Unity games (e.g. games using 2021 Unity...)

@Erimelowo Erimelowo changed the title OpenVR Dynamic Resolution does not work with Unreal Engine games or any OpenXR game OpenVR Dynamic Resolution does not work with Unreal Engine games. Jun 9, 2023
@Crimson-foxGITHUB
Copy link
Contributor Author

I don’t believe OpenXR is a problem, as this can 100% work on post 2019 Unity games (e.g. games using 2021 Unity...)

It's a question of which render mode they're using. Worth noting however that OpenVR FSR and VR Performance Toolkit do actually work with some UE4 games because they're using a different method to affect resolution.

@Erimelowo
Copy link
Owner

Yes, so it has nothing to do with OpenXR.

From what you're saying, it seems deferred rendering is the culprit, but that it doesn't apply to all games from any category, as it's the developer's choice, is that right?

@Crimson-foxGITHUB
Copy link
Contributor Author

Crimson-foxGITHUB commented Jun 9, 2023

Yes, so it has nothing to do with OpenXR.

From what you're saying, it seems deferred rendering is the culprit, but that it doesn't apply to all games from any category, as it's the developer's choice, is that right?

Deferred rendering is developer-choice & engine-specific. Deferred rendering has a higher base cost than forward renderer, is much worse for transparency, & doesn't support MSAA, but doesn't need to calculate lighting for every pixel in the entire scene.

Worth noting that TWD:S&S does use forward rendering but isn't supported...

As for Single-Pass Stereo, I have no explanation as to why it'd cause Beat Saber to break, other than that the game already had a built-in resolution scaler:

which leaves me confused as to why BONEWORKS works correctly, but BONELAB doesn't.

@Crimson-foxGITHUB
Copy link
Contributor Author

update: figured out that it's not DX11-only, Vulkan works just fine

@Erimelowo Erimelowo changed the title OpenVR Dynamic Resolution does not work with Unreal Engine games. OpenVR Dynamic Resolution does not work with certain games Jun 10, 2023
@Crimson-foxGITHUB
Copy link
Contributor Author

After testing Hellsplit Arena and seeing that it didn't work, I decided to look into how Unreal Engine handles screen resolutions. Turns out, the reason it works so well with Unity games is because Unity natively supports variable custom screen resolutions as an engine feature. Unreal Engine requires you to manually script resolution changes, and has a resolution scaler built-in.

I assume this is why Epic did not program Unreal Engine to support resolution changes via OpenVR calls in this manner, unlike Unity.

@kruemmelbande
Copy link
Contributor

I tested population one, and it seemed to not really work, bui I'll do further testing tomorrow

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

3 participants