卷 I · 诊断 ♩=120 CH 03 03 / 24

判定窗口一道你算得出答案的算术题

「我能拿多少分」不是一个玄学问题。
给定判定窗口有多宽、你偏了多少、你抖了多少 —— 命中率就是一个确定的积分。这一章会把它算出来,然后你会看到一件很多人不肯相信的事:
把偏移修掉,一下都不用多练,命中率从 72.5% 涨到 81.8%;而「整段全中」的概率涨了 414 倍。
这是这本书里投入产出比最高的一页。

正态积分命中率全中概率成绩单分布边际收益

窗口是以帧写死的

游戏判定你有没有打中,靠的是一个时间窗口:你的输入时刻和目标时刻相差多少以内算命中。

这个窗口在代码里几乎总是以为单位写死的,因为游戏的整个逻辑循环就是按帧跑的。60 帧的机器上,一帧 16.67ms。于是判定档位天然是 16.67 的整数倍:

# 本书统一使用的判定口径(不是任何一款游戏的实测值)

  完美   ±2 帧  =  ±33.3ms
  还行   ±4 帧  =  ±66.7ms
  勉强   ±6 帧  =  ±100ms

# 对照:常见音游的「最高档」大致在 ±1 到 ±3 帧之间

请先记住 16.67ms 这个数。它是这本书里出现频率最高的常数,也是你和游戏之间那把尺子的最小刻度。比一帧更细的准确度,游戏根本看不见。

同一个窗口,在不同速度下不是一回事

「±4 帧算宽还是窄」这个问题没有答案,除非你说清楚速度。因为窗口是绝对时间,而格子是相对时间:

BPM一拍十六分十六分 = 几帧「还行」全宽 ÷ 一格
100600ms150.0ms9.089%
120500ms125.0ms7.5107%
140429ms107.1ms6.4124%
160375ms93.8ms5.6142%
180333ms83.3ms5.0160%

看最后一列 —— 它是「还行」这一档的全宽(±4 帧,也就是 8 帧共 133.3ms)除以一个十六分格在 120 BPM 以上,这个比值超过了 100%:判定窗比格子还宽。这意味着一件相当微妙的事:

⚠ 坑 · 判中了,不代表你打的是那一个音符

当判定窗比格子还宽,你完全可能被判为命中,但命中的其实是隔壁那个音符

在游戏里这看起来像是「勉强过了」;在你的身体里,它是一次错误的经验 —— 你把一个错误的位置当成对的记了下来。

这就是第 2 章那个「敲到隔壁格」计数存在的理由。它数的正是这种「侥幸过关」,而这种侥幸恰恰是最该被揪出来的,因为它会被你的肌肉记住。

命中率是一个积分

现在做这一章真正的事情。

一个人反复去够同一个时间点,误差近似服从正态分布 —— 中心在你的偏移上,宽度是你的抖动。判定窗口是一个区间。于是「命中」的概率,就是这个正态分布落在这个区间里的面积:

命中率 = Φ((窗 − 偏移) / 抖动) − Φ((−窗 − 偏移) / 抖动)

    Φ 是标准正态的累积分布函数。
    引擎用 Abramowitz & Stegun 7.1.26 算 erf,误差 1.5e-7 ——
    远比这件事需要的精度高。

    三个输入:窗口有多宽(游戏定的)
              你偏了多少(可以校准掉)
              你抖了多少(只有这一项要练)

把一组具体的数代进去。假设窗口 ±60ms(大约 3.6 帧),你偏早 30ms,抖动 45ms:

窗口 ±60ms 之下

    偏 −30ms / 抖 45ms  →  命中 72.5%
    偏   0ms / 抖 45ms  →  命中 81.8%     ← 什么都没练,只把偏移减掉
    偏   0ms / 抖 30ms  →  命中 95.4%     ← 再把手练稳

    第二行减第一行 = 白拿 9.3 个百分点。
⚠ 坑 · 这个模型什么时候会失效

「误差服从正态分布」是一个近似,而且是一个会在特定情况下明显失效的近似。

它失效的典型场合是:你的失误里混进了「认错格」。那些点不是从同一个分布里出来的 —— 它们是另一件事(你敲到了隔壁那一格),距离是半格,而不是几十毫秒。

如果你把它们和正常的误差混在一起求标准差,会得到一个被严重高估的抖动,然后据此得出「我需要练稳」的错误结论。正确的做法是先把它们挑出来单独数(第 2 章那个「敲到隔壁格」计数),剩下的才拿来算这个积分。

这就是为什么本书的四种病里,「认错格」必须单列一格 —— 它不只是更严重的抖动,它根本不在同一个统计模型里。

