公司动态

XR笔记-Extended Reality核心概念总结

📅 2026/9/2 8:19:14
XR笔记-Extended Reality核心概念总结
Extended Reality1. Physical World 人、实验台、机器人、仪器、房间 ↓ sensors 2. Tracking / Spatial World Head pose、hand pose、地图、平面、anchor、reference spaces ↓ coordinate transforms 3. Application / Digital World Unity Scene、虚拟物体、UI、robot digital twin、interaction logic ↓ stereo rendering 4. Perceptual World 左眼图像、右眼图像、passthrough、声音、触觉 ↓ human action 回到 Physical World形成闭环1. 基本概念XR扩展现实Extended Reality, XR是一个总称包含虚拟现实VR、增强现实AR和混合现实MR等技术。VR用户看不到或基本看不到真实环境视觉主要由计算机生成用户的头和手被追踪虚拟摄像机随用户运动用户感到自己“处于”虚拟空间中。例如纯虚拟的 MuJoCo 机器人实验室就是 VR 场景。AR增强现实Augmented Reality, AR强调用户仍然看见现实世界虚拟信息叠加在现实之上叠加内容可以是文字、箭头、图标或 3D 物体。手机摄像头画面上叠加导航箭头是典型 AR。MR混合现实Mixed Reality, MR通常比 AR 多强调一层虚拟内容不仅显示在现实之上还理解并参与现实空间。例如虚拟试管放在真实桌面上虚拟机器人被真实桌子遮挡用户可以把虚拟面板固定在实验设备旁虚拟球可以碰撞真实墙面的空间模型。Spatial Computing持续计算“设备在哪、房间长啥样、每个真实/虚拟物体在三維空间里的位姿位置朝向、它们互相怎么挡、怎么碰”的一整套过程。2. XR 流程MR——真实世界人做抓取手势Quest hand tracking 提供 hand joint pose 和 pinch stateUnity 据此更新 Hand GameObject。真实培养皿通过 Passthrough 直接可见因此 Unity 不需要渲染其 Mesh但 Unity 需要维护一个带 Collider 的 invisible proxy。培养皿的 pose 不能简单认为由 SLAM/Scene API 自动提供而需要 object tracking、marker、robot vision 或预先 registration 等方式获得并转换到 Unity/XR 坐标系。当手与 proxy 重叠并检测到 pinch 时Unity 将其解释为Pick(target)高层交互事件经 ROS 发送给机器人控制侧机器人端经过坐标变换、grasp planning、IK 和控制执行真实抓取。真实机器人和培养皿直接通过 Passthrough 被用户看到机器人/物体状态则可以继续回传 Unity 用于 digital twin、overlay 和状态同步。VR——虚拟世界人做抓取手势Quest hand tracking 更新 Unity 中的 Hand GameObject手与虚拟培养皿 GameObject 的 Collider 重叠并 pinch 后Unity 产生Pick(target)事件通过 WebSocket 发送给 Python 控制侧。Python 中的 grasp planner / IK / controller 计算机器人控制量MuJoCo 负责具体虚拟世界物理状态的模拟。MuJoCo 是 simulation physics 的 ground truth。其机器人和培养皿状态持续回传 Unity经过MuJoCo → Unity 坐标系转换后更新对应 GameObject 的 Transform最终由 Unity/Quest 渲染因此用户看到虚拟机器人抓取虚拟培养皿。3. 设备与Tracking3.1 HMD头戴式显示设备Head-Mounted Display, HMD是戴在头上的显示和传感设备。Meta Quest一个铲平就是 HMD。独立式头显standaloneheadset意味着计算处理器在头显中Unity 应用直接运行在头显不需要 PC 持续参与Quest 的操作系统、追踪、应用和渲染都在设备端运行。PC 驱动的虚拟现实PC Virtual Reality,PCVR意味着应用和主要渲染运行在 PC头显主要提供 tracking、显示和输入tracking就是获取当前位置和朝向图像从 PC 传输到头显。Quest 可以同时扮演两种角色standaloneAndroid 应用直接运行在 QuestLink 类模式作为连接 PC 的 PCVR 头显。这两种模式的运行位置和可用功能并不完全相同。3.2 See-Through3.2.1 OST: Optical See-Through光学透视Optical See-Through是指真实光线直接穿过透明光学组件进入眼睛虚拟图像叠加其上。3.2.2 VST: Video See-Through视频透视Video See-Through是指现实世界 ↓ physical cameras camera images ↓ digital composition 虚拟内容 camera images ↓ opaque displays 用户眼睛Quest 的 passthrough 属于视频透视。Passthrough 可以理解为“由系统提供的现实世界视频背景”。视频透视更容易实现虚实合成颜色处理虚实遮挡完全 VR 与 MR 间切换。代价是摄像头和显示链路引入延迟视觉质量受摄像头影响应用访问摄像头涉及隐私和权限。Quest具体操作思路Quest Camera ↓ Passthrough Layer ├─────────────┐ │ │ ▼ ▼ Real-world video Unity virtual objects └──────┬──────┘ ↓ XR Compositor ↓ Final DisplayUnity 主要负责告诉系统“我这里要画一个虚拟箭头 / UI / robot / hologram。”而 Quest Runtime / compositor 负责最终显示合成。3.3 Pose3.3.1 DoF自由度Degrees of Freedom, DoF表示物体可独立变化的运动维度。三自由度3DoF一般只有旋转绕 X 轴旋转绕 Y 轴旋转绕 Z 轴旋转。六自由度6DoF包含三个平移X、Y、Z三个旋转。3.3.2 Position, Orientation, Pose位置position是三维坐标p(x,y,z)p(x,y,z)p(x,y,z)朝向orientation描述物体如何旋转。位姿pose是位置和朝向的组合Pose(position, orientation)Pose(position,\ orientation)Pose(position,orientation)但一个完整 pose 还必须包含两个隐含信息PoseF(t)(p,q) Pose_F(t)(p,q)PoseF​(t)(p,q)(F)它相对于哪个坐标系frames(t)这个 pose 对应什么时间(p)位置(q)旋转。3.4 Camera Tracking3.4.1 IMU惯性测量单元Inertial Measurement Unit, IMU通常包含陀螺仪测量角速度加速度计测量线性加速度相关信号。头显定位通常融合 IMU 和摄像头信息。IMU 更新频率高适合短时间运动估计但积分会产生漂移摄像头通过环境视觉特征提供几何约束可以帮助纠正漂移。现代头显通常采用VIO视觉惯性里程计或SLAM同步定位与建图进行 6DoF 位姿跟踪。3.4.2 SLAMSLAM 同时完成 Localization设备定位和 Mapping环境建图。这里需要区分三个层级Tracking MapSLAM 内部用于定位的环境特征地图例如 3D feature points主要服务于设备 pose estimation。Spatial Mesh提供给应用的环境几何表面例如墙、桌面、地面对应的三角网格可用于碰撞、遮挡和空间交互。Scene Understanding在几何信息上进一步加入语义例如识别 floor、wall、table 等场景结构。三者可能共享相同的底层传感器数据但不是同一个输出。SLAM 本身主要解决几何与定位问题不等于物体级语义理解。3.4.3 Inside-Out Outside-InInside-out tracking摄像头装在头显上头显向外观察房间Quest 主要采用这种方式。Outside-in tracking外部摄像头或基站观察头显/控制器常用于专门的高精度 tracking 系统。控制器 tracking 通常融合控制器 IMU 与头显摄像头观测。手部 tracking 则通常由摄像头图像经过手部检测、关键点估计和时序追踪输出 wrist、palm 和手指关节的 pose。4. Coordinate Frame4.1 Coordinate System Frame坐标系coordinate system规定X、Y、Z 轴轴的正方向左手系或右手系长度单位旋转表示方式。坐标框架coordinate frame包含一个具体 origin一组具体方向的轴。两个 frame 可以使用同样的轴约定但原点和朝向不同。Coordinate System 定义坐标表示的规则Coordinate Frame 是这个坐标系统在空间中的一个具体实例具有自己的原点和朝向。XR/Robotics 中通常更关心不同 Frame 之间的相对变换。4.2 Local Space 与 World Space局部空间local space表示相对于父节点的坐标。世界空间world space表示相对于场景全局 frame 的坐标。假设 Unity 中XR Origin └── Head Camera那么Head Camera.localPose head 相对于 XR Origin 的 pose Head Camera.worldPose XR Origin.worldPose × Head Camera.localPose这就是 parent/child transform composition。XR Origin 是 Unity XR 场景中用于表示整个 XR 用户/设备系统的根坐标框架。Headset、Controller、Hand 等 tracked objects 通常作为其子对象其 pose 由 XR tracking 系统更新。移动 XR Origin 可以整体改变用户在 Unity World 中的位置而不会破坏头显和手部的局部 tracking。World Frame ↓ XR Origin Frame ↓ Head Frame ↓ Hand Frames4.3 Transform假设场景里有培养皿、机械臂、桌子、摄像机、左手、一个虚拟按钮这些在 Unity 里通常都可以是一个GameObject游戏对象/场景对象。但 GameObject 自己其实很“空”真正的功能来自它挂载的各种Component组件。例如PetriDish GameObject ├── Transform: 它在哪里、朝向哪里、多大、父子关系是什么 ├── Mesh Renderer: 把培养皿画出来 ├── Collider: 让它能参与碰撞/交互判断 └── 自己写的 C# Script: 你自己定义它的行为Unity 的 Transform 是每个 GameObject 都有的空间组件包含positionrotationtransform.position/transform.rotation相对于World Frametransform.localPosition/transform.localRotation相对于Parent Framescale——表示这个 GameObject 相对于原始大小放大或缩小多少。默认scale (1, 1, 1)——表示原始大小不变。如果scale (2, 2, 2)——表示 x、y、z 三个方向都放大 2 倍。例如原本培养皿直径是10 cm设成scale (2,2,2)视觉上就会变成20 cm也可以只缩放某个方向scale (2, 1, 1)x 方向 ×2y 方向 ×1z 方向 ×1于是物体会被“横向拉长”。parent/child relationship。Unity Transform 包含 position、rotation 和 scale因为 Unity 允许对虚拟物体进行缩放。Robotics 中坐标系之间通常使用 Rigid Transform刚体变换只包含 translation 和 rotation因为坐标变换只描述 frame 的位置和朝向不应改变真实物体的尺寸。旋转常用单位四元数quaternion表示。四元数用四个数表示三维旋转避免欧拉角在某些姿态下出现万向节锁。需要注意不同系统的四元数元素顺序可能不同(q) 和 (-q) 表示同一个旋转四元数不能像普通位置向量一样随便交换坐标分量。4.4 OpenXR Reference SpaceOpenXR Reference Space参考空间是 XR Runtime 定义的 tracking coordinate frame用于表达头显、手柄等 tracked device 的 Pose。常见的 Reference Space 包括 VIEW、LOCAL 和 STAGE。VIEW随头部移动的视图坐标系适合 head-locked 内容。LOCAL应用启动附近建立的局部稳定坐标系用于一般 tracking。STAGE以真实地面/房间空间为基准的坐标系适合 standing/room-scale XR。XR Origin 是 Unity 场景中的根节点用于把 OpenXR Runtime 的 tracking space 映射到 Unity World Space。移动 XR Origin 不会改变真实头显的位置而是改变整个 tracking space 在 Unity 世界中的位置。4.5 Spatial Anchor空间锚点Spatial Anchor是由 Runtime 追踪的、与现实环境位置关联的空间 frame。Anchor 不是虚拟物体本身而是real-world-associated frame └── virtual GameObject当系统重新定位环境后会重新估计 anchor 相对于当前 tracking space 的 pose。应用根据这个 pose 更新虚拟物体所以物体看起来仍然固定在真实桌面上。5. Runtime PipelineRuntime Pipeline头显厂商提供的底层 XR 系统软件负责把硬件能力统一提供给上层应用Runtime Pipeline解决手在哪里头在哪里按键有没有按画面怎么显示属于底层设备与 tracking。[Quest Hardware] IMU Tracking Cameras Controllers Hand Images ↓ [Quest Tracking System / XR Runtime] Sensor Fusion VIO / SLAM ↓ Head / Hand / Controller poses Reference Spaces Input Actions Predicted Eye Views ↓ [Unity Application Process] XR Origin mapping Application state update Interaction logic Animation / physics / networking ↓ [Unity Rendering] Scene visibility Left-eye view Right-eye view ↓ [Quest GPU] Render images into XR swapchain ↓ [Quest Runtime Compositor] Projection layers UI layers Passthrough Late pose correction / reprojection Lens distortion correction ↓ [Left / Right Display Optics] ↓ Photons reach the eyes5.1 Stereo Rendering, FoV, IPDUnity Camera 是虚拟摄像机不是 Quest 上的物理 RGB 摄像头。在 XR 中通常一个 Unity Camera 概念会被 Runtime 和渲染管线展开成left-eye viewright-eye view。立体渲染stereo rendering让左右眼看到略有差异的图像从而产生双目深度感。视场角Field of View, FoV是眼睛能看到的角度范围。瞳距Interpupillary Distance, IPD是左右眼瞳孔中心之间的距离。应用通常不应硬编码左右眼距离而应使用 Runtime 提供的每眼 view pose 和 FoV。5.2 Refresh Frame Rate, LatencyRefresh Frame Rate刷新率refresh rate是显示器每秒刷新多少次。帧率frame rate是应用每秒实际生成多少帧常用 Frames Per Second 表示。两者不一定相等display 可以 90 Hz 刷新Unity 可能只生成 72 帧Runtime 可能重复或重投影某些帧。运动到光子延迟motion-to-photon latency表示physical head motion → sensing → tracking → prediction → application → rendering → composition → display emission以上的总延迟这是 XR 舒适度的核心指标。90 Hz 对应约 11.1 ms 的显示周期但这并不等于整个 motion-to-photon latency 恰好是 11.1 ms。6. Interaction Pipeline抓取手势真实手 ↓ Quest Hand Tracking ↓ XR Runtime ↓ 手指 joint pose pinch state ↓ Unity ↓ Interaction System ↓ 判断 手碰到培养皿 Collider 用户 pinch ↓ Grab / Select Event ↓ 应用逻辑6.1 交互形式控制器输入controller input包括buttontriggerthumbstickcontroller pose。手部 tracking 一般输出手部骨架的多个 joint pose。手势gesture是在这些低层状态之上识别出的语义动作例如 pinch 或 open hand。射线交互ray interaction是从控制器、手或 gaze 发出一条虚拟射线用于远距离选择。直接交互direct interaction是手或控制器靠近并接触物体。射线检测raycast是沿一条射线查询它与哪些几何体相交。碰撞体Collider是 Unity 用于碰撞和空间查询的不可见几何形状。刚体Rigidbody表示由 Unity physics 管理的位置、速度、质量、力和碰撞状态。移动方式locomotion是用户在虚拟空间中移动的方法例如物理行走、teleport 或连续移动。6.2 Runtime 和 IntersectionXR Runtime运行时是连接 XR 硬件与应用的软件层负责 tracking、设备输入、空间定位、pose prediction 和最终显示合成等底层功能。Runtime Pipeline 描述硬件感知到 XR 状态输出及显示的流程。Interaction Pipeline 位于 Runtime 之上利用 Runtime 提供的 head/hand/controller pose 和 input state结合 Unity 中的 Collider、Raycast、Gesture 等机制将低层输入解释为 Select、Grab、Teleport 等高层交互事件。6.3 Unity XR Interaction ToolkitInteractor 表示发起交互的一方例如手或控制器Interactable 表示可以被交互的对象Interaction Manager 负责匹配二者和管理 hover、select 等状态。XR Interaction Toolkit 是高层交互框架不负责底层 tracking。7. Spatial Understanding7.1 Spatial Mesh空间网格spatial mesh是对现实环境表面的三角网格近似。例如桌面、墙和设备可能被表示为大量三角形。它比 plane 更细但通常有噪声并不等于精确 CAD 模型。7.2 Plane Detection平面检测plane detection寻找近似平坦的区域例如floorwalltable surface。它通常输出plane pose、plane extent / boundary、optional semantic label、confidence7.3 Scene Understanding场景理解scene understanding把低层空间数据组织成更有意义的实体例roomfloorwalltabledoorother volumes在 Quest 的 Meta 工具栈中MR Utility Kit 会在更低层的 Scene 能力上提供房间感知、空间查询和内容放置等高层工具7.4 World-Locked 与 Head-LockedWorld-locked contentpose 定义在 world、local、stage 或 anchor frame 中用户转头时它不会跟着头走看起来固定在现实或虚拟空间中。Head-locked contentpose 定义在 view/head frame 中用户转头时它跟随视野适合小型状态提示不适合大面积内容。8. UnityUnity位于XR Runtime 之上Application 逻辑之中GPU rendering 之前Unity 主要负责表达应用的数字世界管理对象和场景执行 C# 应用逻辑把 tracking pose 映射到虚拟对象执行交互和应用 physics准备左右眼渲染与 Python、机器人和网络服务通信。Unity 一般不负责Quest 底层 camera/IMU driverQuest 的核心 SLAM最终 lens distortion系统级 compositor设备显示调度。Unity的核心概念概念在 XR 中的含义Scene一个可运行场景的数据集合包括对象、灯光、XR Origin 和 UIGameObject场景中的基本实体本身主要是组件容器Component赋予 GameObject 行为或数据的模块Transform对象的 position、rotation、scale 和父子关系Camera从哪个虚拟位置渲染场景XR 中由 head tracking 驱动Prefab可重复实例化的对象模板例如机器人、按钮或抓取物体MonoBehaviour用户编写的 C# Component 基类类似带生命周期回调的对象Collider用于碰撞和空间查询的形状Rigidbody由 Unity physics 更新的动态刚体Update()通常每个应用渲染帧调用一次FixedUpdate()按固定 physics 时间步调用不保证每个渲染帧恰好一次XR Origin把设备 tracking space 放入 Unity world 的根节点Input SystemUnity 的 action-based 输入映射系统Unity physics 使用固定时间步渲染帧和 physics step 是不同的 loop。在典型 Unity XR 场景中你通常不需要自己每帧“读取 head pose 再写 Camera”。XR provider 会自动驱动 Camera 的 local TransformT_world_head T_world_xrOrigin × T_xrOrigin_head你的应用主要决定T_world_xrOrigin和虚拟内容而 Runtime 持续提供T_xrOrigin_head。9. OpenXR, Unity XR, Meta XRUnity 应用 ↓ OpenXR 标准 ↓ 不同 XR Runtime ├── Meta Quest ├── SteamVR └── 其他 OpenXR 设备OpenXRKhronos 制定的跨平台 XR 标准定义“应用应该用什么统一接口去访问头显、手柄、tracking、reference space 等”。它本身不是 Unity也不是 MetaUnity XRUnity 对各种 XR 平台提供的一套开发框架和插件体系。Unity 的 OpenXR Plug-in 就是把 Unity 的 XR 功能接到 OpenXR 标准接口上。Meta XRMeta 针对 Quest 提供的 XR Runtime 和 Quest 特有能力例如 passthrough、scene、anchor 等。Unity 里还可以通过 Meta 的 OpenXR 扩展包访问这些 Quest-specific features。Unity 官方的 Meta OpenXR 包本身就依赖 OpenXR Plug-in并负责接入 Meta-specific OpenXR extensions。