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

idea: rebrand as a drop in replacement for DLSS #2

Open
gabboman opened this issue Jun 25, 2022 · 19 comments
Open

idea: rebrand as a drop in replacement for DLSS #2

gabboman opened this issue Jun 25, 2022 · 19 comments

Comments

@gabboman
Copy link

as stated in the mod description, in THEORY could be used in other games.

Here is the idea: rebrand the project as a "dlss2fsr". once its stable. Maybe now is the time of doing that instead of more down the road when there are cyberpunk specifick hacks.

is this idea crazy?

regards

a guy who has no clue on gamedev and is actually a web developer

@PotatoOfDoom
Copy link
Owner

No, your idea is not that crazy. Actually, I've thought of something like that myself. I just need the time and access to the other DLSS games to actually do it. Still, I'm going to have to tweak the project for every single game anyways, so it doesn't really matter if I start with cyberpunk or any other game. Odds are I'll be able to use code and findings from cyberpunk for other games.

@Deus-nsf
Copy link

Deus-nsf commented Jun 26, 2022

Your project is literally DXVK, but for FSR 2.0, this has the possibility to gain a lot of momentum, I completely endorse the idea to evolve this project into a bigger thing.
Doing game specific tweaks seems unavoidable yeah, but DXVK does it as well, there isn't a very huge list of DLSS 2.0 games though, and even less that really benefits from it.

@GabrielSVieira97
Copy link

GabrielSVieira97 commented Jun 26, 2022

I can't wait to see in other games. You are the best. I can finally play cyberpunk with my GTX 1660 super and my 4k monitor.

@Daist
Copy link

Daist commented Jun 26, 2022

Totally agree, would be great to see it in other games like Metro Exodus.

@p0ryae
Copy link

p0ryae commented Jun 26, 2022

I vouch. If this mod globally works on most games with DLSS support then this project will be a big one for sure!

@mnxn
Copy link
Contributor

mnxn commented Jun 30, 2022

I am very happy to report that I successfully got this mod working with Dying Light 2 (changes, download).

I'll describe some of my findings here (I apologize for the large comment):

  • Dying Light 2 checks SuperSampling.FeatureInitResult instead of SuperSampling.Available to enable DLSS.

  • To get/set the width and height, Dying Light 2 uses DLSS.Render.Subrect.Dimensions.Width and DLSS.Render.Subrect.Dimensions.Height instead of just Width and Height. This was the biggest obstacle to getting FSR 2.0 working in the game. Before I added these parameters to Util::NvParameter and handled them in Dx12ParameterImpl, all 3D elements of the main menu and in-game were rendered as a black screen. I also found out that ffxFsr2ContextDispatch returns FFX_ERROR_OUT_OF_RANGE when those parameter are not handled.

I'm not familiar enough with the DLSS API to know if these parameters are a standard way to check for and use DLSS, but adding them does not interfere with the parameters that Cyberpunk uses. If the goal is to support as many DLSS games as possible, investigating and implementing the parameters that different games use is an important part of the process.

I tried to implement ViewMatrixHook in the same way as it is done for Cyberpunk2077.exe, but unfortunately quickly ran into some difficulties. Although I could find the vertical field of view value in the game's memory, I couldn't get a static address to it or find the near/far plane values at all. Luckily, from my testing it seems that these values are not as important as I expected (at least in Dying Light 2).

  • For the field of view, while using a lower value than the actual in-game FOV reduces the image quality, using a larger FOV did not appear to change the image quality. I hardcoded ViewMatrixHook::GetFov to return a vertical field of view of 77, the largest value possible to set from the in-game menu. When I decreased the in-game FOV to the minimum of 47, the image quality appeared to be good even though the FSR 2.0 library was receiving a larger value. Even in Cyberpunk, using a larger FOV for FSR than the in-game value did not appear to change image quality.

  • For the near/far plane values, I set them to as large of a range as possible. Specifically, ViewMatrixHook::GetNearPlane returned zero and ViewMatrixHook::GetFarPlane returned a floating point infinity value. I am less certain that these values will work in other games, especially since the far plane "is used only used in case of non infinite depth", but it seemed to work fine in Dying Light 2.