◆ 判词 · 偏移是免费的,抖动是要付钱的

从第一行到第二行,你一秒钟都没有练。你只是把一个常数搬回了原点。

从第二行到第三行,你要把抖动从 45ms 压到 30ms —— 那是几周甚至几个月的事。

两件事的收益是同一个量级,成本差了几万倍。先做免费那件,是任何人都该做的第一件事。

「全中」的概率涨了四百倍

上面那 9.3 个百分点,听起来还算不上惊人。但节奏天国的最高评价靠的不是平均命中率,而是一整段不出错

「连续 n 个全中」是一串独立事件的连乘。单次概率的一点点差别,被连乘放大之后会变得非常夸张:

50 个音符的一段

    偏 −30ms:  期望中 36.2 个    全中概率 1.02e-7
    偏   0ms:  期望中 40.9 个    全中概率 4.23e-5

    全中概率涨了 414 倍。

    换句话说:
    校准之前,你大约要打一千万遍才碰上一次全中;
    校准之后,两万多遍就有一次。
    还是很难 —— 但这已经是「有可能」和「不可能」的区别。

这个倍数会随段落长度继续放大。段落越长,偏移的伤害越指数级 —— 而这恰恰是那些长 Remix 关卡为难人的机制之一。

成绩单长什么样

再看得细一点。同样是偏 −30ms、抖 45ms,把三档判定拆开:

完美还行勉强打飞
偏 −30ms / 抖 45ms45.0%32.7%16.2%6.2%
校准之后54.1%32.0%11.2%2.6%

注意「打飞」那一栏:6.2% 降到 2.6%,少了一半以上。这一栏是最要命的,因为在很多关卡里,打飞不只是少拿分 —— 它还会打断你的节奏感,让你接下来几拍都跟着崩(第 21 章专门处理这件事)。

那 6.2% 的打飞,才是真正的敌人

在算总账之前,有必要说清楚这四档的价值并不是线性的。

「完美」和「还行」之间差的是分数;「勉强」和「打飞」之间差的是你还在不在这首歌里。

前三档虽然扣分,但它们都有一个共同点:你打的那一下,落在了正确的音符上。身体收到的反馈是「我在这个位置动了手,游戏认了」——这是一次正确的经验。

打飞不一样。打飞之后,你会有一个短暂的失重期:你不确定自己刚才错在哪,也不确定下一个音符在哪。这个失重期通常比那一下本身长得多,第 21 章会专门量它 —— 一次失误之后,你要用几拍才能回到判定窗里。对很多人来说,答案是三到五拍,也就是一次打飞的实际代价,是三到五个音符

把这件事和上面那张成绩单放在一起看:校准把打飞率从 6.2% 降到 2.6%,看起来只少了 3.6 个百分点;但如果每次打飞的实际代价是四个音符,那么在一段 50 个音符的谱面里,这 3.6% 意味着少崩掉将近 7 个音符。这已经不是「多拿一点分」,这是「这一关过不过得去」。

自己拨一遍

下面这台计算器把上面全部的算术摆开了。请把「你的抖动」那根滑杆先拨到你在第 2 章量出来的值,再去动其他滑杆 —— 你会立刻看出哪一根最值钱。

几个值得你亲手验证的现象:

  • 把速度拉快,窗口那一行不变,但「一格」在缩。窗口没变窄,是格子变窄了 —— 难度的来源不是判定,是密度。
  • 抖动很小的时候,再压抖动几乎不涨分。抖 15ms 的人已经差不多满了,他该去练的是别的东西(比如认错格)。
  • 抖动很大的时候,校准偏移的收益反而变小。因为分布本来就摊得很宽,挪一点点中心没什么用。偏移的收益,在你越稳的时候越大。
◆ 判词 · 边际收益会翻转

最后那一条值得单独记住,因为它决定了练习顺序:

抖动大的时候,先练稳(校准的收益被淹没了);抖动小了之后,校准的收益才凸显出来。

不过对绝大多数人来说,这个顺序在实践上是反的 —— 因为校准只要十分钟,而练稳要几周。先做完那十分钟,再开始几周。

换一个更有感觉的说法:你平均能连几个

百分比这个单位有点抽象。把它换成音游玩家真正在意的那个量 —— 断连之前平均能连几个 —— 会立刻具体起来。

如果每个音符的「不打飞」概率是 p,那么第一次打飞之前的期望连击数是 p / (1 − p)

