Safari/WebView 里的网页内容,支持 visionOS 里的 Natural Interaction,包括间接交互(眼手交互)和直接交互(触摸),都等价于触屏设备上的交互,像触屏设备中的网页一样触发 JS 事件、兼容旧网页中基于鼠标事件/css hover。
区别是,visionOS 里的网页也支持眼手交互模式下的 Hover Effect,眼动注视数据是用户隐私,应用和网页都无法获取到,因此无法在用户通过眼动做「选择」的过程中,用网页代码实现自定义的 Hover Effect,没有 Hover state。
网页中的元素会根据规则被提前识别为可交互区域,OS
会负责在可交互区域被眼睛注视的时候显示 Hover
Effect。按钮、链接、菜单、表单控件,以及带对应 ARIA role
的元素会自动获得 Hover Effect,自定义元素通常需要
cursor: pointer 才会被识别为可交互区域
是 Apple 推动的新 web 标准,在 visionOS safari 里已经有比较完整的支持。
<model> 把 3D 模型变成 Web 的一等媒体元素,像
<img> / <video> 一样,API 沿用
src、<source>、fallback
content、poster、autoplay、loop 这套熟悉的 HTML 媒体元素的心智。
在 visionOS 上不只是“投影到网页里平面画布上的贴图”,而是类似在网页里挖了一个洞口,透过洞口可以看到在「里面」立体渲染的 3D 模型,用户视角改变可以看到模型的不同角度。
用户还能把模型从页面里拖出来(相当于用原生的 Model Viewer 查看),在空间中像真实物体一样查看。
支持多个模型文件来源(比如USDZ和 GLTF),模型可以通过 entityTransform API 控制如何在容器中精确放置(朝向、缩放和位移),支持播放和编程控制模型文件内建的关键帧动画,还可以零代码启用容器自带的原生交互(stagemode)。
Apple 先把 Fullscreen API 用于 panorama 和 spatial photo 的沉浸式查看,之后又扩展到 spatial video、180°、360°、Wide FOV,以及 Apple Immersive Video。
这些媒体通过现有 html 元素嵌入网页,先以内联 2D
内容出现。开发者仍然使用现有的标准
requestFullscreen() API,不需要新的 HTML 元素和 JS API。
visionOS Safari 会自动识别出支持 Reader mode 的文章类网页,浏览器在看这种网页时可以切换成Spatial Browsing 模式,去掉干扰元素、用空间化 UI 显示内容,对于符合条件的图像内容会呈现为 inline spatial scenes。网页还可以在 HTML 中声明 Spatial Backdrop 资源,影响 Spatial Browsing 模式下的环境背景
把 visionOS 的自然交互带进 WebXR, 开发者处理的是“交互意图和结果”,而不是眼动、手势识别和手部渲染本身。
WebXR 支持的交互方式原本只有控制器模式和 Hand Input 模式(需要开发者自己渲染手部,自己实现具体手势),Apple 在此基础上扩展出了 Natural Input,支持 visionOS 里无控制器的自然交互,包括间接的眼手交互和直接的手部触控,都由系统统一负责渲染手部、实现手势和判断命中,
inputSources 是空的,只有当用户开始手指捏合/触摸时,才会临时生成一个 XRInputSource,交互结束后这个输入源被移除。不是持续暴露的控制器(tracked-pointer),而是一次一次出现、用完即消失的交互对象(transient-pointer)。开发者只能处理交互结果,接触不到眼动和手部运动的隐私数据
Spatial Runtime 相当于一个所有空间应用共存的 3D 空间和共用的 3D 渲染引擎,由空间计算操作系统统一负责用底层 3D 图形 API 渲染这个 3D 空间里跨应用的、2D 和 3D 混合的内容,统一负责实现和渲染交互效果,统一负责应用内容跟空间环境的结合。相当于由操作系统来统一负责空间计算,空间应用可以自动获得这些空间计算的效果。
各个空间应用里需要让系统理解自己内部的 3D 内容,能把它们融合到同一个空间中,有一致的光照、遮挡关系等)。也需要让系统理解自己内部可交互的 2D 内容,能为它们渲染交互效果,比如 Hover Effect。
在 Shared Space 下空间应用默认获取不到眼动、手部移动、空间环境信息等隐私数据,需要切换到 Full Space 模式才允许空间应用获得人体和环境的数据实现自定义空间计算逻辑。
Spatial Scene 又叫 Spatial Container,是空间计算操作系统中 Spatial Runtime 提供的基础容器,在 Shared Space 里,每个容器(包括 Window 和 Volume)都是空间中一块有边界的局部空间,在 Full Space 里,有一个特殊的容器(称作 ImmersiveSpace 或 Stage)是无边界的,对应整个空间。
空间应用的所有内容必须通过这些空间容器来提供,从而让 Spatial Runtime 可以统一负责实现这些容器跟空间环境的结合,统一负责这些容器之外跨应用的全局交互行为。
空间应用在空间场景容器创建时提供期望的初始化属性,但能否满足由 Spatial Runtime 判断,一旦空间场景容器创建完成,空间应用就无法改变这些容器的状态,它们的状态完全由 Spatial Runtime 和用户的交互决定。
空间场景容器中的应用内容,沿用 2D GUI 的组件和布局系统,API 和心智模型都保持不变,在此基础上扩展了 Z 轴相关的空间化 API,让 2D View 能成为空间化 UI,可以突破「屏幕」(空间场景容器的背板)的限制,被「抬升」到「屏幕」前方的空间中做 Z 轴方向的布局,也可以在空间中旋转缩放。
多个 2D View 不用再被捆绑在一个有不透明背景和边框的「屏幕」上,可以分散、悬浮在空间中,更灵活充分的利用空间,把整个空间都变成软件界面环境。
2D 界面分散、悬浮在空间中,3D 容器里的内容有了真实体积,都导致原有的针对 2D 平面的交互 API 不再够用,为了在整个空间中保持一致的交互体验和保护用户隐私,也不能让应用各自去获取底层眼手数据自行实现空间交互手势。
Spatial Runtime 统一定义和实现了一套空间手势,能跟 3D 空间中的软件 UI 和虚拟物体的不同部位交互,能在空间中任意拖拽,也提供像双手拖拉、旋转等常用的双手自然交互手势。
下一代操作系统相比移动操作系统,更需要基于开放标准的 “免安装应用”。
“免安装应用” 规模巨大,而且难以编目;它们通过链接启动,按需运行,默认是一次性的,并且可以在需要时升级为已安装应用。
为什么:
客户端 AI Agent 正越来越多地自行选择 “工具”。用于 “Tool Use” 的应用类型,往往数量庞大、范围未知,而且使用频率很低。这意味着它们不适合被预装、临时安装,或在使用后继续保留在设备上。
在空间环境中,应用的发现与启动方式也是一样的。就像中国和日本的人们通过扫描二维码来参加活动或下单一样。
桌面时代唯一的 “超级应用” - 浏览器 - 正在回归,但会以新的形式出现:
新一代对 Agent 友好、Tool 优先的 Web 标准正在涌现,比如 MCP App、WebMCP
像 ChatGPT 这样的 Agentic 浏览器正在从文本界面像图形界面发展,已经支持分发和嵌入 包含 MCP-UI 的 MCP App
设想:Spatial + Agentic 的 OS,Home 界面不再是应用图标组成的 App Launcher,而是在空间上下文中分发 Web App 和 MCP App 的 Agent,MCP App 中的 MCP-UI 可以包含空间化 UI 的空间容器
讲稿备注
Safari/WebView 里的浏览器引擎跟 visionOS 有深度结合, 网页内容跟 visionOS 里其他原生 2D 内容一样由系统统一渲染
网页从独立渲染的、像素固定的贴图,变成跟现实世界物体一样可以在空间关系和注视行为动态变化的过程中保持清晰