会自己跑分的游戏:driveclub-recomp AI自动驾驶Benchmark功能的原理与用法详解

发布时间:2026/10/30 12:23:54
会自己跑分的游戏:driveclub-recomp AI自动驾驶Benchmark功能的原理与用法详解

【免费下载链接】driveclub-recomp

DriveClub (PS4, version 1.28) running natively on Windows

项目地址:https://gitcode.com/gh_mirrors/dr/driveclub-recomp
点击查看免费下载

想知道自己的显卡和 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 标签页一键运行(推荐新手)

  1. 打开DriveClub.exe,切到最右侧Benchmark标签页。
  2. 选择赛道、车辆、时间、天气、雨量、时长(时长可选 30 / 60 / 120 / 300 秒)。
  3. 点Run benchmark,游戏自动起跑、AI 开车、跑完自动关闭。
  4. 启动器直接显示平均帧率、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
modeTimeTrial(单车)/Race(7 车 AI 编队)TimeTrial
tod时间 0–2312
weatherClear/Cloudy/Overcast/StormyClear
rain雨量:空=干,或Light/Heavy/Wet等干
driveai/none(玩家开)ai
warmup预热秒数(不计分)5
seconds测量秒数60
viewchase/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

项目地址:https://gitcode.com/gh_mirrors/dr/driveclub-recomp
点击查看免费下载
上一篇:如何永久激活IDM:3种简单安全方案完整指南
下一篇:猫抓插件:如何通过浏览器扩展实现专业级资源嗅探与下载

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