Skip to content

Latest commit

 

History

History
181 lines (136 loc) · 13.2 KB

README.md

File metadata and controls

181 lines (136 loc) · 13.2 KB

opti-logo

OptiScaler is a middleware that enables manipulation with various upscaling tech in temporal upscaler-enabled games.

While previously only DLSS2+ inputs were supported, newer versions also added support for XeSS and FSR2+ inputs (with some caveats-*). For example, if a game has DLSS only, the user can hook over DLSS and replace it with XeSS or FSR 3.1 (same goes for an FSR or XeSS-only game). It also offers extensive customization options for all users, including those with Nvidia GPUs using DLSS.

Key aspects of OptiScaler:

  • Enables usage of XeSS, FSR2, FSR3 and DLSS in upscaler-enabled games
  • Allows users to fine-tune their upscaling experience
  • Offers a wide range of tweaks and enhancements (RCAS & MAS, Output Scaling, DLSS Presets, Ratio & DRS Overrides etc.)
  • With version 0.7.0 and above, added experimental frame generation support with possible HUDfix solution (OptiFG by FSR3)
  • Supports integration with Fakenvapi which enables Reflex hooking and injecting Anti-Lag 2 or LatencyFlex (LFX)
  • Since version 0.7.7, support for Nukem's FSR FG mod dlssg-to-fsr3 has also been added

[*] Regarding XeSS, Unreal Engine plugin does not provide depth, and as such renders XeSS hooking in UE pointless (recommended to set XeSS=false in nvngx.ini for such games). Regarding FSR inputs, FSR 3.1 is the first version with a fully standardised and forward-looking API and as such removed custom interfaces. Since FSR2 and FSR3 support custom interfaces, game support will depend on the developers' implementation. Always check the Wiki Compatibility list for known issues.

How it works?

OptiScaler implements the necessary API methods of DLSS2+ & NVAPI, XeSS and FSR2+ to act as a middleware. It interprets calls from the game and redirects them to the chosen upscaling backend, allowing games using one technology to use another of your choice.

Official Discord Server: DLSS2FSR

This project is based on PotatoOfDoom's excellent CyberFSR2.

Which APIs and Upscalers are Supported?

Currently OptiScaler can be used with DirectX 11, DirectX 12 and Vulkan, but each API has different sets of upscaler options.

For DirectX 12

  • XeSS (Default)
  • FSR2 2.1.2, 2.2.1
  • FSR3 3.1 (and FSR2 2.3.2)
  • DLSS

For DirectX 11

  • FSR2 2.2.1 (Default, native DX11)
  • FSR3 3.1.2 (unofficial port to native DX11)
  • XeSS 1.x.x, FSR2 2.1.2, 2.2.1, FSR3 3.1 & FSR2 2.3.2 (via background DX12 processing) [*]
  • DLSS (native DX11)
  • XeSS 2.x (soon™, but Intel ARC only)

[*] These implementations use a background DirectX12 device to be able to use Dirext12-only upscalers. There is a 10-15% performance penalty for this method, but allows much more upscaler options. Also native DirectX11 implementation of FSR 2.2.1 is a backport from Unity renderer and has its own problems of which some were fixed by OptiScaler. These implementations do not support Linux and will result in a black screen.

For Vulkan

  • FSR2 2.1.2 (Default), 2.2.1
  • FSR3 3.1 (and FSR2 2.3.2)
  • DLSS
  • XeSS 2.x (soon™)

Installation

Warning: Do not use this mod with online games. It may trigger anti-cheat software and cause bans!

Install as non-nvngx (For enabling all features like Frame Gen)

To overcome DLSS 3.7's signature check requirements, I implemented a method developed by Artur (creator of DLSS Enabler). Later, this method increased the compatibility of OverlayMenu, allowed OptiScaler to spoof DXGI and Vulkan, let users override the nvapi64.dll and even let users to force Anisotropic Filtering and Mipmap Lod Bias. In short, this installation method allowed OptiScaler to provide more features to users.

