WebXR 增强现实模块 - 第一级

W3C 候选推荐草案,

关于本文档的更多信息
本版本:
https://www.w3.org/TR/2025/CRD-webxr-ar-module-1-20250425/
最新发布版本:
https://www.w3.org/TR/webxr-ar-module-1/
编辑草案:
https://immersive-web.github.io/webxr-ar-module/
以往版本:
历史记录:
https://www.w3.org/standards/history/webxr-ar-module-1/
实现报告:
https://wpt.fyi/results/webxr/ar-module?label=experimental&label=master&aligned
反馈:
GitHub
编辑:
(Google)
(Google [Mozilla 至2020])
(Meta)
前编辑:
(Amazon [Microsoft 至2018])
参与方式:
提交新问题 (已开放的问题)
邮件列表存档
W3C #immersive-web IRC

摘要

WebXR 增强现实模块为 WebXR 设备 API 扩展了 AR 硬件可用的功能。

本文档状态

本节描述本文档发布时的状态。当前 W3C 标准和草案及本技术报告的最新修订版可在 W3C 标准与草案索引 https://www.w3.org/TR/ 查询。

沉浸式 Web 工作组维护着 尚未处理的所有问题报告。本草案强调了工作组尚待讨论的一些未决问题。对于这些问题的最终处理(包括其有效性),尚未作出决定。 鼓励针对未决问题的规范文本提交 Pull Request。

本文档由 沉浸式 Web 工作组 按照 推荐路径 的候选推荐草案发布。该文件拟成为 W3C 推荐。

候选推荐草案发布并不表示 W3C 及其成员已认可。 候选推荐草案整合了上一版候选推荐的变更,这些变更工作组拟在下一版快照中包含。 此文件为草稿,可能随时被其他文档更新、替换或废止,引用时仅可视为进行中的工作。

本文档进入建议推荐阶段的标准,是至少有两个独立且可互操作的用户代理实现了本规范的全部功能,并通过由工作组开发的测试套件中的所有用户代理测试。工作组将编写实现报告跟踪进展。

本文件由遵循 W3C 专利政策 的小组编写。 W3C 维护着 公开专利披露列表,其中包含与小组交付成果相关的披露;该页面也包括专利披露说明。如个人确信某专利包含 必要声明,必须依照 W3C 专利政策第 6 节 进行披露。

本文档遵循 2023 年 11 月 3 日 W3C 流程文件 管理。

有关上一版以来的变更,请见 变更内容 一节。

本 WebXR 增强现实模块设计为 WebXR 设备 API 的补充模块,最初包含在 WebXR 设备 API 内,后拆分为核心与子模块。

1. 简介

用于虚拟现实 (VR) 和增强现实 (AR) 应用的硬件现在已广泛面向消费者提供,为沉浸式计算平台带来了新的机遇和挑战。能够直接与沉浸式硬件交互对于确保 Web 能够成为该环境中的一等公民至关重要。WebXR 增强现实模块扩展了开发者在 AR 硬件上运行代码时可用的功能。

1.1. 术语

增强现实描述了一类 XR 体验,其中虚拟内容与现实环境对齐并组合后展示给用户。

XR 硬件可根据显示技术分为:加法光透视型不透明型

拥有加法光 显示技术(也称为“透视型”)的设备,使用透明光学显示器呈现虚拟内容。在这些设备上,用户通常无论在会话创建期间开发者如何请求,都能始终看到现实环境

注意:此类设备通常不会使用软件进行合成,而是依靠透明显示器实现自然合成。

例如 Hololens 2Magic Leap 设备。

拥有透视型 显示技术的设备则使用不透明显示器,将虚拟内容与现实环境的摄像头画面结合。在这些设备上,只有当开发者在会话创建时明确请求,现实环境才会对用户可见。

注意:此类设备通常使用摄像头采集现实世界图像,并在软件中将 AR 场景与这些图像进行合成后展示给用户。

例如手机上的手持移动 AR,以及 Varjo XR-3 设备。

具有不透明型 显示技术的设备会完全遮挡现实环境,且不提供查看现实环境的方式。

注意:此类设备通常是 VR 设备,为 AR 内容提供兼容性路径而支持 "immersive-ar" 会话。

