打开AR篮球,把手机对着客厅扫一圈,一个橙色的篮筐就出现在了电视上方的墙面上。看起来很酷,直到你退后几步准备投篮:篮筐的上沿已经穿进了天花板,旁边就是一盏吊灯,而屏幕上画出的三分线正好落在茶几中间。模型放上去只用了几秒,但没有人问过这面墙、这个房间是不是真的适合打球。

AR体育和普通AR展示最大的区别就在这里。展示一把虚拟椅子,放歪了顶多难看;让玩家对着虚拟篮筐起跳投篮,放错了就可能伸手打到灯、后退撞到柜子。所以这件事的难点从来不是渲染,而是空间理解。九游体育在AR体育里遵循的顺序是:先认识真实空间,再把它变成可计算的地图,然后决定虚拟物体放在哪、放多大,接着在玩家运动时持续核对位置,最后根据空间条件给出合适的训练任务。

真实空间里到底有什么?一个客厅至少要回答五个问题

对篮球来说,房间不是一张背景图,而是一组约束。在放任何东西之前,系统需要搞清楚:

  • 地面有多大、是不是平的:可走动的地面决定了投篮距离能拉多远,也决定了玩家能不能做横向移动。
  • 哪面墙可以用:篮筐需要贴在一面前方足够空旷的墙上,而不是电视、窗户或者挂满装饰画的墙。
  • 天花板有多高:这直接决定篮筐能挂多高,以及玩家能不能起跳。
  • 家具摆在哪里:沙发、茶几、餐椅会切掉可活动区域,边角还可能绊脚。
  • 哪些东西碰不得:吊灯、落地灯、玻璃柜、电视屏幕,这些即使不在地面上,也在玩家举手和投球的路线上。

这五个问题里,前两个手机比较擅长回答,后三个则需要更多推断,而且往往回答得不够确定。整个系统的设计,就是围绕“哪些知道、哪些不太确定、不确定时怎么办”展开的。

平面检测之后还差什么?从“找到地面”到“知道能动多远”

ARKit 和 ARCore 都提供平面检测,能在画面中找到水平面和竖直面,也就是地面、桌面和墙面。带 LiDAR 的设备还能直接获得场景网格,对家具的形状、墙角的位置了解得更细。没有深度传感器的手机,则主要依靠摄像头画面中的特征点和运动来估计空间结构。

找到平面只是第一步。检测到的地面往往是一块块不规则的补丁,沙发底下、阴影里的地板可能根本没被识别;白墙缺少纹理,竖直面检测会比较慢。示例流程里,系统会引导玩家按固定顺序扫描:

扫描地面 → 沿墙面平移 → 抬起手机看天花板 → 标出家具与易碎物 → 划出可活动区域 → 计算篮筐尺寸与投篮线

层高是其中最难的一项。不少手机很难直接检测到天花板这个平面,尤其是在灯光刺眼或者天花板颜色单一的时候。所以系统会结合几种线索:墙面向上延伸到哪里还能被持续追踪、有无深度数据、玩家抬手机时的角度变化。如果估算结果不够可靠,就按保守值处理,宁可把篮筐挂低一点、取消跳跃任务,也不按一个可能偏高的估计去设计动作。

家具和易碎物同样有两种来源:设备能自动识别出的高于地面的物体,以及玩家在扫描时手动点选、标注的区域。吊灯这类悬在半空、体积不大的物体,自动识别并不稳定,手动标注反而更可靠。标注完成后,这些区域会向外扩一圈安全边距,再从可活动区域里扣掉。

还有一个容易被忽略的问题是尺度。AR框架会结合摄像头画面和手机的运动传感器估计真实距离,大多数情况下误差不大,但在快速移动、光线不足的环境里可能出现偏差。示例做法是用一个已知量交叉核对:玩家校准时录入的身高,在镜像画面里对应多长的人体轮廓;已识别的门框或桌面高度是否落在常见范围内。如果几条线索对不上,系统会把可活动区域和篮筐高度都往保守方向收一收,再提示玩家补扫一遍。

篮筐挂在哪、挂多高?虚拟物体要服从真实尺度

标准篮筐离地3.05米,多数住宅的室内净高都比这个数字低。如果坚持按真实尺寸放,篮筐要么穿进天花板,要么只能看不能投。更合理的做法是按比例缩放,但缩放不是简单地把模型变小。

示例设定里,系统先根据层高、灯具位置和玩家身高确定篮筐的最高可用高度,再根据选中那面墙前方的可用纵深确定投篮线的位置。两者一起调整,目标是让出手时手臂上抬的角度和球的弧线大致保持在合理范围里,而不是让玩家对着一个很低的篮筐平着把球扔过去。篮筐直径也会随高度同比缩小,保持投进的难度不至于过低。