Step-by-step installation (Nvidia users, please skip to step 3):

  1. We need an Nvidia signed dll file to bypass signature checks. All games that support DLSS come with nvngx_dlss.dll. Most of the time it's in the games exe folder (e.g. for Unreal Engine games it's <path-to-game>\Binaries\Win64\). Some games and engines keep these third party dll's in different folders (like plugins). So we need to find the nvngx_dlss.dll file and copy it to the games exe folder. If it's already in the games exe folder, make a copy of it. (You can also just download one from the internet if you don't want to search for it)
  2. Rename the copy of nvngx_dlss.dll in the games exe folder to nvngx.dll.
  3. Rename OptiScaler's nvngx.dll to one of the supported filenames (I prefer dxgi.dll) [1].
  4. Copy the renamed OptiScaler file along with the rest of the archive files to your game's executable folder.
  5. If your GPU is not an Nvidia one, check GPU spoofing options.

Alternatively, you can also extract all of the Optiscaler files by the main game exe and try the new OptiScaler Setup.bat file which should help you automate the renaming process.

Example of correct installation (with additional Fakenvapi and Nukem mod)

Installation

OptiScaler supports these filenames

  • dxgi.dll
  • winmm.dll
  • version.dll
  • wininet.dll
  • winhttp.dll
  • OptiScaler.asi (with an ASI loader)

[1] Linux users should add renamed dll to overrides:

WINEDLLOVERRIDES=dxgi=n,b %COMMAND% 

If there is another mod (e.g. Reshade etc.) that uses the same filename (e.g. dxgi.dll), if you rename it with the -original suffix (e.g. dxgi-original.dll), OptiScaler will load this file instead of the original library.

Alternatively, you can create a new folder called plugins and put other mod files in this folder. OptiScaler will check this folder and if it finds the same dll file (for example dxgi.dll), it will load this file instead of the original library.

image

Please don't rename the ini file, it should stay as nvngx.ini.

OptiFG (powered by FSR3 FG) + HUDfix (experimental HUD ghosting fix)

OptiFG was added with 0.7 builds and is only supported in DX12. It uses FSR3 FG to enable Frame Generation in every DX12 upscaler-enabled games, however it's not so simple. Since FSR3 FG doesn't support HUD interpolation itself, it requires a HUDless resource provided by the game to avoid HUD ghosting. In games without native FG, Optiscaler tries to find the HUDless resource when the user enables HUDfix. Depending on how the game draws its UI/HUD, Optiscaler may or may not be successful in fixing these issues. There are several options for tuning the search. A more detailed guide will be available in the Wiki, along with a list of HUDfix incompatible games.

Install as nvngx.dll (deprecated, limited features, FG and Overlay Menu will be disabled)

Step-by-step installation:

  1. Download the latest relase from releases.
  2. Extract the contents of the archive next to the game executable file in your games folder. (e.g. for Unreal Engine games it's <path-to-game>\Binaries\Win64\) [1]
  3. Run EnableSignatureOverride.reg from DlssOverrides folder and confirm merge. [2][3]
  4. If your GPU is not an Nvidia one, check GPU spoofing options.

[1] This package contains latest version of libxess.dll and if the game folder contains any older version of the same library, it will be overwritten. Consider backing up or renaming existing files.

[2] Normally Streamline and games check if nvngx.dll is signed, by merging this .reg file we are overriding this signature check.

[3] Adding signature override on Linux - There are many possible setups, this one will focus on Steam games:

  • Make sure you have protontricks installed
  • Run in a terminal protontricks regedit, replace with an id for your game
  • Press "registry" in the top left of the new window -> Import Registry File -> navigate to and select EnableSignatureOverride.reg
  • You should see a message saying that you successfully added the entries to the registry

If your game is not on Steam, it all boils down to opening regedit inside your game's prefix and importing the file.

Update OptiScaler version when using DLSS Enabler

  1. Delete/rename dlss-enabler-upscaler.dll in game folder
  2. Extract nvngx.dll file from OptiScaler 7zip file to a temp folder
  3. Rename nvngx.dll to dlss-enabler-upscaler.dll
  4. Copy dlss-enabler-upscaler.dll from temp folder to the game folder

Uninstallation

  • Run DisableSignatureOverride.reg file
  • Delete EnableSignatureOverride.reg, DisableSignatureOverride.reg, nvngx.dll, nvngx.ini files (if you used Fakenvapi and/or Nukem mod, then also delete fakenvapi.ini, nvapi64.dll and dlssg_to_fsr3 files)
  • If there was a libxess.dll file and you have backed it up, delete the new file and restore the backed up file. If you overwrote/replaced the old file, DO NOT delete libxess.dll file. If there was no libxess.dll before, it's safe to delete. Same goes for FSR files (amd_fidelityfx).

Features

  • Supports multiple upscaling backends (XeSS, FSR 2.1.2, FSR 2.2.1, FSR 3.1 and DLSS)
  • Experimental support for frame generation (OptiFG by FSR) with version 0.7.0 and above
  • Supports DLSS 3.7 and above (check installation instructions)
  • Supports DLSS-D (Ray Reconstruction) on Nvidia cards (Supports changing presets and using OptiScaler enhancements)
  • Ability to modify DLSS/DLSS-D presets on the fly
  • Supports XeSS v1.3.x's Ultra Performance, NativeAA modes (Not using default XeSS 1.3.x scaling ratios, rather the old ones)
  • An in-game menu for tuning and saving settings on the fly (Shortcut key is INSERT)
  • Full integration with DLSS Enabler for DLSS-FG support
  • RCAS support with MAS (Motion Adaptive Sharpening) for all Dx12 & Dx11 upscalers
  • Output Scaling option (0.5x to 3.0x) for backends running on Dx12 & Dx11
  • Supports DXGI spoofing (when running as dxgi.dll) as Nvidia GPUs (with XeSS detection to enable XMX on Intel Arc cards)
  • Supports Vulkan spoofing (needs to be enabled from nvngi.ini) as Nvidia GPUs (not working for Doom Eternal)
  • Supports loading specific nvapi64.dll file (when running in non-nvngx mode)
  • Supports loading specific nvngx_dlss.dll file (when running in non-nvngx mode)
  • Supports overriding scaling ratios
  • Supports overriding DRS range
  • Autofixes for colored lights on Unreal Engine & AMD graphics cards
  • Autofixes for missing exposure texture information
  • Ability to modify Mipmap Lod Bias game value
  • Supports Fakenvapi integration which enables Reflex hooking and injecting Anti-Lag 2 or LatencyFlex (LFX)
  • Supports Nukem's FSR FG mod dlssg-to-fsr3 (since version 0.7.7)

Configuration

Please check this document for configuration parameters and explanations. (Will be updated)

Known Issues

If you can't open in-game menu:

  1. Please check that you have enabled DLSS, XeSS or FSR from game options
  2. Please try opening menu while you are in-game (while 3D rendering is happening)
  3. If you are using RTSS (MSI Afterburner, CapFrameX), please enable this setting in RTSS and/or try updating RTSS.

image

Please check this document for the rest of the known issues and possible solutions for them. Also check the community Wiki for possible game issues and HUDfix incompatible games.

Compilation

Requirements

  • Visual Studio 2022

Instructions

  • Clone this repo with all of its submodules.
  • Open the OptiScaler.sln with Visual Studio 2022.
  • Build the project

Thanks

  • @PotatoOfDoom for CyberFSR2
  • @Artur for DLSS Enabler and helping me implement NVAPI correctly
  • @LukeFZ & @Nukem for their great mods and sharing their knowledge
  • @FakeMichau for continous support, testing and feature creep
  • @QM for continous testing efforts and helping me to reach games
  • @TheRazerMD for continous testing and support
  • @Cryio, @krispy, @krisshietala, @Lordubuntu, @scz, @Veeqo for their hard work on compatibility matrix
  • And the whole DLSS2FSR community for all their support

Credit

This project uses FreeType licensed under the FTL