news 2026/10/16 2:49:45

PS5SX2帧生成技术:FSR3光流在PS5上如何把30帧PS2游戏插值到60帧?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PS5SX2帧生成技术:FSR3光流在PS5上如何把30帧PS2游戏插值到60帧?

【免费下载链接】PS5SX2

A port of PCSX2 for PS5

项目地址:https://gitcode.com/gh_mirrors/ps/PS5SX2
点击查看免费下载

PS5SX2 是一个运行在 PS5 上的 PCSX2 移植项目,它的**帧生成(Frame Generation)**功能基于 AMD FSR3 的光流算法:GPU 自动在 PS2 游戏的两帧画面之间计算并插入一帧中间画面,让 30 fps 的游戏以 60 fps 显示、60 fps 的游戏以 120 fps 显示,配合 PS5 的 120 Hz 高刷输出获得更流畅的复古游戏体验。

什么是帧生成?为什么对 PS2 游戏有意义

绝大多数 PS2 游戏以30 fps运行(部分为 60 fps)。PS5SX2 虽然能在 PS5 上高速模拟 PS2,但游戏本身每秒只输出 30 帧——这是游戏软件的节奏,不是硬件瓶颈。

帧生成的思路不是"重新渲染",而是让 GPU 对比相邻两帧,推算每个像素移动了多少,再合成一帧"中间时刻"的画面。PS5SX2 中它与显示刷新率挂钩,效果如下:

游戏帧率显示刷新率每帧可用刷新帧生成结果
30 fps60 Hz2每帧插入 1 帧 → 60 fps
30 fps120 Hz4插入帧被显示两次 → 120 fps
60 fps120 Hz2每帧插入 1 帧 → 120 fps
60 fps60 Hz1没有空余刷新,不生成,显示原始帧

FSR3 光流路线:PS5SX2 为什么"自给自足"

完整的 FSR3 帧生成需要游戏提供运动矢量(MV)和深度缓冲,而 PS2 游戏只输出一张颜色画面,两者都没有。因此 PS5SX2 只启用 FSR3 的光流(optical flow)路线,由 GPU 自己从两帧画面中"猜"出运动:

  1. 亮度金字塔:对每帧构建 7 级降采样的亮度金字塔
  2. 块搜索:从最粗一级到最细一级逐级搜索匹配块(FSR3 的 "v5" 光流),每级做滤波和上采样
  3. 场景变化检测:用亮度直方图判断是否发生切镜,切镜后重置历史重新开始

这些计算由 10 个 Compute Pass 组成,shader 源自 FSR3 的 HLSL 编译为 SPIR-V,完整列表见 fg_shaders.inc:

Pass作用
of_prepare_luma/of_luma_pyramid构建亮度金字塔
of_scd_histogram/of_scd_divergence场景变化检测
of_search/of_filter/of_scale7 级块搜索、滤波与上采样
fi_setup/fi_vector_field准备并写运动矢量场
fi_interpolate最终逐像素插值出中间帧

中间帧怎么算出来:从光流到逐像素验证

光流给出"每个像素移动了多少",但直接按一半矢量采样会出现边缘撕裂和遮挡错误。PS5SX2 的插值 Pass 对每个像素做候选运动验证:

  • 候选收集:逐像素尝试多种运动——不动、矢量场、周围 4 个单元、本块光流、相邻 4 块的运动,以及上一帧生成帧中记录的 2×2 块运动
  • 半矢量双向验证:把候选运动代入"前一帧往回半矢量 + 当前帧往前半矢量",两边结果一致才采信
  • 亚像素精修:把最优候选精化到像素的小数级别
  • 静止检测:连续 8 帧未变化的像素(HUD、文字)判定为不动,避免文字拖影
  • 遮挡边界:没有任何运动能同时解释两帧的像素(前景物体边缘),直接丢弃被遮挡方的采样

开启 Debug 视图后,插值决策会以颜色可视化(灰=静止、绿=运动、红/蓝=保留前/当前帧边缘、紫红=边缘混合),方便调试效果。

节奏控制:以 PS2 vsync 为尺子的安全网

"无脑每帧插一帧"有两个坑:60 fps 游戏在 60 Hz 下根本没有空余刷新;帧率不稳的游戏(如 45–58 fps 波动)插入帧后运动节奏忽快忽慢。因此 OrbisFrameGenPacing.h 用PS2 自己的 vsync 数(而非墙钟时间)计量帧间隔:

  • 近 8 个间隔的中位数≥ 2 个显示刷新才算有生成空间
  • 帧率必须"稳":起始需近 8 帧中 7 帧间隔相同,维持需 6 帧
  • 加载、暂停、切镜(等待超过 8 个 vsync)后先预热 8 帧
  • 安全网:开帧生成时若游戏速度连续 3 秒低于目标的 95%,暂停生成 10 秒;若证明是帧生成拖慢了速度,下次暂停翻倍(最长 160 秒);若证明游戏本身慢,则临时下调判定门槛一分钟

