DLSS Unlocked 是怎么工作的?从 dxgi.dll 代理挂钩到 MFG 解锁的完整技术链路深度剖析
DLSS Unlocked 是怎么工作的?从 dxgi.dll 代理挂钩到 MFG 解锁的完整技术链路深度剖析
DLSS Unlocked 是一个开源的 GPU 功能解锁工具,它通过 dxgi.dll 代理挂钩、OptiScaler 拦截和 nvapi 伪装,把 DLSS 帧生成(DLSS Frame Generation)、MFG 多帧生成(2X/3X/4X)以及 DLSS 神经渲染(DLSS-NR)解锁到 RTX 20/30/40 全系显卡上的任意原生支持 DLSS2/DLSS3 的 DirectX 12 游戏中。本文将从入口 DLL 讲起,完整拆解 MFG 解锁背后的技术链路。
一、它到底能解锁什么?
在了解原理之前,先明确 DLSS Unlocked 提供的核心能力:
| 功能 | 说明 | 对应显卡 |
|---|---|---|
| MFG 多帧生成(2X/3X/4X) | 原生 dlssg_sm86 解锁器 + Ada MFG 解锁器 |
RTX 20/30/40 |
| DLSS-G 帧生成桥接 | 将 Streamline DLSS-G 调用翻译为原生 DLSS FG / XeFG / FSR 3.1 FG | 全系 |
| DLSS-NR 神经渲染 | Pre-SR 多通道神经渲染后端 | 支持 DLSS 5 的游戏 |
| Linux / Proton 支持 | 干净的模块化布局,无驱动死锁 | 全平台 |
⚠️ 前提条件:游戏必须原生支持 DLSS 超分辨率(Upscaling)和 DLSS 帧生成,工具只能"解锁",不能"凭空创造"。详见 README.md。
二、总体架构:一次游戏启动的完整链路
整个解锁过程可以拆成 5 个阶段,每个阶段对应仓库中的一个模块:
游戏启动 → ① dxgi.dll 代理被加载
→ ② OptiScaler 挂钩 D3D12 / Swapchain
→ ③ nvapi64 代理伪装 GPU 架构
→ ④ MFG 解锁器放行帧生成校验
→ ⑤ DLSS-NR / DLSSG 桥接接管渲染管线
下面逐层剖析。
2.1 第一步:dxgi.dll 代理挂钩(入口)
Windows 加载 DLL 时遵循"目录优先"规则——游戏目录下的 DLL 会优先于系统目录加载。DLSS Unlocked 正是利用这一点:
- 把解锁模块命名为
dxgi.dll放进游戏目录,游戏初始化 DirectX 12 时加载的就是代理,而不是系统原版; - 代理内部先做挂钩工作,再转发(proxy)所有调用到真正的系统 dxgi.dll,因此对游戏完全透明。
安装器 DLSS unlocked.iss 提供了 4 种入口命名方案:
| 安装名 | 适用场景 |
|---|---|
dxgi.dll |
首选,适合 DX11/DX12 及 RE Engine 游戏 |
version.dll |
ReShade 兼容场景的替代挂钩 |
winmm.dll |
备选挂钩入口 |
plugins/dlss-unlocked.asi |
ASI 插件模式 |
此外 NVIDIA Environment/ 目录还附带了独立的 dxgi.dll 与 nvapi64-proxy.dll,用于处理显卡识别相关的环境问题。
2.2 第二步:OptiScaler 挂钩 D3D12 管线
代理入口加载后,核心的 OptiScaler 模块开始挂钩渲染管线。具体钩子开关在 nvngx.ini 的 [Hooks] 段落中可以精细控制:
HookD3D12:挂钩 D3D12 Swapchain 及其方法,是超分/帧生成接管的基础;HookSLProxy:当 NVIDIA Streamline(sl.interposer)在内存中时挂钩 Swapchain;HookFSR3Proxy:当 FSR3 运行时在内存中时同样挂钩,为 DLSSG→FSR3 桥接做准备;DisableEarlyHooking:控制非 nvngx 模式(dxgi.dll/winmm.dll 入口)下是否禁用早期挂钩,解决兼容性问题。
同文件的 [Spoofing] 段落则负责对 DXGI 报告伪装 NVIDIA GPU 信息(Dxgi=auto 默认开启),这是让游戏误以为显卡"支持帧生成"的关键一环。
2.3 第三步:nvapi64 代理与 GPU 架构伪装
游戏通常会调用 nvapi64.dll 查询显卡型号、显存大小,以决定是否允许开启帧生成。DLSS Unlocked 的 nvapi64-proxy.dll 在这一层截获查询并返回伪装结果。
命令行层面提供了精细控制(见 Troubleshooting.txt):
--dlss-arch=turing|ampere|ada:伪装不同的 NVIDIA GPU 架构;--dlss-gpu-name="ZZZ"/--dlss-gpu-vram=32g:覆盖报告的 GPU 名称与显存大小;--dlss-nvapi=mock/proxy/sys:选择使用 mock、proxy 还是系统原生 nvapi 接口;--dlss-reflex-fps=ZZZ:设置包含生成帧在内的帧率上限。
2.4 第四步:MFG 解锁——RTX 20/30 的核心戏码
多帧生成(MFG)本质上是让 GPU 每个实际渲染帧之间插入多个插值帧。NVIDIA 官方将其限制在 RTX 40 系上,而 DLSS Unlocked 通过多个上游解锁器解除限制:
dlssg_sm86(Turing/Ampere 原生解锁器):开箱即用,是 RTX 20/30 系 MFG 的主通路,安装后位于OptiScaler/dlssg_sm86/子目录;AdaMfgUnlock:RTX 40 系可一键切换到 Ada 架构的 MFG 解锁器,通过游戏内 Overlay 或OptiScaler.ini配置;- Dynamic MFG / NVSmooth30:动态帧生成与 RTX 30 系 Smooth Motion 解锁,对应 smooth-motion.asi(安装后重命名为
nvsmooth30.dll); - DLSS Enabler Headless:作为备选陪伴方案随包提供,对应 dlss-enabler.asi(安装为
dlss-enabler-headless.dll)。
使用 ReShade 的用户还可通过 SM86/ReShade.ini 获得 MFG 倍率热键:Ctrl+F2 至 Ctrl+F6 分别对应 2X~6X 生成,Ctrl+F10 切换 Dynamic 动态模式。
2.5 第五步:DLSS-G 桥接与 DLSS-NR 神经渲染
- DLSSG→FSR3 桥接:dlssg_to_fsr3_amd_is_better.dll 将 NVIDIA Streamline 的 DLSS-G 调用无缝翻译为原生 DLSS FG、XeFG 或 AMD FidelityFX FSR 3.1 FG 调用,其调试开关在 dlssg_to_fsr3.ini 的
[Debug]段落; - DLSS-NR 神经渲染:基于 wilsjo2 的 Pre-SR Multipass 后端,保留原生 SM75/SM86 MFG 解锁能力并提升 DLSS 5 兼容性,相关补丁后的 DLL(
nvngx_dlssnr.dll)随安装写入游戏目录。
三、配置与故障排查速查
🔧 常用排查手段(参数详见 Troubleshooting.txt):
| 参数 | 作用 |
|---|---|
--dlss-debug / --dlss-debug=extra |
在后台弹出调试控制台 |
--dlss-version |
报告用于启用帧生成的 DLL 版本 |
--dlss-hags=on + --dlss-skip-validation |
驱动不支持 HAGS 时模拟该功能 |
Ctrl+`` 连按两次 |
游戏内临时唤出调试控制台 |
Capcom / RE Engine 特别注意:该引擎有严格的内存与 Swapchain 完整性检查,需配合补丁版 REFramework dinput8.dll(安装包中的 "Patch REFramework" 选项),用于修复 XeFG 卡顿问题,说明见 REPatch/README.txt。
Linux / Proton 用户:除 DLL 覆盖外,还需添加启动参数:
WINEDLLOVERRIDES="dxgi=n,b" PROTON_ENABLE_NVAPI=1 PROTON_NVIDIA_NVCUDA=1 %command%
Proton 下 DX12 游戏若开启 OptiScaler 菜单崩溃,可将 OptiScaler.ini 中 [Menu] 的 OverlayMenu 设为 false。
四、仓库结构导览
| 目录/文件 | 职责 |
|---|---|
| NVIDIA Environment/ | dxgi 代理、nvapi64 代理、dlss-finder 识别模块 |
| Dll version/ | 核心代理 DLL 与 nvngx.ini 全量配置 |
| DLLSG mod/ | DLSSG→FSR3 桥接模块 |
| SM86/ | Turing/Ampere 伴生模块与 ReShade 热键配置 |
| REPatch/ | RE Engine 补丁版 REFramework |
| Licenses/ | Streamline、FidelityFX、XeSS、REFramework 等授权与免责声明 |
| DLSS unlocked.iss | Inno Setup 安装器脚本(可阅读了解完整打包链路) |
五、风险与合规提示 📌
- 该项目为独立开源社区改造工具,与 NVIDIA/AMD/Intel 及任何游戏厂商无关联;
- 仅建议用于单机游戏,多人与反作弊环境使用可能导致封号,LICENSE 与 License (DLSS unlocked).txt.txt) 中均有明确声明;
- 完整法律说明见 Licenses/DISCLAIMER.txt。
总结
DLSS Unlocked 的精髓在于一条环环相扣的链路:dxgi.dll 代理抢占加载 → OptiScaler 挂钩 D3D12 管线 → nvapi64 代理伪装 GPU 能力 → MFG 解锁器放行帧生成校验 → DLSS-NR/FSR3 桥接接管渲染。理解这条链路后,无论是排查兼容性问题还是精细调参,你都知道该从哪一层下手。