篮筐的位置还有几条硬约束:不能挂在电视或窗户上,下方地面要有足够的空地,左右两侧一定范围内不能有灯具和玻璃柜,因为球弹框以后的虚拟轨迹会引导玩家的视线和身体跟着走。满足不了这些条件的墙面,系统会直接排除,并在画面里告诉玩家“这面墙前方空间不够”。

球本身的物理也要服从房间。真实篮球投丢以后会弹向任何方向,玩家会本能地追过去;在客厅里,这种追球很可能直接冲向沙发或者茶几。所以虚拟球弹框后的落点被限制在可活动区域之内,滚向家具时会提前减速停下,或者自动回到玩家手边。虚拟球滚到真实沙发后面时,如果设备支持遮挡处理,球应该被沙发挡住,而不是浮在沙发表面,这样玩家对空间前后关系的判断才不会被误导。

玩家投篮的时候,系统在看什么?

AR篮球有两种常见玩法。一种是戴AR眼镜或头显,玩家从自己的视角看到篮筐,手部追踪负责识别出手动作;另一种是把手机或平板放在支架上,前置摄像头像一面镜子,同时拍到玩家和身后的房间,虚拟篮筐叠加在画面里的墙上,用人体姿态估计读取投篮动作。两种方式的空间地图来源不同,但运动时要核对的东西是一样的。

第一是玩家位置。玩家的脚步是否正在漂向可活动区域的边缘,连续几次投篮之后是不是离茶几越来越近。靠近边界时,画面上的安全线会先变色提示,再进一步时暂停任务。第二是动作空间。起跳加上举臂,手能达到的最高点可以用校准身高、手臂长度和起跳时髋部的上升幅度来估算,如果这个高度接近灯具或层高的保守值,系统就不再布置跳投任务。第三是动作本身:屈膝、蹬地、伸臂、压腕的顺序和节奏,这是训练真正要练的内容。

在镜像模式里还有一个常见情况:玩家走到画面边缘,手臂或脚被裁掉,关键点的 Confidence 明显下降。这时系统不会继续给出手动作打分,而是提示玩家回到画面中央。低置信度下的错误评分,比不评分更让人困惑。

运动过程中房间也可能临时变化。宠物跑进可活动区域、家人从沙发边走过,这些动态障碍不在扫描时的地图里。镜像模式下,系统能从画面中检测到第二个人进入,眼镜或头显则可以借助透视画面和深度信息发现靠近的物体。一旦出现这种情况,当前任务会立刻暂停,等区域重新空出来再继续,而不是让玩家在有人经过的时候完成一次后撤步投篮。

放不下的时候怎么办?分级降级,而不是硬放

很多客厅确实放不下一个像样的投篮场景。这时候最糟的选择是假装放得下。示例方案会根据扫描结果把空间分成几档,每一档对应不同的训练任务:

  • 空间充足:缩比例篮筐、可前后移动的投篮线,允许小幅起跳投篮和左右移动接球后出手。
  • 纵深够、层高紧张:篮筐挂低,取消所有跳投任务,只做原地定点投篮,重点练出手节奏和弧线。
  • 纵深不够或灯具太近:不再放篮筐,改成墙面目标训练,在胸口到头顶高度之间出现几个目标区,玩家用投篮手型完成指定顺序的出手,同时配合原地脚步。
  • 扫描不可靠:光线太暗、墙面无纹理或者地面识别面积太小时,提示玩家补光或重新扫描,暂时只提供不依赖空间的手型练习。

墙面目标训练听起来没那么像篮球,但它保留了投篮里最需要重复的部分:下肢发力到出手的衔接、手腕的跟随动作、每一次出手的一致性。与其在一个放不下的球场里冒险起跳,不如在安全的范围里把动作练扎实。关于客厅里安全移动区域的更多判断方法,可以参考AR体育游戏怎么知道客厅哪里可以安全移动。

房间不是一成不变的:什么时候需要重新扫描?

一次扫描得到的地图,只在房间没有变化、定位没有漂移的前提下有效。家里有人把餐椅拉到了客厅中间,孩子把玩具箱推到了墙边,或者晚上开了另一盏灯让画面特征变了,原来的地图都可能不再准确。另外,长时间运动后,虚拟篮筐的锚点可能会慢慢偏离原来的墙面位置。

示例设计里,下面几种情况会触发重新扫描的提示:定位追踪丢失后恢复、虚拟篮筐和墙面之间出现明显的相对位移、玩家第一次在新的时间段或新的房间打开游戏、可活动区域里检测到新的障碍物。重新扫描不必从头开始,只需要对变化的区域补扫。九游体育会保存上一次的房间布局,下次打开时先比对,差别不大就直接沿用,差别明显才要求补扫。

对玩家来说,这些检查可能会多花几十秒。但AR体育的意义本来就在于让身体在真实空间里动起来,而真实空间里有墙、有灯、有家具。把篮筐放进客厅很容易,确认这个球场真的放得下,才是让人能放心起跳的前提。更多VR和AR场景下的体育玩法,可以在VR体育与AR体育栏目里继续了解。