第38分钟的直塞:画面停在哪一帧,结论就可能不同

模拟比赛第38分钟,青屿城0比0对阵滨江联。青屿城中场许朗在中圈弧前沿抬头,右脚贴地直塞,前锋韩野从滨江联两名中卫之间前插,拿球后面对门将推射破门。滨江联的后卫几乎同时举起手臂,示意越位。

转播导播把画面暂停,在草皮上画出一条横线:线的一端贴着滨江联倒数第二名防守球员的脚跟,另一端落在韩野向前迈出的右脚附近。肉眼看去,两者几乎重合,弹幕立刻分成两派。可真正该先问的是另一个问题:这一帧到底是不是许朗脚触球的那一帧?

韩野前插时的速度大约是每秒8米。常见的转播画面每秒25帧,相邻两帧之间隔着0.04秒,这段时间里他已经向前移动了三十厘米左右。如果暂停画面比真正的传球瞬间晚了一帧,那条线画得再精确,也是在一个错误的时刻上测量位置。越位判断最容易被误解的地方就在这里:大家盯着“线”,但先决定结论的是“时间点”。

Event:一次越位事件需要同时锁定四个对象

AI裁判处理越位,第一步是明确这一次事件里涉及哪些对象。至少有四个:

  • 传球瞬间:同队球员传球或触球的那一刻,本例是许朗右脚触球的时刻。越位位置只在这一刻判定,之后进攻球员跑到哪里都不改变这一结论。
  • 可能越位的进攻球员:本例是韩野,也可能同时存在第二名处于越位位置的进攻球员。
  • 倒数第二名防守方球员:通常是防线上最靠后的那名后卫,因为门将常常是最后一人;但门将出击时情况会反过来,所以系统不能把“门将永远是最后一人”写死。
  • 球的位置:进攻球员如果与球齐平或在球的后方,也不处于越位位置。

在进入空间测量之前,还要先做几道过滤:进攻球员当时是否在对方半场(身体各有效部位都在本方半场或中线上,不处于越位位置);这一次传球是否来自球门球、掷界外球或角球——这三种情况下直接接球不存在越位犯规。只有通过这些过滤,事件才会进入下一步。很多看起来“有争议”的越位,其实在这一步就已经有答案了,比如边后卫掷界外球给前插的边锋,不管位置多靠前都不构成越位。

Vision:先找到时间,再测量空间

视觉层要解决两个问题,而且顺序不能颠倒。第一个是时间:传球到底发生在哪一刻。只靠画面找触球帧有天然的精度上限——摄像机每秒拍多少帧,时间精度就停在多少。公开的半自动越位技术(SAOT)资料给出了一个思路:在比赛用球内部安装传感器,以每秒500次的频率上报数据,用来精确标记触球时刻。与之配合的是安装在球场顶棚下的12台专用追踪摄像机,每名球员最多追踪29个身体数据点,每秒更新50次。两套数据的频率差了十倍,原因很直接:摄像机负责“在哪里”,球内传感器负责“是什么时候”。

第二个问题才是空间:在触球那一刻,谁的哪个部位离对方球门线更近。这里涉及越位规则里一个非常具体的细节——判定越位时只看头、躯干和脚等部位,所有球员(包括守门员)的手和手臂都不计入。规则对手臂的上界也有说明,以腋窝底部为界,肩膀属于可计入的部位。因此视觉层输出的不能只是一个“球员中心点”,而必须是一组带部位标签的骨架点:进攻方取可计入部位中最靠近对方球门线的那一点,防守方同样取倒数第二名球员可计入部位中最靠近本方球门线的那一点,再比较两者。

回到第38分钟:假设系统通过球内数据确认许朗触球的时刻落在两帧追踪数据之间,那么韩野和那名中卫在触球瞬间的位置需要用前后两帧插值得到,而不是随手取最近的一帧。韩野伸出的右臂也许比肩膀更靠前,但手臂不计入;真正需要比较的是他的右肩、右脚尖与中卫脚跟之间的前后关系。

视觉层同样需要报告自己的不确定性。禁区附近球员密集,倒数第二名防守球员的脚跟可能被另一名球员挡住;韩野冲刺时身体前倾,肩部骨架点的估计误差会比站立时更大。公开资料中为球员做3D扫描、生成数字形象,本质上也是为了减少这类误差:知道一名球员真实的肩宽、腿长和体型,骨架点的位置才更可信。对游戏来说,这意味着每一个位置坐标都应当附带误差范围,后面的判罚层才能区分“明显越位”和“差距小于误差”的两类情况。

Rule:处于越位位置,不等于越位犯规

