Bloodborne没有速度缓冲:bbport如何自算相机与对象运动向量?
Bloodborne没有速度缓冲bbport如何自算相机与对象运动向量【免费下载链接】bloodborne_pc项目地址: https://gitcode.com/gh_mirrors/bl/bloodborne_pcbbport 是一个让 PS4 版《Bloodborne》原生运行在 Linux PC 上的开源移植项目。由于游戏本身不输出速度缓冲velocity bufferbbport 自算运动向量先用深度和场景矩阵推导相机运动向量再从上一帧顶点位置计算对象运动向量配合抖动jitter与 FSR 时间性超分辨率让低分辨率渲染的画面在放大后依然清晰稳定。本文用通俗的方式讲清楚这套机制的原理、关键模块与验证方法。为什么《Bloodborne》需要自算运动向量时间性超采样TAA和 FSR 这类超分技术都依赖一个关键输入运动向量motion vectors——告诉 GPU 每个像素从上一帧移动到了这一帧的哪个位置。大多数 PC 游戏会直接渲染一张速度缓冲velocity buffer而《Bloodborne》在 PS4 上从未输出过速度缓冲连相机移动时也没有。bbport 在帧分析中确认了这一点docs/upscaler.md 明确指出 There is no velocity buffer。没有运动向量历史帧就无法正确重投影超分画面会糊成一片。所以 bbport 的选择是自己把运动向量算出来。整体思路相机向量打底对象向量精修bbport 把每个像素的运动向量分成两层来源来源覆盖范围计算方式 相机运动向量全场景默认兜底深度图 当前/上一帧相机矩阵 对象运动向量角色、武器、布料等动态物体对比上一帧保存的顶点位置最终合成规则很简单对象动了就用对象向量否则用相机向量。这套逻辑在合成着色器 camera_motion.comp 中完成——它会校验对象向量的深度是否与该像素当前深度一致防止被后续绘制的普通物体覆盖后用到过期向量不一致就退回相机向量。相机运动向量从深度和矩阵里还原位移《Bloodborne》每一帧都会把一组 864 字节的场景常量绑给几乎每个渲染通道其中包含视图矩阵view matrix唯一随相机变化的矩阵块投影参数垂直视野、近远裁剪面等分辨率签名例如[0]3000far 平面、[4]1920、[5]1080。bbport 靠这个签名识别场景常量并在 vk_camera_motion.h 的CameraMotion类中保存当前帧和上一帧两套相机参数。接下来是核心数学发生在 compute shader 里见 camera_motion.comp对每个像素读取深度值反推出它在视图空间的 3D 坐标用上一帧视图 × 当前视图逆矩阵把坐标变换回上一帧的相机视角再投影回屏幕得到该像素在上一帧的位置两者相减就是该像素的相机运动向量单位像素。一个易错细节被清除的深度天空代表无穷远方向旋转相机时要只旋转、不平移否则远处场景会剧烈抖动。bbport 在注释里专门记录了这一点。对象运动向量保存上一帧的顶点位置相机向量只能描述整个画面跟着相机走但角色挥刀、布料飘动这些物体自身的运动必须单独算。bbport 的方案记录在 docs/motion_vectors.md改写 G-buffer 顶点着色器在渲染角色、武器等动态物体时把每个顶点的裁剪空间坐标写进一块共享的历史缓冲跨帧匹配用一个包含顶点流、shader、索引内容哈希、顶点范围等字段的关键字把当前绘制和上一帧的绘制对上号像素着色器写差异当前位置减去上一帧位置得到该像素的对象运动向量兜底回退匹配失败或超出内存预算时自动退回相机向量画面不会崩。工程上的关键设计都集中在 motion_history.h 和 vk_object_motion.h只记录真正可能动的物体通过检查顶点着色器绑定的常量缓冲大小来分类——864 字节是场景常量相机≥640 字节是角色骨骼96~384 字节48 字节/根骨骼是小骨骼武器、道具。静态几何完全不占内存小骨骼门控武器每帧约有一千个小骨骼绘制大多是静止的。bbport 先用骨骼权重表bone palette的哈希做廉价比较哈希没变就跳过省下了大量开销预算与降级位置历史预算为每帧 4194304 个顶点两块缓冲共 128 MiB不够用时保留相机向量正确性防护原子写入防止同一顶点被多次绘制时竞态相机后面的位置和 NaN/Inf 向量直接作废。 一个真实的调试故事9 月 29 日玩家视频里回旋锯的锯盘旋转后拖着残影。日志显示锯盘只绑了 2~8 根骨骼96~384 字节被旧的≥640 字节阈值挡在外面只拿到了相机向量——对 FSR 来说它没动。把小骨骼纳入覆盖范围后残影消除。Jitter让每帧错开半像素光有运动向量还不够。时间性累积需要每一帧的采样点略有不同才能覆盖亚像素细节。bbport 用Halton(2,3) 抖动序列对场景几何做亚像素级的视口偏移Performance 档 32 个相位渲染分辨率降低如 960×540再由 FSR 3.1 / FSR 4 / FSR 4.1.1 重建到 1080p/1440p/4K 输出。运动向量计算时会先扣掉抖动偏移确保交给超分器的向量是无抖动的真实位移。如何验证与调试项目提供了不少验证手段对想深入了解的用户很友好BB_DEBUG_MOTION1把运动向量以颜色叠加到画面上还支持重投影上一帧 / 误差图模式——静态几何完全对得上说明相机向量正确单元测试 test_camera_motion.cpp 与 test_motion_history.cpp覆盖 u16/u32 索引、primitive restart、实例化、预算耗尽等边界情况test_motion_shaders.cpp用真实 SPIR-V 后端生成带/不带向量插桩的 shader 并通过spirv-val校验BB_OBJECT_MOTION0一键关闭对象运动功能做 A/B 对比。小结bbport 用深度 相机矩阵补齐了《Bloodborne》缺失的相机运动向量又用上一帧顶点位置历史 骨骼哈希门控算出对象运动向量两者合成后喂给 FSR 完成时间性超分。整个过程无需修改游戏逻辑只在渲染层完成——这也是它能在 RX 7800 XT 上跑到 4K 约 90 FPS、1440p 约 150 FPS 的关键之一。想了解更多设计细节可阅读超分器与帧分析docs/upscaler.md运动向量调优记录docs/motion_vectors.md深度自适应 TAA 实验docs/DEPTH_ADAPTIVE_TAA.md项目总览与构建方法README.md【免费下载链接】bloodborne_pc项目地址: https://gitcode.com/gh_mirrors/bl/bloodborne_pc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Markdown转PDF实操对比:3种方案与踩坑记录

