跳转到内容

DLSS 2.0 — 把 4K 实时渲染的一半工作量交给神经网络

是什么

DLSS(Deep Learning Super Sampling)2.0 是 NVIDIA 把游戏画面的一半像素交给神经网络去补 的方案。日常类比:你拍快递包裹,每次拍 1080p 省时间,但相册里要的是 4K 大图——DLSS 是那个翻译员,拿过去几帧的清晰区域 + 这一帧的低清,拼出一张 4K 画面

输入端:

  • 当前帧的低分辨率渲染(比如 1080p)
  • 当前帧每个像素的 运动向量(motion vector,告诉它”这个像素上一帧在哪里”)
  • 上一帧的高分辨率输出

输出端:当前帧的 4K 画面。整套推理在 Tensor Core(NVIDIA RTX 显卡里的矩阵运算单元)上跑,每帧约 1.5 ms。

为什么重要

不理解 DLSS 2.0,下面这些事都说不通:

  • 为什么 2020 年之后 4K 60fps 在 RTX 2070 这种中端卡上突然变得可行
  • 为什么 GPU 厂商从此都在堆”AI 算力 / NPU”——这些晶体管一开始是给训练的,现在要参与每一帧渲染
  • 为什么 AMD 和 Intel 在 2021-2022 紧急做出 FSR / XeSS 跟进
  • 为什么云游戏、VR、Switch 2、iPhone Metal FX 都借鉴了”低分辨率渲染 + 时序重建”的模式

它是 深度学习第一次大规模进入实时渲染管线——以前 ML 是离线工具,DLSS 让它进入每帧 16 ms 的硬实时预算。

核心要点

DLSS 2.0 做对了三件事:

  1. 不是脑补,是搬运——网络的工作不是凭空生成细节,而是用 motion vector 把上一帧已经渲好的高分辨率像素到当前帧对应位置,再融合当前帧的新信息。靠时间维度换分辨率维度。

  2. autoencoder 网络替代 TAA + 超分两个手工模块——传统管线里 TAA(时序抗锯齿)和 spatial upscaler(空间超分)是两段写死的启发式代码。DLSS 把它们合成一个卷积网络(U-Net 风格),用 16K 离线渲染做 ground truth 训练。

  3. 单一通用模型——DLSS 1.0 每个游戏单独训练一个模型,效果差。2.0 改成一个通用网络夹在驱动里,所有支持 DLSS 的游戏共享。集成成本从”和 NVIDIA 联合训练数月”降到”游戏引擎多输出一个 motion vector”。

实践案例

案例 1:性能数字

RTX 2070 跑《Control》在 4K Ultra:

模式渲染分辨率GPU 帧时间观感
原生 4K3840×216033 ms (≈30 fps)
DLSS Quality2560×144022 ms (≈45 fps)接近原生
DLSS Performance1920×108016 ms (≈60 fps)略软但可接受

GPU 帧时间几乎砍半,但网络推理本身只占 1.5 ms——剩下省的全是渲染像素少了带来的红利。

案例 2:网络在做什么

低分辨率当前帧 (1080p RGB) ─┐
当前帧 motion vector ─┼──> [卷积 U-Net] ──> 4K 输出
上一帧 4K 输出 ─┘

网络输出的不是直接像素,而是融合权重——告诉硬件”这个 4K 像素,70% 来自上一帧 warp 后的位置,30% 来自当前帧的低分辨率上采样”。这种”输出权重而非输出像素”的设计避免了网络幻觉,让结果可控。

案例 3:HUD 必须放在 DLSS 之后

游戏渲染管线要改成:

3D 场景 (1080p) → DLSS → 4K 主画面 → 叠加 HUD/UI (4K 原生绘制)

如果 UI 在 1080p 就画好再被 DLSS 上采样,会糊和抖。这是接入 DLSS 时引擎最常踩的坑

案例 4:训练数据怎么来

NVIDIA 不是用真实游戏画面训练,而是:

  1. 用游戏引擎离线渲染 16K 超采样(每像素 64 样本)的 ground truth 帧
  2. 同一场景再渲染配对的 1080p 抖动序列 + motion vector
  3. 网络学习”从 1080p 序列重建出 16K 下采样到 4K 的画面”

损失函数包含三项:

  • L1 像素差(基础保真度)
  • VGG 感知损失(保持视觉结构)
  • 时序稳定性损失(相邻两帧输出不能跳动)

第三项是 DLSS 区别于普通超分模型的关键——它必须视频稳定而不只是单帧好看