120 Hz 也是关键前提:改造过的 ps5vk 驱动提供 119.88 Hz 高帧率输出,帧生成启动时切换为 120 Hz 模式;在 60 Hz 输出下,只有 ≤ 30 fps 的游戏能生成帧。

如何开启 PS5SX2 帧生成

  1. 在游戏设置页的Display(显示)分组中找到Frame generation开关,对应配置键PS5SX2/FrameGeneration,默认关闭
  2. 开启后启动游戏:该选项在 GS 图形系统启动前读取,在游戏启动时生效(运行中修改将在下次启动生效)
  3. 帧生成激活后,FPS 统计框会显示 "FG" 标记
  4. 注意:软件渲染模式不支持该功能;游戏内每 10 秒会输出一行[fg]状态日志,包含游戏 fps、生成帧率、显示频率与 GPU 耗时

配套选项(见 fe_options.cpp 的设置定义):

选项作用
Frame Generation Limit0(默认)保持游戏自身帧率;30/50/60在生成时锁定游戏帧率
Frame Generation Multiplier2(默认)每两帧间插 1 帧;3插 2 帧(如 40 fps 按 120 Hz 显示);4插 3 帧。每多插一帧,输入延迟多一帧
Frame Generation Debug以颜色显示插值决策,用于调试

代价与限制

  • ⏱️输入延迟:每插入一帧,游戏自己的画面被推迟一个刷新显示;Multiplier 2 的延迟最小
  • 🌀运动涂抹:快速运动的物体边缘可能出现轻微拖影
  • 🚫并非万能:帧率不稳定的段落不触发生成;60 fps 游戏必须搭配 120 Hz 输出才有效
  • 官方界面将其标注为Experimental(实验性)功能

关键源码导航

文件职责
ps5_framegen.h帧生成插值器:Vulkan 资源、录制管线与算法说明
ps5_framegen.cpp插值器宿主实现(10 个 Pass 的调度)
framegen/fg_shaders.incFSR3 光流 Pass 的 SPIR-V 汇编
OrbisFrameGenPacing.hvsync 节奏判定与安全网(header-only)
GSDeviceVK.cpp与 PCSX2 显示管线(present)的集成点
main-boot.cpp启动时读取开关、请求 120 Hz 输出

这套代码源自 Swordpdf 的 RPCS3-PS5 / ps5-framegen 工作,经作者重新授权后移植进 PS5SX2,并改用 PCSX2 的 Vulkan 加载器接入。

总结

PS5SX2 的帧生成让 PS2 老游戏第一次在 PS5 上体验到了"翻倍帧率":它用 FSR3 的光流路线绕开了 PS2 游戏缺少运动矢量的限制,靠 7 级亮度金字塔搜索 + 逐像素候选验证合成中间帧,再用 PS2 vsync 节奏判定和安全网保证"只在稳态下生成、不拖累游戏速度"。对于 30 fps 的 PS2 游戏,这是目前把它变成 60 fps 的最平滑方案——只需在设置页打开 Frame generation,即可享受近乎零配置的高帧率怀旧体验。

【免费下载链接】PS5SX2

A port of PCSX2 for PS5

项目地址:https://gitcode.com/gh_mirrors/ps/PS5SX2
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 2:49:24

OpenCV形态学开闭运算实战:去噪点与补孔洞的完整指南

从做图像处理的第一天起,我就被“噪点”和“孔洞”这两件事折腾过。大部分二值图或者分割结果,离干净可用总差那么一步:要么背景上散落着一堆白色颗粒,要么目标内部莫名其妙缺了几块黑色空洞。拿这样的图直接做轮廓分析、OCR或者测…

作者头像 李华
网站建设 2026/10/16 2:47:10

Spring Boot生产部署必须用Nginx反向代理的5大核心原因

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 2:46:32

Argos Translate离线翻译排错全手册

Argos Translate离线翻译排错全手册 【免费下载链接】argos-translate Open-source offline translation library written in Python 项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate Argos Translate 是 Python 写的离线机器翻译库,Python 库、CLI、…

作者头像 李华
网站建设 2026/10/16 2:46:15

电商后台交易履约链路:下单、发票、发货、退货全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/16 2:46:06

两条命令把 Hermes 接入 DeepSeek:完整上手指南

两条命令把 Hermes 接入 DeepSeek:完整上手指南 【免费下载链接】awesome-deepseek-agent 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-agent 这是一份 Hermes 接入 DeepSeek 的快速上手教程。照做之后,两分钟内即可完成…

作者头像 李华