Markdown转PDF实操对比:3种方案与踩坑记录

日常写技术文档、记笔记、维护项目 README,基本都离不开 Markdown。写的时候很爽,但真要发给别人看,或者打印成纸质版,还是得转成 PDF。这个问题看起来简单,实操起来却有不少坑:有的工具转换后中文乱码&…

2026/10/9 7:09:55 阅读更多 →
纯C推理引擎在RK3588上的极简实现:818KB体积与2秒启动

纯C推理引擎在RK3588上的极简实现:818KB体积与2秒启动

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

2026/10/9 7:09:55 阅读更多 →
基于搜狗新闻语料库的中文文本分类:从TF-IDF到RoBERTa完整实践

基于搜狗新闻语料库的中文文本分类:从TF-IDF到RoBERTa完整实践

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

2026/10/9 7:08:55 阅读更多 →

最新新闻

decimen-optical-transfer 的 vendored 解码器:decimen-codec WASM 构建的许可证构成与运行时身份

decimen-optical-transfer 的 vendored 解码器:decimen-codec WASM 构建的许可证构成与运行时身份

前端通信 【免费下载链接】decimen-optical-transfer 项目地址: https://gitcode.com/gh_mirrors/de/decimen-optical-transfer 点击查看 免费下载 decimen-codec 是 decimen-optical-transfer 项目内置(vendored)的 QR 解码引擎&#xff1a…

2026/10/9 7:45:18 阅读更多 →
Brython 包(.brython.js)实战指南:从 `brython-cli make_package` 到浏览器端按需加载

Brython 包(.brython.js)实战指南:从 `brython-cli make_package` 到浏览器端按需加载

编程语言语言运行时编译器前端 【免费下载链接】brython Brython (Browser Python) is an implementation of Python 3 running in the browser 项目地址: https://gitcode.com/gh_mirrors/br/brython 点击查看 免费下载 Brython(Browser Python&#x…

2026/10/9 7:45:18 阅读更多 →
Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操

Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操

Intel 老 Mac 免费装最新 macOS:OpenCore Legacy Patcher 最短路径实操 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 苹果停止支持的第 4 年&am…

2026/10/9 7:45:18 阅读更多 →
深入理解webpack:前端工程化核心配置与优化实战

深入理解webpack:前端工程化核心配置与优化实战

学习前端,绕不开webpack。这个工具太常用了,以至于很多人把它当作“框架”来称呼——“学习前端webpack的框架”这话虽然有点概念混淆,但背后透露的需求非常真实:想搞懂前端工程化,想把打包配置玩明白,想弄…

2026/10/9 7:45:18 阅读更多 →
opencode进阶指南:工具、服务面、外壳与实战集成

opencode进阶指南:工具、服务面、外壳与实战集成

1. 别急着配模型,先想清楚 opencode 的四层结构上次聊了 opencode 的基础用法,把终端里跑一个编码助手这件事讲明白了。这篇是下篇,聚焦在四个更进阶的面上:工具、服务面、外壳、实战集成。这四个词听起来像架构图里的黑话&#x…

2026/10/9 7:45:18 阅读更多 →
培训班毕业进外包:从踩坑到转正的实战路径

培训班毕业进外包:从踩坑到转正的实战路径

1. 培训班出来进外包,到底是一条什么路先把这个话题挑明白:培训班出来之后入职外包公司,基本是当下技术行业里最常见、也最容易被误解的一条职业起点。我身边不少同行,包括我自己刚入行那两年,都有过类似经历——这边培…

2026/10/9 7:44:17 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/9 6:17:20 阅读更多 →