踩过的坑

  1. Motion vector 不准 = ghosting(残影):透明物体、粒子特效、阴影投射器很容易算错运动向量,DLSS 拿错位置的旧像素补到当前帧,就会出现”前一帧的影子飘在新位置”。引擎要专门为 DLSS 输出更精确的 motion vector pass。

  2. 本身跑不动的场景开 DLSS 反而更糊:低于 30 fps 的输入意味着每帧的低分辨率信息变化太大,时序累积失败,重建模糊。Performance 模式(3x 放大)不适合救已经卡的卡。

  3. 以为 sharpening 是网络效果:DLSS 输出后游戏通常会再过一道 sharpener(锐化滤波)。很多人看到画面”清晰”以为是网络强,实际是后处理拉了对比度。关掉 sharpener 才看得到网络真实质量。

  4. 没 Tensor Core 跑不了:DLSS 推理 100% 走 Tensor Core。GTX 系列、AMD、Intel 显卡完全不能用。想跨硬件用 FSR(AMD,无 ML,纯算法)或 XeSS(Intel,有 ML,开源版本退化到通用 GPU)。

  5. 以为是空间超分:DLSS 是时序重建,必须有连续多帧才能工作。第一帧的 DLSS 输出几乎等于普通双线性上采样,要积累 4-8 帧之后才达到稳态质量。截图工具截的”DLSS 第一帧”看着糟,是测试方法不对。

适用 vs 不适用场景

适用

  • RTX 20/30/40/50 系显卡 + 游戏引擎能输出 motion vector
  • 目标分辨率 1440p 或 4K,原生渲染 1080p 起步
  • 需要稳定时间序列输出(游戏、实时影视预览、VR)

不适用

  • 无 Tensor Core 硬件 → 用 FSR / XeSS
  • 单帧输入超分(修旧照片、放大单图) → 用 Real-ESRGAN 这类离线超分
  • 科学可视化(要求每个像素物理正确) → DLSS 偶发 ghosting 不可接受
  • 本身帧率 < 30 fps → 输入信噪比太差,应该先降画质再开 DLSS

历史小故事(可跳过)

  • 2018 年 8 月:图灵架构发布,Tensor Core 进入消费卡。NVIDIA 用 Final Fantasy XV demo 演示 DLSS 1.0,画面模糊。
  • 2019 年:DLSS 1.0 商用,仅少数游戏支持,玩家普遍评价”开了不如不开”。NVIDIA 内部承认范式有问题:每游戏单独训模型不可扩展。
  • 2020 年 3 月:DLSS 2.0 随《Control》《MechWarrior 5》发布。改成单一通用网络 + 时序累积。画质口碑反转,开始被 AAA 游戏标配。
  • 2020 年 8 月:Edward Liu 在 GTC 公开本技术(即本资料)。
  • 2022:DLSS 3 加 frame generation(用 optical flow 网络插中间帧)。
  • 2024:DLSS 3.5 加 ray reconstruction(光线追踪去噪也并入同一网络)。

学到什么

  1. 时间换分辨率——DLSS 的核心 idea 不是”AI 生成”而是”把过去几帧的真实像素搬到当前位置”。理解这个,才知道为什么 motion vector 是命门。

  2. 网络输出权重而非像素——这是控制网络幻觉的关键设计,让 ML 进入对正确性敏感的图形管线成为可能。值得迁移到其它”ML 替换启发式管线”的场景。

  3. 从专用模型到通用模型是工程拐点——DLSS 1.0 → 2.0 的最大变化不是网络结构,是训练范式从”每游戏单训”变成”一个模型全适配”。这个模式在很多 ML 落地里都重演(专用 → 通用)。

  4. 硬件与算法互锁——没有 Tensor Core 推不动,没有 DLSS 这种杀手级应用 Tensor Core 也不会从训练卡下放到游戏卡。算法和硬件协同推进的典型样本。

延伸阅读

关联

  • burgess-2020-turing-rt —— 同代 Turing 架构白皮书,提供 DLSS 推理所需的 Tensor Core
  • nerf-2020 —— 同年神经渲染另一条路线,离线为主,与 DLSS 形成对照
  • 3d-gaussian-splatting —— 后续实时神经渲染的另一种途径,DLSS 偏后处理路线
  • kajiya-1986-rendering-equation —— 经典渲染方程,DLSS 是它在低采样率下的”近似器”
  • resnet —— DLSS 卷积 backbone 谱系上游
  • attention —— 后续 DLSS 3.5 引入注意力机制思路的源头

反向链接