立即注册
登录
搜索
前端开发
后端开发
虚幻引擎
U3D引擎
体感研发
数据库
论坛
BBS
本版
帖子
用户
麒麟软控
»
论坛
›
麒麟软控
›
虚幻引擎
›
DLSS 3, FSR 2, TSR? 简析 UE5 超分辨率的方法
返回列表
发新帖
DLSS 3, FSR 2, TSR? 简析 UE5 超分辨率的方法
小小袋鼠
小小袋鼠
当前离线
积分
11
3
主题
5
帖子
11
积分
新手上路
新手上路, 积分 11, 距离下一级还需 39 积分
新手上路, 积分 11, 距离下一级还需 39 积分
积分
11
发消息
发表于 2023-1-25 07:42:17
|
显示全部楼层
题图来自 Upscale SDK comparison
说起提升帧率,绕不开的就是超分辨率。Temporal Super Resolution (TSR) 是 UE5 的内置超分方法,属于 UE4 TAAU 的升级版;另外两个是显卡厂商以插件形式提供的方法,可以便利地适配至游戏。
阅读本文前,建议先了解 TAA 抗锯齿技术:
DLSS 3
先简要说下 NVIDIA DLSS 3 吧,已经不是单纯的超分了,约等于 DLSS2 + MEMC(运动估计补偿),不过大部分的运动向量是现成就有的,除了阴影等的渲染效果会使用估计值。运动估计需要光流加速器,40 系最佳适配,30 系也有但比较孱弱。
MEMC 这个东西在视频上用的多,但是播放视频和游戏有个本质上的区别,解码的内容是有缓冲的,因此可以在 n 和 n+1 帧之间插值,而游戏哪来的 n+1 帧呢?做法也很简单粗暴,就是等 n+1 渲染完,去合成 n+0.5,外加强制开启 NV 自家的 Reflex,尽可能降低帧渲染到显示的延迟,粗略来说延迟 DLSS 2 < DLSS 3 ≈ 原生分辨率[1]。Reflex 在这里用于渲染指令的同步提交,有助于减少 CPU 和 GPU 之间的延迟。
DLSS 3 和另外两个方法需要的输入都是差不多的,内部是个黑盒就不过多赘述了。跨平台性几乎没有,老黄的卖卡助手。延迟优先,选 DLSS 2 + Reflex,帧率优先,选 DLSS 3。
FSR 2
AMD 最新开源的超分技术[2],可以媲美 DLSS 2。和 FSR 1 有一脉相承的东西,但是不多,比如 FSR 1 的 RCAS 锐化被用在了 upscale 上。
FSR 2 首先是需要区分哪些区域是有历史数据的,这和 TAA 是类似的,需要将上一帧的信息重投影(术语:reconstruction, reprojection or scatter )到当前帧,与当前帧的深度做比对,获得 disocclusion mask。
Disocclusion mask
对于 disocclusion mask 所排除的部分,即没有历史数据的部分,就将当前画面施加一个比较模糊的 RCAS 上采样,混合到最终画面里。
对于有历史数据的部分,FSR 2 采用了了两种方式:
普通表面,使用 TAA 中的思想,将历史颜色 rectify 至 3x3 像素构成的 YCoCg 颜色 box 中,然后与 RCAS 上采样的颜色混合,并记录下已经混合的权重(权重有最大值,因此满足一定数量后历史颜色的比重会自然降低)。
精细结构(尤其是 <1px 的细节区域),在 TAA 中也是最容易产生闪烁的部分,将这部分区域识别出来加一个 pixel lock,pixel lock 的失效时间和抖动序列的长度一致,这样在静态情况下正好可以覆盖一整个抖动序列的采样数量。其中的像素混合则不经过 clamping,可以获得较为精细的结果。
TAA 中的颜色 rectify 方法
Pixel lock
2.1 版本之前饱受诟病的拖影问题就是来自 pixel lock,除了会到时间自动失效,pixel lock 还会记录锁定时的低频亮度,通过对比它与最近几帧的差异,结合 disocclusion mask 的剔除,也能主动解锁 pixel lock。其中低频亮度图由一个单 pass 生成的图像金字塔获得,最低一级的 1x1 的图像还可以用于补偿自动曝光。Pixel lock 能保留精细的结构,但对空域摩尔纹效果有限。
混合结果、历史权重、pixel lock 都以显示分辨率存储,并在下一帧被重采样。
FSR 2 为 GCN/RDNA2 架构定制,更适合 AMD 显卡和次世代主机,但本质上不挑显卡,支持 DX12 和 Vulkan 即可。
TSR
作为前代技术的 TAAU,是 TAA 融合了 upscale,在合成步骤使用了上采样的方式,TAA 所带来的渲染闪烁(时空摩尔纹)以及精细结构的不稳定性,会被简单的上采样所放大。因此在 UE5 时代 TSR 应运而生,作为内置的超分功能,应用起来相当简单。
TSR 的第一步与 FSR 2 和 TAA 类似,也是通过重投影的深度差异计算 parallex rejection mask,剔除掉没有历史数据的部分。它还能额外的生成 static mask,将世界坐标和屏幕坐标都相对静止的像素提取出来。和 FSR 2 不同的是,TSR 通过这个 static mask 来区分有历史数据的像素,并在 moire detection 中区别对待:
静态像素,因为欠采样会产生摩尔闪烁,需要根据其历史帧的明度闪烁程度(方差),为当前像素的 YCoCg clamping 增加一个 damping。实现方法是存储一定时间内低频亮度样本的均值、方差和权重,理论上可以存储无限长时间,但是会带来拖影问题,这里默认只保留 3 帧的数据,通过权重衰减历史值。
动态像素,因为移动的物体不产生规律的闪烁,也容易产生拖影,因此不能对颜色裁剪施加额外的 damping,退化为原始的 TAA。
根据摩尔检测的结果的,TSR 还会调整 rejection 的值。在 parallex 和 moire 两步中被 reject 掉的像素采取简单的 FXAA 再混合。
来源: https://www.youtube.com/watch?v=i_PUXa-r0WY
由于缺少类似 pixel lock的 机制,TSR 减轻闪烁的方法对 <1px 的结构细节的处理似乎不如 FSR 2,并且材质纹理动画也会带来残影。和自家的 nanite 配合时还有些问题,因为其会导致 occlusion 和 static 检测不准确。截至写这篇文章,TSR 算法还在改进中,期待之后与 UE5 两大杀器 nanite 和 lumen 完美适配。
来源:https://www.youtube.com/watch?v=MMBSF_o8_gk
TSR 适用于各种显卡,也可用于移动设备,与引擎集成度适配度最高。Epic 更与 AMD 深度合作,将优化带给次世代主机。
总结
综合性能考虑,DLSS 3 无疑是最有竞争力的。选择 FSR 2 更主要的看重良好的效果和兼容性,以及面向游戏主机的开发。而移动平台,TSR 的依然好于 TAAU 和 FSR 1,前者已经被 UE5 舍弃,TSR 有丰富的参数组合来达到性能需求。
参考
^Nvidia DLSS 3 on RTX 4090 - Exclusive First Look - 4K 120FPS and Beyond https://www.youtube.com/watch?v=6pV93XhiC1Y
^FidelityFX Super Resolution https://github.com/GPUOpen-Effects/FidelityFX-FSR2
上一篇:
【虚幻4】初学者系列教程-《基础入门》#1虚幻引擎介绍 ...
下一篇:
UE4 虚幻素材免费下载网站推荐
回复
举报
使用道具
分享
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
浏览过的版块
U3D引擎
快速回复
返回顶部
返回列表