从「打飞率」到「平均连击」

    打飞率 6.2%(校准之前)  →  平均连 15 个就断一次
    打飞率 2.6%(校准之后)  →  平均连 37 个才断一次

    打飞率 1.0%             →  平均连 99 个
    打飞率 0.5%             →  平均连 199 个

    注意这条曲线的形状:打飞率每减半,平均连击就翻倍。
    到了后期,进步会以「连击长度成倍增长」的形式出现,
    而不是以「命中率涨几个百分点」的形式出现 ——
    后者看起来毫无变化,前者却是天壤之别。

这解释了一件让很多人沮丧的事:你在中后期的进步,从命中率上完全看不出来。从 97.4% 到 99.0%,百分比只动了 1.6 个点,听起来像没进步;可你的平均连击从 37 涨到了 99,翻了将近三倍,实际体验完全不是一回事。

所以如果你想看到自己在变强,别盯命中率,盯连击长度,或者盯第 2 章那个抖动数。这两个量对后期的进步敏感得多。

早和晚,为什么不是对称的

上面所有的算术都假设你的误差是一个对称的正态分布。实际打起来,有一个方向会更常见。

第 1 章那个 demo 多半已经让你看到了:跟着稳定节拍敲的时候,人的偏移常常是负的 —— 你敲在拍之前。这不是失误,这是预判系统的正常输出(第 17 章会量它随速度怎么变)。

这件事有个实际后果:大多数人的「打飞」是偏向「太早」那一侧的。而人对这两种失误的主观感受完全不同 —— 打晚了你会明确感到「我慢了」,打早了却常常感觉不到,因为声音还没响,你没有参照物。

于是「太早」这一类失误是有系统性偏见的:它更常发生,也更不容易被自己察觉。这正是校准(第 5 章)值钱的地方 —— 它专门对付一个你自己感觉不到的常数。

为什么游戏不肯告诉你毫秒

看到这里你可能会想:既然这些数这么有用,为什么游戏不直接报给我?

因为对它想做的事来说,报毫秒会帮倒忙。

节奏天国想让你进入的状态,是「跟着音乐动」;而一旦屏幕上开始滚动毫秒数,你的注意力就会从转到 —— 你会开始盯着那个数字做微调,而那正是第 1 章说的那条注定超时的通路。报毫秒会把一个听觉游戏变成一个视觉反馈游戏。

所以它的选择是合理的:玩的时候不要毫秒,练的时候需要毫秒。这本书补的就是后一半 —— 你在这里量清楚,回去照样闭着眼睛玩。

🎮 回到节奏天国 · 「差一点」的那三种

下次拿到「还行」而不是「完美」的时候,回想一下这三档的分布:

如果你的完美只有四成、还行三成,你多半是偏移问题 —— 整团分布挪偏了,边缘部分掉进了下一档。

如果你的完美有五成、但偶尔打飞,那是抖动的尾巴 —— 分布中心是对的,只是太宽。

如果你打飞得很有规律(比如每次都在同一个地方),那既不是偏移也不是抖动,是第 13 章的位移问题:你在那个地方数错了格。

✋ 落到手上 · 三分钟的算术

拿第 2 章量到的两个数,回到上面那台计算器,做三件事:

1. 把窗口拨到 ±2 帧,看你的「完美率」是多少。这个数比总命中率更能预测你能不能拿最高评价。

2. 把偏移拨到 0,看完美率涨了多少。这就是你去校准能白拿的量。

3. 把抖动往下拨 10ms,看完美率又涨多少。这就是接下来几周练习的目标价值。

如果第 2 步的收益比第 3 步还大 —— 而对很多人确实如此 —— 那么你现在最该做的事,是翻到第 5 章,而不是再打一遍。

接下来

这一章假设了一件事:你的误差中心在哪里,是可以被搬动的。

但在搬它之前,得先搞清楚那个偏移是从哪来的。它有一部分是你的(你的身体习惯提前多久出发),还有一部分根本不是你的 —— 是屏幕、是音频输出、是那条你以为没有延迟的信号路径。

下一章先处理一个更基础的问题:你到底是在用耳朵打,还是在用眼睛打。因为这两条通路的延迟完全不同,而混着用是最糟的一种。

这个顺序不能颠倒。校准的前提是「你的偏移是一个稳定的常数」;而如果你一会儿跟眼睛、一会儿跟耳朵,你的偏移根本不是常数 —— 它会在两个值之间跳。对一个跳来跳去的东西做校准,等于没做。所以必须先把通路固定下来,才谈得上把它上面的那个常数减掉。

对症CH 03
偏移 抖动 走位 认错格

本章治的是:偏移与抖动的定价。它不教你怎么变强,它告诉你哪一种变强更便宜 —— 以及在什么条件下这个结论会翻转。

带走一句话:把偏移修掉,命中率 72.5% → 81.8%,全中概率涨 414 倍,成本是十分钟。