【免费下载链接】driveclub-recomp
DriveClub (PS4, version 1.28) running natively on Windows
想知道自己的显卡和 CPU 跑《DriveClub》到底能有多少帧、卡顿有多严重?开源项目driveclub-recomp(让 PS4 版 DriveClub 1.28 在 Windows 上原生运行)内置了一个AI 自动驾驶 Benchmark 跑分功能:游戏自动起跑、AI 代开车、跑完自动退出,并把平均帧率与 1% / 0.1% low 直接告诉你。本文将这个"会自己跑分"的功能从原理到用法一次讲透。
💡 适合人群:想测性能的普通玩家、喜欢折腾的进阶用户,以及需要脚本化回归测试的开发者。
一、driveclub-recomp 是什么,为什么要 AI 自动驾驶跑分
driveclub-recomp 把《DriveClub》(CUSA00093, 1.28) 的 x86-64 代码直接在 CPU 上运行、把 GPU 指令翻译成 Vulkan,无需 CPU 模拟即可在 Windows 上原生游玩,支持 NVIDIA / AMD / Intel 显卡。
它内置的 Benchmark 功能解决了一个痛点:手动开车跑分不可复现——车速、走线、摄像头每次都不一样,数字没法横向对比。于是 driveclub-recomp 选择让游戏自带的 AI 接管方向盘,全程零人工干预,保证每次测试条件一致,数字可复现、可对比。这正是"会自己跑分的游戏"的含义。
相关功能入口在启动器的Benchmark标签页(源码见 launcher/driveclub_launcher.cpp),核心跑分逻辑在 src/runtime_benchmark.c。
二、原理拆解:游戏如何自己起跑、自己开车、自己计分
1. 复用游戏自带的 Lua 自动化测试框架
DriveClub 本身就带有一套 Lua 自动化测试框架(scripts/lua/testing、scripts/autotest/lua),可通过命令行参数-luaautotest=<path>启动一个测试脚本。
driveclub-recomp 没有重造轮子,而是:
- 运行时在用户目录写一个自己的小测试脚本
bb_benchmark.lua(模板见 src/runtime_benchmark.c 中的script_template); - 把
data\user\benchmark当作一个 mods 文件夹提供给游戏; - 再把
-luaautotest=scripts/autotest/lua/bb_benchmark.lua作为参数传给游戏。
2. 把方向盘交给 AI,全程无需人工
这个脚本按顺序完成:跳过开场视频 → 用游戏自己的Automation.Go进入事件 → 跳过赛前镜头 → 调用DriveClubTestHelpers:SwitchToAI()把车交给 AI。从此玩家完全不用碰键盘,AI 自己跑圈。
脚本还会在游戏线程里通过一个"标记路径"(打开bb_benchmark/racing触发运行时钩子)回报进度;如果设了雨量,还会用游戏自身的字符串赋值函数改写比赛配置里的降水预设。
3. 逐帧计时,算出 1% low / 0.1% low
运行时挂了一个看门狗线程和逐帧回调runtime_benchmark_flip():
- 每呈现一帧就记录一次帧间隔;
- 先做warmup 预热(默认 5 秒,不计入成绩),再进入测量阶段(默认 60 秒);
- 计时结束把帧间隔排序,算出平均帧率、最慢 1% / 0.1% 帧的平均帧率、P99、最慢单帧、加载耗时,写入
result.txt与日志后自动退出(退出码 0)。 - 若比赛在超时内没开始、或画面 30 秒没出新帧,看门狗会以退出码3失败退出,并把
Benchmark: FAILED, ...写进日志。
这套设计保证了数字可复现,也天然适合接脚本做回归。
三、最快上手:两种跑 Benchmark 的方法
方法一:启动器 Benchmark 标签页一键运行(推荐新手)
- 打开
DriveClub.exe,切到最右侧Benchmark标签页。 - 选择赛道、车辆、时间、天气、雨量、时长(时长可选 30 / 60 / 120 / 300 秒)。
- 点Run benchmark,游戏自动起跑、AI 开车、跑完自动关闭。
- 启动器直接显示平均帧率、1% low 与 0.1% low;鼠标悬停结果下方那行,可看到游戏实际的渲染/输出分辨率、帧率上限、抗锯齿等全部设置。
启动器里内置了 20+ 条赛道与 20 余辆车(含 Hyper / Super / Performance / Sports / 小钢炮等分类),默认车辆为 Ferrari 458 Italia。列表源码见 launcher/driveclub_launcher.cpp 中的kBenchTracks/kBenchCars。
方法二:命令行环境变量 BB_BENCHMARK(适合脚本 / CI)
不想开窗口时,用环境变量直接驱动:
:: 全默认:Fraser Valley + Ferrari 458 + 中午 + 晴天 + 60 秒 set BB_BENCHMARK=1 DriveClub.exe --play :: 自定义参数(键值对,逗号分隔) set BB_BENCHMARK=track=chile_race_track_v1,car=fe_f12,tod=18 DriveClub.exe --play跑完游戏自动退出:退出码 0 为完成,3 为比赛未开始。结果一行写入日志:
Benchmark: result mode=TimeTrial track=canada_road_circuit_02_n car=fe_458 tod=12 weather=Clear rain=dry drive=ai seconds=60.0 frames=2639 avg_fps=43.97 low1_fps=26.94 low01_fps=14.14 p99_ms=32.65 max_ms=103.85 load_s=21.9其下还会跟一行ran render=... output=... fps_limit=... aa=...,由游戏自己读回的真实运行设置(渲染/输出尺寸取自游戏内存),比"你以为的设置"更可信。
结果同时落在data\user\benchmark\result.txt和logs\launcher.log。
四、读懂结果:avg_fps、1% low、p99 各代表什么
| 指标 | 含义 | 实际用途 |
|---|---|---|
avg_fps | 测量期平均帧率 | 看整体流畅度 |
low1_fps(1% low) | 最慢 1% 帧的平均帧率 | 反映卡顿有多频繁 |
low01_fps(0.1% low) | 最慢 0.1% 帧的平均帧率 | 反映极端掉帧有多狠 |
p99_ms | 第 99 百分位帧耗时 | 最差 1% 单帧要多久 |
max_ms | 最慢单帧耗时 | 最坏情况 |
load_s | 从配置到开跑的加载耗时 | 场景 / 资源加载性能 |
🎯 一句话:
avg_fps好看但 1% low 很低的配置,玩起来照样一顿一顿——1% low 往往比平均帧率更贴近真实手感。
五、进阶:自定义赛道、车辆、天气与测量时长
命令行下可自由组合这些键(值只允许字母、数字和_,完整清单见 src/runtime_benchmark.c 顶部注释):
| 参数 | 说明 | 默认值 |
|---|---|---|
track | 赛道名(如canada_road_circuit_02_n) | Fraser Valley |
car | 车辆名(如fe_458) | Ferrari 458 Italia |
mode | TimeTrial(单车)/Race(7 车 AI 编队) | TimeTrial |
tod | 时间 0–23 | 12 |
weather | Clear/Cloudy/Overcast/Stormy | Clear |
rain | 雨量:空=干,或Light/Heavy/Wet等 | 干 |
drive | ai/none(玩家开) | ai |
warmup | 预热秒数(不计分) | 5 |
seconds | 测量秒数 | 60 |
view | chase/driverhead/attach | 游戏默认 |
timeout | 从启动到必须开跑的超时 | 240 |
⚙️ 小提示:启动器的
Run benchmark实际固定使用laps=20、warmup=5、timeout=420,其余跟随你在页面上的选择(见 launcher/driveclub_launcher.cpp 的BenchSpec())。
六、常见问题 FAQ
Q:为什么用 AI 开车,而不是我自己开?A:AI 代开车保证每次起跑、车速、走线完全一致,数字可复现、可横向对比,也无需人手操作,天然适合回归测试。
Q:跑分用的设置是启动器的设置吗?A:是。结果里的ran行由游戏读回自己的内存,如实记录渲染/输出分辨率、帧率上限、抗锯齿、各向异性、镜像更新率、车辆/对手细节、动态分辨率、DLC 是否解锁等,悬停即可逐项查看。
Q:跑分失败了(退出码 3)怎么办?A:说明比赛没在超时内开始、或画面 30 秒无新帧。打开logs找最新的driveclub_*.log,搜Benchmark: FAILED,就能看到游戏给出的具体原因。
Q:一次跑分要多久?A:约 = 加载(load_s)+ 预热 5s + 测量时长(默认 60s)。看门狗超时(默认 240s,启动器为 420s)会兜底防止卡死。
Q:普通构建里 Benchmark 可用吗?A:可用。诊断构建与常规构建都保留了性能叠加层与 benchmark 支持,详见 docs/runtime-diagnostics.md。
七、相关源码与文档
- 跑分运行时与参数说明:src/runtime_benchmark.c
- 启动器 Benchmark 标签页 / 赛道车辆列表:launcher/driveclub_launcher.cpp
- Benchmark 用法(官方文档):README.md
- 诊断与构建说明:docs/runtime-diagnostics.md
- 从源码构建:BUILDING.md
🚗 总结:driveclub-recomp 的 Benchmark 功能用"游戏自带 Lua 框架 + AI 接管方向盘 + 逐帧计时"三板斧,把"主观感觉卡不卡"变成了"可复现的数字"。想快速测性能,用启动器一键跑;想接脚本或做 CI,用
BB_BENCHMARK环境变量最省事。
【免费下载链接】driveclub-recomp
DriveClub (PS4, version 1.28) running natively on Windows
相关推荐
MechJeb2:游戏辅助自动驾驶解决方案
MechJeb2:游戏辅助自动驾驶解决方案 MechJeb2 是一款为 Kerbal Space Program KSP 游戏开发的辅助自动驾驶模组,由 Ana
游戏开发CANN/GE Python张量API
Tensor Product Support | Product | Support | | : | : : | | Atlas A3 Training Pro
人工智能模型编译模型优化CANNAscend把 BT 下载速度顶到上限:一份 5 分钟生效的 Tracker 列表配置指南
把 BT 下载速度顶到上限:一份 5 分钟生效的 Tracker 列表配置指南 同一部 4K 纪录片,有人 20 分钟下完,有人挂了一整夜,进度还停在两位数。差
数据集
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考