一个很容易被忽略的细节是:当用户戴上头显,看到一个虚拟角色端正地站在客厅茶几旁边,第一反应往往是"它固定住了,效果真不错"。但这只是空间计算里最基础的一层——世界追踪(World Tracking)把角色钉在了某个坐标上,仅此而已。真正决定这个角色是否"活在"这个房间里的,是它之后要经历的一整套更复杂的空间理解流程。
早期的AR应用大多只做到3DoF(三自由度):系统只知道用户的头往哪个方向转,却不知道用户在空间中移动到了哪里。这类应用里,虚拟内容常常表现得像贴在一层"天空球"上——无论走到房间哪个角落,画面里的物体总是保持相同的相对角度,伸手去够,永远够不到实处。6DoF(六自由度)在此基础上补上了位置信息:前后、左右、上下的真实移动都会被计算进去。只有具备6DoF,虚拟电视挂在墙上,用户走出房间再走回来,它才会仍然停在原来的墙面位置,而不是重新贴到用户面前。
但6DoF只解决了"用户在哪"的问题,没有解决"虚拟内容应该待在哪"的问题——这正是空间锚点(Spatial Anchor)要处理的事情。锚点的作用,是把一段数字内容绑定到某个具体的空间坐标或某个被识别出来的现实表面上,而不是简单绑定在屏幕的某个像素位置。这和网页里常见的CSS定位完全是两回事:CSS position是相对一块二维画布计算的,空间锚点则必须持续对照真实世界的几何结构去校正自己的坐标,抵消传感器误差和用户移动带来的累积偏差——这种偏差有个专门的名字,叫Anchor Drift(锚点漂移)。追踪不是永远绝对精确的,如果锚点在用户没有察觉的情况下慢慢偏移,哪怕只是几厘米,用户也会立刻发现:"这个虚拟角色好像不是真的站在那里",沉浸感瞬间被打破。
再往下一层,是房间映射(Room Mapping)和场景理解(Scene Understanding)。系统需要先把墙、地板、桌子、沙发这些结构扫描成几何网格(Room Mesh),再进一步识别出每一块网格对应的语义对象——这堵是墙、那块是桌面、旁边是沙发。只有具备了这层理解,虚拟角色才知道自己应该"站在地板上"而不是悬空漂浮,知道走到沙发后面时应该被遮挡(Occlusion)——身体的下半部分被真实家具挡住,而不是穿模般完整显示在沙发前方。这一步经常被外行忽略,却是判断一个MR场景是否可信的分水岭:遮挡关系一旦出错,再精细的建模和贴图都会显得像一张贴纸。
再往上,才轮到碰撞(Physics/Collision)和交互(Interaction):虚拟角色的手会不会穿过真实的桌面、它转身时是否在绕开真实的茶几、用户伸手打招呼时它能不能在合理的时间内做出反应。这些细节共同决定了一个数字角色究竟是"被摆在摄像头画面里的贴图",还是真正"存在于一个具有几何和语义结构的现实环境中"的空间对象。
所以,"角色不会随转头乱飘"更接近及格线,而不是终点——它证明追踪链路work了,却还没有回答场景理解、遮挡、碰撞和交互是否都已经跟上。这也是问鼎娱乐在梳理空间计算内容时反复强调的一点:空间计算真正的难度,不在"让东西看起来漂浮在空中",而在于让数字内容理解自己被放进了什么样的现实空间。