空间测量给出的只是“是否处于越位位置”。处于越位位置本身并不是犯规,规则要求进攻球员在同队触球那一刻处于越位位置,并且随后参与了比赛,才判罚越位。参与比赛主要有三种情形:干扰比赛(触及或处理了同队传来的球)、干扰对方球员(例如阻挡门将视线、与对方争抢球、做出明显影响对方处理球的动作),以及从越位位置获得利益(例如球从门柱、横梁或对方球员身上弹回后再拿球)。

这一层很容易被游戏简化掉。设想同一次进攻中,青屿城的另一名前锋方锐也处于越位位置,但他跑向远端、从未接近球,也没有影响任何防守球员,那么他不应该被判越位。如果系统一看到“有人在越位位置”就吹停,就会把大量本应继续的进攻错误地终结掉。但如果方锐站在门将正前方、挡住了门将看向来球的视线,情况就完全不同,即使他没有碰到球,也可能构成干扰对方球员。同一个站位,参与方式不同,结论也不同,这正是规则层必须读取“之后发生了什么”的原因。规则层还要处理齐平的情况:与倒数第二名防守球员或与球处于同一水平线,不属于越位位置。至于防守方有意识地处理球之后形成的新局面,规则有专门条款,规则引擎应当照条文实现,而不是用一个模型去概括。

Decision:明显的交给系统提示,接近的交给人确认

公开资料中关于2026世界杯的描述,给了一个很清晰的分工模型:为每名球员进行3D扫描、生成数字形象,使骨架点的位置更贴合真实体型;遇到明显的越位,系统直接向场上助理裁判发出提示;最终的判罚仍由裁判团队作出。换句话说,AI提供的是证据,决定权留在人手里。

游戏里的越位模块可以借鉴这种分层。对于差距很大的越位,系统可以直接给出结论;对于差距在测量误差范围之内的判罚,系统应当把它标记为“接近判罚”,交给玩家扮演的裁判或视频助理裁判角色确认,并同时给出测量的不确定区间。这样做的好处是:玩家能感受到越位判断的真实难度,而不是面对一个永远正确、也永远没有讨论空间的机器。

还有一个时间上的决策:接近的越位不一定要立刻举旗。现实中助理裁判在难以判断的情况下,常会等进攻结束再示意,以免错误地打断一次合法进攻。游戏里的判罚层也可以保留这种“延迟判定”的状态,让进攻先走完,再回到触球那一刻处理。

Explanation:观众需要看到的是哪一帧、哪个部位

公开资料提到,判罚之后会生成3D动画向现场和转播观众展示越位情况。这一步的意义在于把一个依赖精确测量的结论,变成普通观众也能看懂的画面。游戏里的解释应当包含同样的要素:

第38分06秒,许朗右脚触球瞬间(依据球内数据确定)。青屿城9号韩野右肩较滨江联5号中卫右脚跟更接近对方球门线,手臂不计入判定。韩野随后接球射门,参与了比赛。结论:越位,进球无效,由滨江联在越位发生地点罚间接任意球。

这段说明里,“触球瞬间如何确定”和“比较的是哪个部位”被明确写了出来,直播间里就不会再为“是不是暂停错了帧”“手有没有算进去”争论下去,讨论会转向真正值得讨论的地方。类似的解释思路也适用于身体接触类判罚,可以对照阅读一次身体接触到底是不是犯规

把时间放进游戏:越位模块的几个设计取舍

在模拟比赛里,系统其实“知道”每一名球员每一刻的精确坐标,因为比赛本身就是它生成的。直接用这份完美数据判越位,结果当然准确,但会带来两个问题:一是判罚过程失去了真实的难度,玩家扮演的裁判没有可以练习的判断;二是解释层变得空洞,因为结论不依赖任何可观察的证据。

更好的做法是让判罚模块只读取“观测层”的数据:模拟的摄像机有帧率上限,模拟的球内传感器有采样频率,球员骨架点带有误差。越位判断因此重新变成一个需要先找时间、再量空间的过程,接近的判罚会自然出现,解说和主播也就有了可以讨论的真实素材。行业里的技术进展可以参考AI裁判从碰撞检测走向规则与语境判断这篇观察。

回到第38分钟那条几乎重合的线。如果只靠一张暂停画面,任何结论都经不起追问;而当系统先用球内数据确定许朗触球的时刻,再在那一刻比较韩野的右肩和中卫的脚跟,最后说明手臂不计入、韩野随后参与了进攻,这个判罚才算真正完成。越位从来不是一条线的问题,而是“哪一刻的线”的问题。