TSR 与抗锯齿方案
Temporal Super Resolution & Anti-Aliasing
UE5 提供四种抗锯齿:时间超分辨率 (Temporal Super Resolution, TSR,默认)、时间抗锯齿上采样 (TAAU)、快速近似抗锯齿 (FXAA) 和仅前向渲染可用的多重采样抗锯齿 (MSAA)。TSR 是与平台无关的时间性上采样器,用低内部分辨率渲染,借助历史帧累积细节输出接近原生的画面,把节省的 GPU 时间留给 Nanite 与 Lumen。
方法对比
| 方法 | 类型 | 可用渲染器 | 特点 |
|---|---|---|---|
| TSR | 时间性上采样 | 桌面/主机 延迟与前向 | 默认;低内部分辨率;抗鬼影、抗闪烁;SM5 以上全平台同质量 |
| TAAU | 时间性 | 桌面/主机,移动端延迟 | UE4 时代默认;每帧在不同子像素位置采样并与过去帧混合 |
| FXAA | 纯空间后处理 | 桌面/主机,移动端延迟 | 高对比度滤波找边缘再混合;快、适合低端;保真度损失 |
| MSAA | 几何边缘多重采样 | 仅前向渲染器(桌面与移动) | 只处理几何边缘;对材质、纹理、半透明产生的走样无效;不受可伸缩性控制 |
来源:(Anti-Aliasing and Upscaling)。各方法的通用原理见 抗锯齿:MSAA 对应多重采样,FXAA 对应基于图像的边缘检测,TAA/TSR 对应时间性抗锯齿与 时间重投影。前向渲染器文档补充:多数情况下 TAA 更好,因为它同时去除几何走样和高光走样;但在 VR 中头部追踪的持续亚像素运动使 TAA 发糊,MSAA 更合适,且 MSAA 代替 TAA 约增加 25% GPU 帧时间。(Forward Shading Renderer)
第三方 DLSS 2+、FSR 2.0+、XeSS 与 TAAU、TSR 在 UE 中走同一个"时间性上采样器 (Temporal Upscaler)"接口。(Anti-Aliasing and Upscaling)
TSR 的原理
TSR 把一部分昂贵渲染计算"分摊到多帧",渲染比 UE4 TAAU 更低的内部分辨率。官方示例:原生 4K 帧时间 57.50 ms,1080p 渲染再上采样到 4K 为 33.37 ms,画质接近 4K,帧时间约减半。(Temporal Super Resolution)
TSR 由多个算法组成:(Temporal Super Resolution)
flowchart LR
I["本帧: 低分辨率颜色+深度+速度"] --> P["视差启发式<br/>重投影+去遮挡检测"]
H[("历史: 显示分辨率或 200%")] --> P
R[("复活帧: 更早的持久帧")] --> P
P --> S["着色拒绝<br/>手写卷积网络判断历史可用性"]
F["闪烁亮度快照"] --> S
S --> U["历史更新<br/>最贵的通道"]
S --> A["空间抗锯齿器<br/>历史不足时 FXAA 式搜索"]
U --> O["输出 → 运动模糊/泛光/色调映射"]
U --> H| 组件 | 作用 |
|---|---|
| 历史 (History) | 以显示分辨率累积细节;历史更新是 TSR 最贵的通道 |
| 视差去遮挡 (Parallax Disocclusion) | 只依赖本帧深度和速度缓冲,找出从前景后面新露出的区域 |
| 着色拒绝 (Shading Rejection) | 判断本帧与历史是否匹配、复用还是拒绝;内部是"手写的卷积网络" |
| 闪烁时间分析 | 监测亮度振荡,对摩尔纹等闪烁放宽拒绝以稳定画面(只看亮度,省 2/3 开销) |
| 历史复活 (Resurrection) | 被遮挡后又重新出现的内容可以从更早的持久帧取回,减少鬼影 |
| 空间抗锯齿器 | 镜头切换或新物体出现、只有一帧数据时,用 FXAA 式算法遮掩走样 |
| 重投影场 | 每像素嵌入 2×2 雅可比矩阵,使运动中的几何边缘保持锐利 |
这是 时间重投影 的工业级实现:重投影历史 + 拒绝/钳制无效历史 + 处理去遮挡。TSR 文档专门讨论了时间性上采样的通病——重投影时要在前一帧像素间插值,造成模糊,运动中的 1080p 输出"看起来像 540p"。Epic/Cinematic 级把历史存为显示分辨率的 200%,依据奈奎斯特-香农采样定理配合 Mitchell-Netravali 下采样核消除重投影模糊,代价是历史更新贵 4 倍。(Temporal Super Resolution)
收敛速度:分辨率 × 帧率
时间性方法的质量不仅取决于每帧分辨率,还取决于帧率。官方给出两个指标(stat tsr):(Temporal Super Resolution)
其中 是屏幕百分比 (Screen Percentage)。例:4K、50%、60 Hz 的 feed 为 124.4 MP/s,与 1080p、100%、60 Hz 相同;50%、60 Hz 时去遮挡区域需要约 66.6 ms(4 帧)才累积到每像素 1 个样本,100% 时为 16.6 ms。(Temporal Super Resolution) 实际含义:CPU 瓶颈或垂直同步拉低帧率时,TSR 画质也会下降——这把 帧时间预算与渲染性能 与画质直接挂钩。
在管线中的位置与隐藏成本
TSR 位于景深之后,其后的运动模糊、泛光、色调映射等都运行在显示分辨率上,不再随屏幕百分比缩放;因此官方为运动模糊做了半分辨率等优化。(Temporal Super Resolution) 这与 景深、运动模糊、图像处理与后处理 中后处理链的顺序问题直接相关:后处理材质的 Blendable Location 决定它在渲染分辨率还是显示分辨率上运行。(Temporal Super Resolution)
TSR 的视差启发式只依赖深度与速度缓冲,而它们在 GPU 上完成得较早,所以可用 r.TSR.AsyncCompute 放到异步计算上;Fortnite 第 4 章在 PS5/XSX 上 TSR 有效成本 1.5 ms,关键路径 1.1 ms。(Temporal Super Resolution)
项目中的配置
- 可伸缩性组
sg.AntiAliasingQuality(0 Low – 4 Cinematic),具体 CVar 在 BaseScalability.ini 的[AntiAliasingQuality@N]。屏幕百分比低于 50% 的极端上采样只适合 4K 以上输出或主机动态分辨率。(Temporal Super Resolution) - 竞技类游戏可牺牲一点运动稳定性换锐度:Fortnite 把
r.TSR.Velocity.WeightClampingSampleCount从 4 降到 2。(Temporal Super Resolution) - 闪烁调优:把
r.TSR.ShadingRejection.Flickering.FrameRateCap设为目标帧率,用t.MaxFPS锁定后调Flickering.Period。(Temporal Super Resolution)
鬼影排查与常见坑
官方的排查顺序:(Temporal Super Resolution)
- 先确认是不是 TSR 的问题:用 Temporal Upscaler I/O 可视化看输入是否已经有鬼影,或换其他抗锯齿方法对比;
- 检查运动矢量 (Motion Vector):用 VisualizeMotionBlur、VisualizeReprojection;动画化 WPO 材质需要 Previous Frame Switch 节点提供上一帧的值;实例变换运动没有自动速度向量;
- 平移纹理等像素动画的不透明材质会被误判为"闪烁"而产生鬼影 → 勾选材质的 Has Pixel Animation;
- 半透明默认不写速度,After DOF 半透明的着色拒绝更严格 → 可开启 Output Depth and Velocity,并注意 Opacity Mask Clip Value。
工具:r.TSR.Visualize 0–7、DumpGPU(r.DumpGPU.Root *TemporalSuperResolution* 连续抓 30 帧)、RenderDoc/PIX。(Temporal Super Resolution)
取舍
TSR 用"历史 + 启发式"换取约一半的 GPU 时间,是 Nanite 微多边形细节与 Lumen 预算能同时成立的前提(Lumen Epic 级的 8 ms 目标即假定 1080p 内部分辨率 + TSR,见 Lumen 全局光照与反射)。代价是:依赖正确的运动矢量、对低帧率敏感、半透明和无速度效果容易鬼影、显示分辨率上的后处理成为隐藏成本。MSAA 画面锐利但只在前向渲染器可用且不处理着色走样;FXAA 最便宜但最糊。
出处
- Anti-Aliasing and Upscaling UE 5.8 文档
- Temporal Super Resolution UE 5.8 文档
- Forward Shading Renderer UE 5.8 文档