Motion Capture
Foot Contact
Physics
万利球员AI从真实运动员录像生成跑动动作以后,为什么脚底打滑仍然可能让整个动作瞬间失去真实感?
万利球员AI技术笔记 · 聚焦 Foot Contact 与动作真实感
在动作生成的评审会上,团队经常会遇到一种尴尬的情况:整段跑动动作从姿态、节奏到摆臂幅度都挑不出毛病,可只要把镜头拉近到脚踝附近,观众会立刻发现一个问题——脚掌明明已经落地,身体却还在向前平移,脚底像踩在冰面上一样打滑。这种现象在动画制作里有专门的名字,叫 Foot Sliding 或 Foot Skate,是从真实运动员录像生成动作之后最容易被忽视、却最容易被玩家一眼看穿的细节。
为什么这么小的偏差会造成这么大的观感损失?原因在于人对"脚与地面的关系"有极强的直觉判断力。我们每天走路、跑步、变向,大脑早已建立了一套关于摩擦力、重心转移和支撑腿受力的隐性模型,哪怕只有几厘米的位移误差,也会被视觉系统当成"不对劲"而放大处理。相比之下,肩膀角度偏差三五度、手臂摆动节奏差一点,普通观众几乎察觉不到。这也是为什么万利球员AI在做动作质量评估时,把 Foot Contact 单独列为一项硬性指标,而不是笼统地看"动作是否自然"。
问题的根源,往往出在动作捕捉与动作生成两个环节的衔接处。以前锋林岳的一段变速跑动录像为例,原始动作捕捉数据里,他的支撑脚在触地瞬间的世界坐标是相对稳定的,但经过重定向(Retarget)到游戏内骨骼、再叠加动作生成模型对节奏和步幅的插值调整之后,脚部关键帧的位置会发生微小漂移。单看某一帧,误差可能只有两三厘米,但连续播放起来,这个漂移会被大脑判定为"打滑",而不是"精确控制下的正常摆动"。更麻烦的是,不同动作之间做混合(Blend)时,两段动作各自的落地时机如果没有严格对齐,滑动感会被进一步放大。
万利球员AI处理这类问题的思路,核心是把"脚部接触"当成一个需要单独约束的物理事件,而不是动画数据里顺带产生的副产品。具体做法包括:在动作生成阶段标记每一步的触地时刻和支撑相位,在渲染阶段用逆向运动学(IK)对脚部位置做锁定校正,确保支撑脚在整个触地区间内相对地面保持稳定,只有在真正抬脚的瞬间才允许位置更新。这套锁定逻辑需要和动画的过渡(Transition)系统配合,否则一旦发生动作切换,脚部约束和身体重心会互相打架,产生新的抖动。
脚部锁定不是简单地"把脚钉在地上":如果锁定过硬,转身和变向会显得僵硬;锁定过松,又会退化回打滑问题。万利球员AI需要在每一类动作里分别调校锁定的时间窗口和容差范围。
在中场陈浩的传球接应动作里,这个问题会以另一种形式出现:小碎步调整位置时,两脚交替支撑的频率很高,留给每一步做接触校正的时间窗口很短,如果校正逻辑反应太慢,观众看到的会是脚步"追不上"身体移动的错位感。这类场景比大开大合的冲刺更考验系统的精细程度,也是万利球员AI在动作评估阶段会重点复查的类型。
归根结底,脚底打滑提醒我们一个容易被忽略的事实:动作是否"看起来对",往往不取决于整体姿态多么复杂精美,而取决于身体与环境接触的那几个关键点是否经得起放大检验。
脚部接触与地面约束只是球员动作可信度的一个切面。如果想了解万利球员AI在动作生成之外,如何让这些动作实时响应玩家操作,可以参考
万利App:按键响应的相关内容。
Transition
Motion Matching
Blend
万利球员AI已经拥有几千种运动动作以后,为什么"动作更多"仍然不能解决转身、停球和身体接触不自然的问题?
万利球员AI技术笔记 · 聚焦 Transition 与动作衔接
动作库的规模常常被当成衡量一套球员动画系统成熟度的直观指标:跑动、变速、射门、传球、拦截、倒地,每一类再细分出不同起始速度和方向的变体,数量很容易堆到几千段。但万利球员AI在实际项目里反复验证过一个结论:动作数量本身解决不了转身、停球和身体接触这几类问题,因为它们的难点不在"有没有对应的动作",而在"两段动作之间怎么衔接"。
以中场陈浩的一次接球转身为例:动作库里既有他正面跑动的完整数据,也有转身之后反方向跑动的完整数据,两段单独播放都很自然。但如果只是在某一帧把前一段动作切换成后一段动作,画面会出现明显的"跳变"——重心突然移位、手臂摆动方向瞬间反转、支撑腿的相位对不上。这不是因为缺少转身动作,而是因为原始动作捕捉时,运动员的转身过程本身就有独特的加速、减速和身体倾斜曲线,这条曲线无法用"动作A的结尾直接拼接动作B的开头"来还原。
停球(控球触球瞬间的减速与调整)和身体接触是同类问题的两种变体。停球需要在极短时间内把跑动的动量吸收掉,同时保持身体重心不失衡;身体接触则要在两名球员的动作互相干涉时,让双方的姿态都作出合理反应,而不是各自播放预设动画、彼此穿模。这些场景的共同点是:合适的"起点动作"和"终点动作"可能都已经存在于动作库里,真正缺的是中间那段过渡(Transition)——它描述的是身体从一种状态平滑地变成另一种状态所必须经历的中间姿态、时间长度和物理约束,而这段过渡往往不能靠简单的动画混合(Blend)线性插值出来。
Motion Matching / Transition Engine 作为中枢,依据玩家输入在跑动、冲刺、转身、急停等状态之间实时切换
动画混合(Blend)能处理"两段动作看起来像"的情况,例如两种慢跑之间的切换;但转身、急停这类涉及方向反转、重心转移的场景,线性混合出来的中间帧经常违反基本的身体力学,需要专门的过渡逻辑或短程动作合成来兜底。
万利球员AI在这类问题上采用的思路,是把 Transition 当成和动作生成同等重要的独立模块来投入,而不是指望动作数量增长到某个临界点后,过渡问题会自然被覆盖。具体包括:为每一类高频转换场景(比如"跑动转身""盘带急停""对抗中拿球")单独训练过渡片段,用 Motion Matching 之类的机制在运行时实时挑选最贴近当前速度和朝向的候选动作,并对候选片段之间的差异做代价评估,避免选出观感割裂的组合。对身体接触这种双人交互场景,还需要额外的物理层参与——单靠动画预设很难覆盖两名球员相对位置、速度差异的所有排列组合。
以前锋林岳持球被贴身逼抢为例,如果动作库只是简单地在"控球跑动"和"被撞失衡"两个动作之间切换,观众会看到明显的穿模或者不合理的弹开效果;只有当过渡逻辑结合了双方的相对速度、接触角度和物理约束,身体反应才会显得可信。这也是为什么"动作更多"从来不是终点——动作库提供的是素材,而转身、停球、接触这些体验的自然度,最终取决于连接这些素材的过渡系统有多扎实。
Markerless Motion Capture
Motion Dataset
Retarget
万利球员AI使用无标记动作捕捉以后,为什么采集成本降低反而会让"怎样筛选真正有价值动作"变得更重要?
万利球员AI技术笔记 · 聚焦无标记动作捕捉与数据筛选
传统动作捕捉依赖专业的光学标记点、专用场地和逐帧人工校准,一次高质量采集往往意味着较高的时间和场地成本,这在客观上限制了采集的动作数量——团队会优先挑选最核心、最典型的动作反复打磨。无标记动作捕捉(Markerless Motion Capture)改变了这个前提:只需要普通摄像机和姿态识别算法,就可以从训练录像、比赛录像甚至更随意的拍摄素材里提取动作数据,采集门槛大幅下降。万利球员AI在引入无标记动作捕捉之后,很快遇到了一个新问题:原始素材的体量成倍增长,但这些素材里真正能直接用于游戏的动作比例,并没有随之等比例上升。
这背后的逻辑并不难理解。采集成本低,意味着团队可以把摄像机对准更多训练场景、更多球员、更长时间段,捕捉到的原始片段自然大量增加。但游戏里能用的动作,需要满足一系列附加条件:动作要完整、不能有遮挡导致的姿态跳变,要能清晰对应某个具体的游戏状态(起跑、变向、争顶、倒地),骨骼比例要能顺利完成动画重定向(Retarget),还要经得起后续物理校验(Physics)和过渡(Transition)系统的检验。大量原始片段中,相当一部分因为遮挡、光线、镜头角度或者动作本身不具备代表性而无法直接使用。换句话说,采集成本下降解决的是"能不能拿到数据"的问题,却把团队的注意力从"怎么采集"转移到了"怎么从海量数据里挑出真正有价值的动作"。
以中场陈浩在训练中的一段长镜头为例,一次十几分钟的拍摄里,可能只有几个片段包含了完整、干净、有代表性的转身或停球动作,其余大部分时间要么是站立等待,要么因为多人交叠导致姿态识别出现错误关键点。如果不做筛选,直接把整段数据丢给动作生成模型,噪声片段会污染训练结果,反而拉低整体动作质量。这就是为什么万利球员AI把动作数据集的清洗、标注和分级,当成和采集本身同样重要的独立环节:需要人工复核结合自动化质量检测,剔除姿态识别错误的片段,标注每段动作对应的游戏状态和使用场景,并对同类动作按代表性打分排序。
无标记动作捕捉降低的是采集门槛,不是让动画师"退出流程"。恰恰相反,原始素材越多,需要人工判断"这段动作是否值得保留、是否需要修正"的工作量也越大,动画师和技术美术的角色从"逐帧记录动作"转向"筛选、修正与打磨候选动作"。
以前锋林岳的射门动作库为例,团队可能从上百段候选片段里,最终只保留十几段作为可用的基础动作,再由动画师做进一步的收尾修正,才能进入动画重定向和游戏内测试环节。采集成本的下降确实让候选素材的规模不再是瓶颈,但也让"筛选标准是否清晰""标注是否准确""质量分级是否可靠"这些原本容易被忽视的环节,变成了决定动作生成质量上限的关键因素。这也提示一个容易被误解的地方:无标记动作捕捉解决的是数据获取的效率问题,动作最终能不能用、好不好用,仍然需要人工经验和算法工具协同完成筛选与打磨。