If using fixed values like these works for most other games, it would be possible to provide suitable defaults for the ViewMatrixHook functions and only access the game's memory for the actual values if necessary. To do that, the mod would need to check the output of GetModuleHandleW to make sure it's not zero before dereferencing a possibly invalid memory address on the next line.

I hope some of the information here will be useful for anybody trying to get FSR 2.0 working in other games. In the meantime, I'll try to send PRs for some of the fixes and changes. I too hope that this can be a drop-in replacement for DLSS in the future.

Finally, I want to thank you directly, @PotatoOfDoom, because you made it possible for me to run both Cyberpunk 2077 and Dying Light 2 with better performance and minimal quality loss. I appreciate that both AMD's FSR 2.0 and this mod is open source as it makes it possible to add better upscaling to these games when the game developers haven't done so already.

@PotatoOfDoom
Copy link
Owner

@mnxn First of all, thank you for your contributions. I agree with your first 2 points and have already merged your PRs.
Regarding the ViewMatrixHook thing: I know it is really a barebones solution right now and nothing really substantial. I didn't touch it yet because I want to refactor the entire codebase anyways.

I think another solution for now would be to put the ViewMatrixHook values into an ini file next to the dll. That should make editing depth and fov easy enough for users until someone with cheatengine knowledge properly fetches those values.

@mnxn
Copy link
Contributor

mnxn commented Jun 30, 2022

An ini file is an excellent idea and I can't believe I didn't mention it.
Some users on Nexus have also expressed interest in tweaking other settings for the upscaling, so an external configuration file is definitely the way to go.

@ABagOfPotato
Copy link

ABagOfPotato commented Jul 1, 2022

Just thought I'd chime in, thanks to @mnxn using their version it appears to also work in Guardians of the galaxy! There is some weird artifacting but it definitely works!

Edit: Should point out that the artifacting was using Ultra Performance mode, and it doesn't seem to be present in higher qualities, at least not the the same effect.

@GabrielSVieira97
Copy link

@ABagOfPotato did you tried on other games as well?

@Xer0o
Copy link

Xer0o commented Jul 4, 2022

@GabrielSVieira97 Metro Exodus Enhanced Edition

@GabrielSVieira97
Copy link

Okay. So far, in my tests, GTX 1660 super, 4k monitor. The cyberpunk works very well, the @mnxn dying light mod I tested in Marvel's Guardions of the galaxy and it's pretty good too, except for the ultraperfomance mode that does not work. The red dead mode is really bad in my game, tooo much flickering, at least for now, in any mode. Didn't test dying light or metro exodus, cause I don't have thoses games, but I did tried the @mnxn one in control, it does work, but bad, too much ghosting in that game, probably cause of the way of the game. But it's a blessing seeing this works in games, hope you guys keep working. I apreciatte a lot!! Thanks.

@mnxn
Copy link
Contributor

mnxn commented Jul 7, 2022

Now that #11 is merged and this version of the mod supports multiple games, I think the project can start rebranding.

@PotatoOfDoom: what do you think?

@GabrielSVieira97
Copy link

@mnxn @PotatoOfDoom It would be awesome to have some guide or video to "noobs", like me, on how to use the ini file corretctly in others gamers. Or maybe some list were people can post the values that they are using in others games. Thanks anyway 😃.

@AkiraJkr
Copy link
Contributor

What about IU2FSR? 🤷
Image Upscaler to FSR?

@koffiato
Copy link
Contributor

koffiato commented Aug 6, 2022

We probably should create a compatibility chart too. I just tried Death Stranding Director's Cut and Master branch works.

@koffiato
Copy link
Contributor

koffiato commented Aug 6, 2022

Found this, might be useful. I don't know who the source is, though. https://docs.google.com/spreadsheets/d/1XyIoSqo6JQxrpdS9l5l_nZUPvFo1kUaU_Uc2DzsFlQw/edit?disco=AAAAdL7GHNM#gid=0

@TheRazerMD
Copy link

@koffiato that's the official spreadsheet pinned on the Discord server. It's by @AkiraJkr

@koffiato
Copy link
Contributor

koffiato commented Aug 7, 2022

@TheRazerMD we should incorporate this into readme for easy access. I already created a PR and this'd be a good addition imo

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

No branches or pull requests