全新的 visionOS
说明:介绍来源 Platfroms State of the Union(1:02:00~结尾 visonOS 部分)
-
概述:
- visionOS 是苹果推出的一种空间计算操作系统,通过结合 SwiftUI、RealityKit 和 ARKit 等技术,为开发者提供了构建具有 3D 空间体验的应用程序的能力。visionOS 的基本元素包括窗口、体积和空间,开发者可以利用这些元素构建可在用户空间内存在的应用程序。同时,visionOS 还支持现有的 iPad 和 iPhone 应用程序,并提供了扩展的 SwiftUI、RealityKit 和 ARKit 功能,使开发者能够为 Vision Pro 创建具有深度、交互性和沉浸感的应用程序。此外,visionOS 还提供了强大的开发者工具,包括 Xcode Previews、模拟器和 Mac Virtual Display 等,以支持开发者在 Vision Pro 上进行应用程序的开发和测试。
-
关键词:
- Spatial Computing(空间计算)、SwiftUI、RealityKit、ARKit、Window(窗口)、Volume(体积)、Space(空间:Shared Space、Full Space)、开发者工具。
-
Fundamentals(基本元素)
- 3个基础元素:Window、Volume、Space。Space包含:Shared Space、Full Space。
-
空间
-
Shared Space (共享空间)
-
默认情况下,应用程序会启动进共享空间。就像 Mac 桌面上的应用一样,Shared Space 是应用程序并排存在的地方。用户有充分的权限将应用程序放到任何他们想要的位置上。
图1 – Shared Space 简图
-
从上图可以看到,共享空间中有几个基本的构成元素分别是 Window、Volume、3D Object,下面一一介绍。
-
-
Full Space (专用空间)
- 在游戏、观影等需要独立空间的交互场景下,你可以单独开启一个专用空间。在专用空间中,你可以创建上述Window、Volume、3D 物体等基本元素去与用户交互。
-
-
Window(窗口)
- 在 visionOS 的共享空间中,你的应用可以开启一个或多个由 SwiftUI scenes 构建的 Window。Window 不仅能容纳传统的 Views 视图和交互控件,而且还支持 3D 模型 和 RealityViews 的展示。这就意味着,在 Window 中允许 3D 内容与 2D 内容并存显示。
图2 – Shared Space Window 简图
- 在 visionOS 的共享空间中,你的应用可以开启一个或多个由 SwiftUI scenes 构建的 Window。Window 不仅能容纳传统的 Views 视图和交互控件,而且还支持 3D 模型 和 RealityViews 的展示。这就意味着,在 Window 中允许 3D 内容与 2D 内容并存显示。
-
Volume(体积)
-
Volume 是一个三维体积容器用于展示 3D 物体,它也是由 Swift UI scenes 构成。Volume 能在共享空间中任意移动并从任何角度观察到。
图3 – Shared Space Volume简图
-
visionOS 架构图(非本文视频来源获取)
- 1、CORE OS:macOS、iOS、iPadOS 的整合基础上,额外新增了很多能力来支持空间计算和低延迟的要求。
- 2、REAL-TIME SUBSYSTEM:新的实时执行引擎,能担当高性能需求任务。
- 3、FOVEATED RENDER:动态注视点渲染管线,能确保每一帧上你眼睛注视的地方都有最优化的图像质量。
- 4、MULTI-APP 3D ENGNIE:Apple 首页多 app 专用的 3D 引擎,能让不同的 app 同时在一个模拟器中运行。
图4 – visionOS 架构示意图
visionOS SDK
- 1、SwiftUI 、UIKit:用于构建用户界面。
- 2、RealityKit:用于渲染 3D 内容、动画和视觉效果。
- 3、ARKit:环境空间理解。
图5 – visionOS SDK 架构
SwiftUI 扩展
- 现在你可以为窗口内添加深度或 3D 对象。
ZStack
的能力扩展:在 iOS 和 macOS 中,通用用ZStack
用来布局UI。在 visionOS中,你可以用深度信息将子视图进行分离,只需要将代码中的ZStack
中的元素,利用新的z-offset
属性添加深度的细微变化,就可以让你的二维应用具有三维的立体感。较大的offset
View 将会展示在靠前的位置。你可以使用深度信息的不同去用来强调或表明模态的改变。例如:在选择并展示选项的详情的场景中,你可以基于宽、高和深度去做更多的控制已凸显选中的元素。
ForEach(Fruit.allCases) { fruit in
.offset(z: selectedFruit == fruit ? 100 : 0)
}
图6 – visionOS 中 利用 SwiftUI ZStack 构建深度差视图的布局示意图
-
Gesture的能力扩展:在 visionPro 中,手势能识别到额外空间。我们通常都习惯于在屏幕上拖动对象,现在针对 Gesture 的能力扩展,让人们能在他们的物理空间的任何地方移动或旋转物体。当然,你也可以使用 SwiftUI 创建一个 Volume 独立于你的应用窗体之外,当运行在 Shares Space 中时与其他应用程序并排放置。Full Space 中,你可以随意放置 SwiftUI 创建的 windows、volumes 和 3D物体,与其交互。
-
借助 RealityKit 的渲染能力,SwiftUI 能渲染身临其间的体验。你能很容易的混合 SwfitUI 和 RealityKit API 调用。你可以利用 ornaments、material、hover effect 等 UI 增强功能去增加体验。
-
ornaments(装饰):允许你将 UI 组件附加到 windows 和 volumes 的边缘,它们充当着类似 toolbars 和 menu 的角色。
图7 – ornaments 收起效果图(左侧悬浮附件控件
图8 – ornaments 展开效果图(左侧悬浮附件控件
-
hover effects(悬停效果):会高亮 UI 元素,用于响应用户看到的 UI 元素。系统空间默认就有 hover effects 效果,针对你自定义的控件,你可以控制控件响应交互时是高亮还是发光。
-
material(材质):UI 元素会自动适应用户周围的世界,进行动态模糊和高亮,进而让你的应用程序有更高的可读性。【通俗的来讲,会自动根据当前物理空间的环境光源的变化或 UI 元素相对于光源的物理空间位置变化去重新渲染 UI 元素,让其有跟随环境变化的真实质感,让你感觉展现在你面前的 UI 就是一个现实世界真实的存在的东西。Spatial Computing 初显现 。】
视频1 – 材质、UI元素随环境光源自适应变化效果
-
RealityKit
-
从头开始构建用于渲染空间体验,它是Apple 的 3D 渲染引擎。早在 2019 年, RealityKit 和 SwiftUI 就作为单独的 framework 进行介绍了,在 vision Pro 中,它们深度融合了。
- (1)你可以结合使用它们用来构建炫酷且体积庞大的用户界面。3D 对象 能够绑定 SwiftUI views 和 state,借此可以将2D 和 3D 视觉元素进行无缝衔接。
- (2)可以根据物理照明条件进行调整,并通过在地板和桌面上投射阴影来营造现实体验。
- (3)可以在 3D 场景中创建新的入口。【Keynote 中展现的恐龙效果】
- (4)渲染令人难以置信的清晰文件,以便用户舒适的阅读。
- (5)可自定义的材质系统,可以创造出令人惊叹的视觉效果。
- (6)Dynamic foveation(动态注视渲染):高效的渲染能力。利用眼动追踪以非常高的保真度选择性的渲染用户注视的区域,降低外围内容的渲染成本。
- (7)允许设置物理属性例如:金属材质、反光值,以渲染令人惊叹的视觉效果。
- (8)允许自定义导入基于图像的照明资源或 IBL。
- (9)支持 MaterialX。
- (10)全新的 SwiftUI view RealityView:可以在 Window、Volume 和 Space 中使用,你可以使用RealityView 在你控制的场中任何地方放置 3D 物体;支持在 3D 物体上附加物 2D SwiftUI views。
ARKit
-
利用 ARKit 可以让你充分利用用户的环境。
-
(1)ARKit 理解用户周围的空间,允许应用的内容与环境空间进行交互。例如:球从地板上弹起或水溅到墙上。
-
(2)ARKit 托管着 visionOS 的实时算法,为大量核心的系统功能提供支持。这些算法从始至终一直在运行着,意味着你的应用程序能自动从所处的共享空间中获取 ARKit 的支持。持久性和世界映射由系统处理,分隔、遮罩和环境照明灯会自动适用于整个物理空间。
-
(3)在用户的授权下,ARKit 功能可以直接用于你创建的 Full Space 中的应用程序。在内的应用程序可以通过启用 ARKit 的以下能力(使用了与 iOS 上 ARKit 相同的 Anchor 概念,这将你使你能讲你现有的 ARKit 应用很方便地整合 visionOS 中)与房间进行真实互动。
-
Plane estimation(平面预算):
-
Scene reconstruction(场景重建):
-
Image anchoring(图像锚点):
-
World tracking (世界追踪):
-
Skeletal Hand tracking(手部追踪):为你的 app 体验创建自定义的手势交互;构建虚拟用户的双手以增强交互体验;与 iOS 上引入的骨骼模型一样,提供相同的关节定位和方向。
-
图9 – 利用手部追踪显示虚拟用户手示意图
-
-
-
Accessibility(无障碍设计)
-
Spatial computing(空间计算)为无障碍访问开辟了巨大的新机会:
- 1、用户可以完全通过眼睛、语音或两者结合与Vision Pro进行交互。
- 2、用户可以选择使用手指、手腕或头部作为替代指针来浏览 Vision Pro
-
开发者可以使用熟悉的技术使其应用程序具有辅助功能:
- 1、Accessibility Inspector:使用Accessibility Inspector分析和报告visionOS应用程序中的辅助功能问题。
- 2、内置于框架中的辅助功能支持使开发者可以轻松地为具有残障的用户带来visionOS应用程序和体验。
-
开发者可以通过添加标签和描述来帮助 VoiceOver 向盲人或视力低下的用户描述应用程序中的对象:
-
1、标签和描述可以提供对象的外观等信息
-
let container = Entity() let sphere = ModelEntity(mesh: .generateSphere(radius: 0.1), materials: [blueMaterial]) // 添加传达信息的标签 var accessibilityComponent = AccessibilityComponent() accessibilityComponent.isAccessibilityElement = true accessibilityComponent.traits = [.button] accessibilityComponent.label= "Sphere" accessibilityComponent.value = "A big blue marble" sphere.components[AccessibilityComponent.self] = accessibilityComponent container.addChild(sphere) content.add(container)
-
-
2、可以根据用户偏好使用动态类型、减少透明度和头部锁定内容的替代方法来使应用程序更具辅助功能。
-
-
总结:visionOS 的辅助功能使得空间计算变得更加无障碍。用户可以通过眼睛、语音或两者结合与Vision Pro 进行交互,还可以选择使用手指、手腕或头部作为替代指针来浏览 Vision Pro。开发者可以使用熟悉的技术使其应用程序具有辅助功能,并通过 Accessibility Inspector 分析和报告辅助功能问题。内置于框架中的辅助功能支持使开发者可以轻松地为具有残障的用户带来 visionOS 应用程序和体验。通过添加标签和描述,开发者可以帮助 VoiceOver 向盲人或视力低下的用户描述应用程序中的对象,并根据用户偏好使用动态类型、减少透明度和头部锁定内容的替代方法来使应用程序更具辅助功能。这些 API 和工具使得开发者的应用程序在使全球用户都能够享受到空间计算的无障碍性方面发挥巨大作用。
-
Key technologies(关键技术)
-
光照和阴影:
- 1、visionOS 通过创建用户环境的 3D 模型实现应用与周围世界的自然融合。
- 2、应用无需访问相机数据即可实现逼真的光照和阴影效果。
-
Spatial Audio(空间音频):
- 1、visionOS 利用 3D 模型和 PHASE 空间音频引擎实现下一代空间音频。
- 2、PHASE 引擎结合声音传感和 3D 场景理解,创建空间声学特征的详细模型。
- 3、空间声学特征的详细模型与苹果的个性化空间音频技术相结合,自动为每个人及其周围环境量身定做体验。(当声源和用户在环境中移动时,PHASE 会实时更新其音频光线跟踪模拟。)
图10 – visionOS 中空间音频示意图
-
用户输入:
- 1、用户输入在 visionOS上是自动进行的,并通过设计保护用户隐私。
- 2、Hover effects 自动呈现在使用 SwiftUI 或 RealityKit 构建的 UI 元素上。
- 3、用户通过点击手指进行交互,无需知道用户在点击之前看向哪里。
-
共享与协作:
- 1、Vision Pro 用户可以在 FaceTime 通话中与其他参与者共享应用窗口。
- 2、通过 SharePlay 实现应用的共享体验。
- 3、使用 GroupActivities API 可以决定应用如何进行协作。
图11 – 适配了 GroupActivities 的 SharePlay API 的应用窗口额外操作选项示意图
-
Spatial Personas:
-
1、Spatial Personas 使 Vision Pro 用户以三维形式出现在 FaceTime 通话中。
-
2、提供共享和一致的空间上下文,让用户感觉像是在同一个物理空间中。
-
3、可以在应用中利用 Spatial Personas 实现更自然的共享和协作体验。
-
4、应用程序可以响应用户的物理动作,使操作感觉更加自然,例如:在自由形式的白板旁站立或在桌面游戏中移动棋子。
图12 – Spatial Personas 开发版预览,与其他用户在统一空间中共同协作,能实时识别到其他用户的身体动作
-
总结:Spatial Personas 是 Vision Pro 用户可以使用的功能,它使用户能够摆脱熟悉的 FaceTime 分割屏,感觉更加身临其境,就像他们聚集在同一个物理空间中。visionOS 确保用户和应用程序具有共享和一致的空间背景。您的应用程序可以利用这个新的上下文来使用 SharePlay。现在,除了在用户之间同步应用程序的更改之外,还可以响应用户的物理动作,使站在自由形式的白板旁或在桌面游戏中移动棋子等操作感觉更加自然。
-
Developer Tools
-
Xcode 作为开发工具和调试工具:
- 1、使用Xcode作为 visionOS 开发的中心工具。
- 2、Xcode Previews 可在编辑器中快速迭代外观。
- 3、模拟器提供强大的环境来运行和调试应用。
- 4、Mac Virtual Display 可将 Mac 的高保真 4K 虚拟显示器引入到 visionOS 中,随后可以使用 Xcode 的模拟器进行应用的开发和调试。
-
Reality Composer Pro 用于 3D 内容制作和预览:
- 1、使用 Reality Composer Pro 预览和准备 visionOS 应用中的 3D 内容。
- 2、导入和组织 3D 模型、动画、图像和声音。
- 3、与 Xcode 紧密集成,优化资产以在 visionOS 上使用。
- 4、可以在 Vision Pro 上预览、调整和推送新的更改。
-
测试流程:
- 1、使用 TestFlight 进行 Vision Pro 的 beta 测试。
- 2、将应用提交到 TestFlight 进行测试,用户可以从原生的 TestFlight 应用中提供反馈。
- 3、Vision Pro 用户可以访问适用于 iPad 和 iPhone 应用程序的 beta 版本。
-
与 Unity 合作,深度集成:
- 1、与 Unity 深度合作,使 Unity 创建的应用可以在 Vision Pro 上运行。
- 2、Unity 的开发工具和功能可以与 Vision Pro 平台完美结合。
- 3、Unity-created 应用可以与其他 visionOS 应用在 Shared Space 中共存。
图13 – Unity 应用与 visionOS 应用在 Shared Space 中共存示意图
Build visionOS Apps(构建 visionOS 应用)
- iPad、iOS 中的 2D 应用能快速方便扩展的扩展到 visionOS中,成为一个可缩放的窗口。核心框架上,visionOS 包含许多与 iPadOS、iOS 相同的基础库。
集成你的应用到 vision Pro
-
第一步:启用“xrOS Device”支持并重构建应用
-
打开 Xcode,选择你的主 Target,General->Supported Destinations中点击+号,选择“xrOS Device”,在跳转出来的“Enable Destination Support”弹框中,选择“Enable”。
图14 – Xcode 启用 xrOS Device 示意图
-
启用之后,会发现可选构建设备中多了“xrOS Device”,选择“xrOS Device”作为构建目标,重新构建应用,构建成功后,会启动一个具有 visionOS 外观和材质感的窗体,而窗体中呈现了你的应用程序。
图15 – Xcode xrOSDevice模拟器运行应用示意图
-
第二步:将你的应用扩展到 Windows、Volumes 或 Spaces中
- 使用 SwiftUI、RealityKit、ARKit 拓展或创建你的 visionOS 应用。