2. WebXR 设备 API 集成

2.1. XRSessionMode

WebXR 设备 API 所定义,依据 XRSessionXRSessionMode 对会话进行分类。 本模块支持 "immersive-ar" XRSessionMode 枚举值。

会话模式 "immersive-ar" 表示会话输出将独占 沉浸式 XR 设备 显示器,并且内容现实环境进行混合。

兼容硬件上,用户代理可支持 "immersive-vr" 会话、 "immersive-ar" 会话或二者兼有。增加对"immersive-ar"会话模式的支持,不改变必须支持"inline"会话的要求。

注意:这意味着 "immersive-ar" 会话支持与 "immersive-vr" 会话相同的功能和参考空间,因为两者都为沉浸式会话。

以下代码检查是否支持 "immersive-ar" 会话。
navigator.xr.isSessionSupported('immersive-ar').then((supported) => {
  if (!supported) { return; }
  // 'immersive-ar' sessions are supported.
  // Page should advertise AR support to the user.
}
以下代码尝试获取 "immersive-ar" XRSession
let xrSession;

navigator.xr.requestSession("immersive-ar").then((session) => {
  xrSession = session;
});

2.2. XREnvironmentBlendMode

绘制 XR 内容时,了解渲染像素如何被XR 合成器现实环境进行混合很有用。
enum XREnvironmentBlendMode {
  "opaque",
  "alpha-blend",
  "additive"
};

partial interface XRSession {
  // Attributes
  readonly attribute XREnvironmentBlendMode environmentBlendMode;
};

environmentBlendMode 属性必须报告与当前混合技术相匹配的XREnvironmentBlendMode值。

2.3. XRInteractionMode

有时应用需绘制用户可交互的 UI。WebXR 支持多种形态,包括手机 AR 和头戴式 AR。不同形态下,UI 应所在空间也不同,便于用户流畅交互。例如,手机 AR UI 通常直接绘制在屏幕上而不进行投影,而头戴式 AR 通常将 UI 绘制在离头部一定距离处,便于用户用控制器操作。

enum XRInteractionMode {
    "screen-space",
    "world-space",
};

partial interface XRSession {
  // Attributes
  readonly attribute XRInteractionMode interactionMode;
};

interactionMode 属性描述了当前会话下由用户代理推荐的最佳交互 UI 所在空间。

注意:如支持,可在部分情况使用 WebXR DOM Overlays 模块

2.4. XR 合成器行为

XR 设备呈现内容时,XR 合成器必须应用合适混合技术,将虚拟像素与现实环境结合。所用技术取决于XR 设备显示技术模式

注意:如设备采用 alpha 混合环境,使用无 alpha 通道的 baseLayer 将完全遮挡 现实环境。应当假定这为开发者有意为之,用户代理可在此优化下暂停 现实环境混合。

XR 合成器可进一步调整颜色或像素以优化体验。合成时机不得依赖 混合技术现实环境来源,只能将渲染内容叠加于现实背景,不能依靠像素深度实现遮挡。

注意:未来模块可能支持基于现实环境的像素遮挡。

XR 合成器不得自动让页面访问任何附加信息,如相机参数、媒体流、现实世界几何等。

注意:开发者可通过 Media Capture and Streams 规范请求 XR 设备相机访问;但无法查询相机位置与 XRRigidTransform 之间的关系,也无法获得相机参数以匹配 现实环境视图。因此相关计算机视觉算法受限。未来模块或规范可能补充此类功能。

2.5. 第一人称观察视图

许多 AR 设备配备了摄像头,但摄像头通常与眼睛未对齐。进行会话录像或直播时,若直接将摄像头画面与其中一个渲染眼部画面合成,会存在内部偏移。设备可以采用重投影等方法修正流媒体,但有些设备会暴露次要视图, 即第一人称观察视图,该视图的眼睛"none"

站点内容必须显式允许通过启用 "secondary-views" 功能描述符 来接受第一人称观察视图

为支持第一人称观察视图的会话启用 "secondary-views" 功能,不应导致每一帧都无条件暴露该第一人称观察视图,而是仅在录制时才会将该视图暴露在 views 数组内。

XRSession 具备 environmentBlendMode 属性暴露的混合技术时,第一人称观察视图始终采用alpha 混合环境

站点内容可能希望获知哪一个视图是第一人称观察视图,以便根据不同混合技术采取渲染 UI 元素的措施。 对应第一人称观察视图XRView 对象,其 isFirstPersonObserver 属性返回 true

partial interface XRView {
  readonly attribute boolean isFirstPersonObserver;
};
对于大多数程序来说,支持次要视图只需:
let session = await navigator.xr.requestSession("immersive-ar", {optionalFeatures: ["secondary-views"]});
let space = await session.requestReferenceSpace("local");
// 进行其它初始化
let gl = /* 获取图形上下文 */;

session.requestAnimationFrame(function(frame) {
  let views = frame.getViewerPose(space);

  // 重要:此处应使用 `view of views`,
  // 不要直接索引前两个/三个元素
  for (view of views) {
    render(session, gl, view);
  }
});

function render(session, gl, view) {
  // 渲染内容到该视图
  // 可根据 view.isFirstPersonObserver 判断是否区分组合信息
}

3. 隐私与安全性考量

AR 模块的实现不得将摄像头图像暴露给内容,而应通过 XR 合成器 自行处理与现实世界的合成。对此模块的后续扩展可以暴露真实世界信息(如原始摄像头帧或光照估算),但必须依赖需要用户同意的额外功能描述符

与其扩展的 WebXR 设备 API 相比,AR 模块仅通过 environmentBlendModeinteractionMode 属性提供关于设备运行环境的更多信息;允许网站以 "immersive-ar" 模式启动 XR 会话,将现实世界与 XR 场景混合。

即使本模块不允许网站访问摄像头图像,但终端用户未必知晓,用户代理应予以说明。

变更内容

2019年10月10日首次公开工作草案以来的变更

4. 致谢

下列人员为 WebXR 设备 API 规范的设计做出了贡献:

特别感谢 Vladimir Vukicevic (Unity),率先发起了这一冒险!

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语结合表达。 在本规范的规范性部分,“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”和“OPTIONAL”等关键词, 按照 RFC 2119 的说明进行理解。 为了可读性,这些词在本规范中未全部大写。

除非被明确标为非规范性、示例和注释部分,本规范的全部文本均为规范性。[RFC2119]

本规范中的示例会以 “for example” 引入,或用 class="example" 与规范性文本分隔,如下所示:

这是一个说明性示例。

说明性注释以 “Note” 开头,与规范性文本用 class="note" 分隔,如下所示:

Note,这是一个说明性注释。

一致性算法

以祈使语气出现的算法要求(如 “strip any leading space characters” 或 “return false and abort these steps”), 应依据引入算法时所用关键字(如“must”、“should”、“may”等)解释其含义。

以算法或具体步骤表达的一致性要求,可以以任何方式实现,只需最终结果等价即可。 尤其是,本规范定义的算法旨在易于理解,而非追求性能。鼓励实现者进行优化。

索引

本规范定义的术语

引用中定义的术语

参考文献

规范性引用

[COMPOSITING-1]
Chris Harrelson. Compositing and Blending Level 1. 2024年3月21日. CRD. URL: https://www.w3.org/TR/compositing-1/
[RFC2119]
S. Bradner. 用于指示需求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准. Living Standard. URL: https://webidl.spec.whatwg.org/
[WEBXR]
Brandon Jones; Manish Goregaokar; Rik Cabanier. WebXR 设备 API. 2025年4月17日. CRD. URL: https://www.w3.org/TR/webxr/

说明性引用

[MEDIACAPTURE-STREAMS]
Cullen Jennings; 等. 媒体采集与流. 2025年4月24日. CRD. URL: https://www.w3.org/TR/mediacapture-streams/

IDL 索引

enum XREnvironmentBlendMode {
  "opaque",
  "alpha-blend",
  "additive"
};

partial interface XRSession {
  // Attributes
  readonly attribute XREnvironmentBlendMode environmentBlendMode;
};

enum XRInteractionMode {
    "screen-space",
    "world-space",
};

partial interface XRSession {
  // Attributes
  readonly attribute XRInteractionMode interactionMode;
};

partial interface XRView {
  readonly attribute boolean isFirstPersonObserver;
};