大多数浏览器和
Developer App 均支持流媒体播放。
-
探索 ARKit 6
了解如何使用 ARKit 6 构建更完善而且功能强大的增强现实 App。我们将探索如何打造以 4K HDR 呈现的 AR 体验,并介绍 App 的相机设置自定义。我们还会分享如何从 ARKit 会话中导出高分辨率静态图像,利用平面估计和动作捕捉,以及在新区域添加 AR 位置锚定。
资源
- ARKit
- Explore the ARKit Developer Forums
- Human Interface Guidelines: Augmented reality
- Tracking Geographic Locations in AR
相关视频
Tech Talks
WWDC22
WWDC21
-
下载
♪ ♪ Christian: 大家好 我是 Christian 是 ARKit 团队的一名工程师 欢迎您来到我们的讲座 Discover ARKit 6 您将了解到如何利用我们的 增强现实框架的最新进展 我们很高兴看到 您在过去几年里用 ARKit 创造的一切 我们看到了一些令人惊叹的室内设计 旅行 虚拟展览 游戏等领域的 App 我们 Apple 的团队 非常关注您的反馈 我们已经将很多反馈 整合到了 ARKit 6 中 让我们来看看 我们推出了一种新的 4K 视频模式 可以让您以最高的图像分辨率 运行相机流 之后 我将谈谈我们进行的一些 额外的相机增强 它能让您对视频背景有更多的控制 我们还更新了 Plane Anchor 的行为 添加了运动捕捉 API 最后 我们分享了 将支持 Location Anchor的新城市
让我们先从 4K 视频说起 在过去的几年里 我们看到了 对高分辨率内容的大量需求 尤其是那些利用增强现实技术 制作电影的 App 它们渴望获得更多的像素 我来展示一下 ARKit 是如何捕获和处理图像的 这是 iPhone 13 Pro 的摄像头模块 如果我们把它打开 我们就能看到它的设置 让我们来谈谈 Wide 和 Ultrawide 相机 这两个摄像头都可以 用于不同的计算机视觉任务 如世界跟踪 运动捕捉或人物分割 wide 相机在我们心中 有着特殊的位置 因为它提供了用于渲染背景的图像 要理解如何处理图像 来进行渲染很重要 让我放大到传感器级别
在为 ARKit 捕捉图像时 我们用了很大一部分的图像传感器 更准确地说 在这个特定的模型上是一个 3840x2880 像素的区域 捕获之后 我们要使用一个叫做像素组合的过程 它的工作原理如下 像素组合会取一个 2x2 像素的区域 取像素值的平均值 然后写回单个像素 这有两个显著的优势 首先 图像的尺寸减少了一半 在这种情况下 它会缩小到 1920x1440 像素 这样做的结果是 每一帧 消耗的内存和处理能力更少 这允许设备 以每秒 60 帧的速度运行相机 并为渲染释放资源 其次 该过程在弱光环境中 具有优势 像素值的平均 降低了传感器噪声的影响 我们最终会得到一个 大约每 17 毫秒 提供一个高清图像的相机流 在使用当前帧 完成各种计算机视觉任务后 ARKit 会显示当前帧以进行渲染 如果您正在编写自己的金属渲染器 您可以通过 ARSession 的 currentFrame.capturedImage 来访问它
如果您正在使用 RealityKit 图像将被自动进一步处理 以用作背景 它会在设备上缩放 以匹配 2532 像素的屏幕宽度 并会被裁剪以匹配显示长宽比 RealityKit 在框架顶部 执行渲染和合成虚拟内容 比如这艘海盗船的任务 并会在屏幕上显示最终结果 现在 凭借我们最新硬件的强大功能 我们在 ARKit 中启用了 全 4K 视频模式 现在 您的 App 可以利用 更高分辨率的图像 跳过像素组合步骤 直接在全 4K 分辨率下访问它 在 4K 模式下 使用 3840x2160 像素的图像区域 可以以每秒 30 帧的速度捕捉视频 除了这些变化 您的 App 将以与以前相同的方式工作 如果您使用 RealityKit 它会为您执行缩放 裁剪 和渲染
您可以通过几个简单的步骤 来启用新的 4K 模式 让我们看看它在代码中是怎样的
ARConfiguration 有一个 方便的新功能 “recommendedVideoFormatFor4KResolution” 如果您的设备支持 4K 模式 它会返回 4K 视频格式 如果设备或配置不支持 4K 此函数将返回 nil 然后 您可以将此视频格式 分配给您的配置 然后使用调整后的配置运行会话
4K 视频模式可在 iPhone 11 及以上版本 以及任何带有 M1 芯片的 iPad Pro 上使用 分辨率为 3840x2160 像素 每秒30帧 长宽比是 16:9 对于 iPad 来说 这意味着 为了全屏显示 图像必须裁剪两侧 最终渲染可能会放大
当使用 ARKit 时 特别是在新的 4K 分辨率下 遵循一些最佳实践 以获得最佳结果是很重要的 不要长时间使用 ARFrame 这可能会阻止系统释放内存 并会进一步阻止 ARKit 向您显示新的帧 这将在渲染中的帧下降里显示出来 最终 AR 相机的跟踪状态 可能会回落到有限状态 记得检查控制台警告 以确保在任何给定时间 都不会保留太多图像 还要考虑 4K 视频格式 是否真的是 App 的正确选择 受益于高分辨率视频的 App 是不错的选择 如视频 电影制作和虚拟制作 App 处理更高分辨率的图像 会占用额外的系统资源 所以对于依赖高刷新率的游戏 和其他 App 我们仍然建议使用 每秒 60 帧的全高清视频
除了新的 4K 模式 还有一些额外的增强功能 可以让您对相机有更多的控制 我将首先介绍高分辨率 背景照片 API 并展示如何启用新的 HDR 模式 此外 我将演示如何访问底层的 AVCaptureDevice 以获得更细粒度的控制 并向您展示如何在 ARKit 中 读取 EXIF 标签 让我们进入新的 高分辨率背景照片 API
当运行 ARSession 时 您仍然可以像往常一样访问视频流 此外 ARKit 可以 让您在后台请求捕获 单张照片 同时视频流会不间断地运行 这些单一的相框充分利用了 您的相机传感器 在我的 iPhone 13 上 这意味着 1200 万像素的广角摄像头 在为 WWDC 做准备的时候 我们 ARKit 有过一个 关于强调了这个新 API 可以帮您 创建什么的摄影 App 的有趣想法 在我们的例子中 我们带您回到 2016 年 4 月 1 日 当著名的海盗旗 在 Apple Infinite Loop 园区 上空飘扬时 我问最初的摄影师 Tommy 他六年前在哪里拍下了这张照片
基于这个坐标 我们可以创建一个位置锚点 引导您到 Tommy 在 2016 年 4 月站过的同一地点 如图中蓝色的大点所示 到达那个点后 它会通过显示焦点广场 来帮助您框出完美的照片 最后 这款 App 可以让您 通过点击屏幕来拍照 最后 当当前 ARKit session 正在运行时 该照片可以在原生相机分辨率下拍摄 而不需要启动另一个 AVCapture session 我们很高兴看到您有哪些 结合 AR 和 摄影力量的想法 另一个受益于此 API 的用例 是使用对象捕获创建 3D 模型 物体捕捉会拍摄真实世界物体的照片 比如这只跑鞋 并使用我们最新的摄影测量算法 将它们变成一个 3D 模型 准备部署在您的 AR App 中 有了 ARKit 您就可以在 物理对象上覆盖一个 3D UI 并提供更好的捕捉指导 现在有了新的高分辨率 背景图像 API 您可以拍摄更高分辨率的物体照片 并创建更逼真的 3D 模型了 我非常喜欢摄影测量 所以我强烈建议您看看今年的讲座 “Bring your world into augmented reality” 我来展示一下如何在代码中 启用高分辨率照片捕获 首先 我们要检查支持 hiResCapture 的视频格式 为此 我们可以使用便利函数 “recommendedVideoFormatForHighResolution FrameCapturing” 在确保支持该格式之后 我们可以设置新的视频格式 并运行会话 我们还需要进一步告诉 ARKit 何时捕捉高分辨率图像 在我们前面的例子中 照片的捕获是通过点击屏幕来触发的 在您自己的应用中 您可能希望 对触发高分辨率帧捕获的不同事件 作出反应 这取决于您的用例 ARSession 有一个叫做 captureHighResolutionFrame 的新函数 调用此函数 将触发高分辨率图像的 带外捕获 您可以在完成处理程序中 异步访问包含高分辨率图像 和所有其他帧属性的 ARFrame 在访问它的内容之前 您应该检查 帧捕获是否成功 在这个例子中 我们将帧存储到了磁盘 还要记住我前面提到的 关于图像保留的 最佳实践 特别是因为这些图像 使用了图像传感器的全分辨率 接下来 让我们聊聊 HDR 高动态范围会捕捉更广的颜色范围 并将其映射到您的显示器上 这在对比度高的环境中最明显 这是我后院的一个很好的例子 这个场景里既有非常黑暗的区域 比如木栅栏上 也有非常明亮的区域 比如天空中的云 当打开 HDR 模式时 如右图所示 您可以看到这些区域的细节 比如云雾中的绒毛 在 HDR 中保存得更好 让我们看看如何在代码中 打开 HDR 您可以通过其 isVideoHDRSupported 属性 查询任何视频格式 只要它支持 HDR 目前 只有非二进制视频格式 支持 HDR 如果 HDR 受支持 在配置中将 videoHDRAllowed 设置为真 并使用该配置运行会话 打开 HDR 会对性能产生影响 所以要确保只在需要的时候使用它 在您比起曝光或白平衡等设置 更倾向手动控制的用例中 现在有了一种方便的方法可以直接 访问 AVCaptureDevice 并更改它的任何设置 在我们的代码示例中 调用配置中的 “configurableCaptureDeviceForPrimaryCamera” 来访问底层的 “AVCaptureDevice” 使用此功能为 ARKit App 创建自定义外观 但请记住 图像不仅用作渲染背景 还被 ARKit 积极用于分析场景 所以任何变化 如强烈的过度曝光 都可能会对 ARKit 的输出质量 产生负面影响 您还可以执行一些高级操作 比如触发焦点事件 要了解关于如何配置 AVCaptureSessions 的更多信息 请参阅 developer.apple.com 上的 AVCapture 文档 最后 ARKit 会将 EXIF 标签 暴露给您的 App 它们现在可以在 每个 ARFrame 中使用 EXIF 标记包含有关白平衡 曝光和其他对后期处理有价值的 设置的有用信息 这就是图像捕获管道上的所有更新 让我们看看 Plane Anchor 有哪些变化
从第一版 ARKit 开始 plane anchor 就一直是个很受欢迎的功能 开发者中的许多人表示需要有一个 更清晰的 plane anchor 和底层平面几何的分离 出于这个原因 我们宣布了 plane anchor 的行为 和平面几何形状的更新 这是 iOS 15 中一个典型的 palne anchor 的例子 在 AR session 开始时 它将平面 与桌子上的这个 纹理丰富的笔记本相匹配 在运行会话时 该平面会逐渐更新 以囊括桌上出现的新部分 每次平面几何形状更新时 锚旋转也会更新 以反映平面的新方向 在 iOS 16 中 我们在 plane anchor 和它们的平面几何之间 引入了一个更清晰的分隔
plane anchor 和几何更新 现在完全解耦 当整个平面进入视野时 平面会扩展并更新其几何形状 锚点旋转本身保持不变
当与左手边的旧行为对比时 您可以看到 iOS 16 中的 plane anchor 在整个AR 会话中 一直保持在相同的方向上 与笔记本对齐
所有关于平面几何的信息 现在都包含在一个 叫做 ARPlaneExtent 的类中 旋转更新不再通过 plane anchor 的旋转本身来表示 相反 ARPlaneExtent 包含一个 新属性 rotationOnYAxis 用于表示旋转角度 除了这个新属性之外 平面完全由宽度和高度 以及 PlaneAnchor 的中心坐标定义 让我向您展示如何在代码中 创建这个平面可视化
首先 我们要根据指定的宽度和高度 生成一个基于平面网格的实体 然后我们要根据 y 轴的旋转 来设置实体变换 并通过 center property 的值 来偏移它 每次平面更新时 我们都必须考虑到宽度 高度和中心坐标以及新的 rotationOnYAxis 可能会改变的事实 为了利用这个新行为 在 Xcode 设置中将您的部署目标 设置为 iOS 16 下一个更新体现在 MotionCapture 上 我们的机器学习大师们努力工作 进行了进一步改进 2D 骨架和 3D 关节都有 完整的更新套件 对于 2D 骨架 我们跟踪了两个新的关节 左耳和右耳 我们还改进了整体姿态检测 在 iPhone 12 及以上版本 以及搭载 M1 芯片的 最新 iPad Pro 和 iPad Air 机型上 比如图中红色所示的 3D 骨架 都得到了改进 您将体验到更少的抖动 并总体感到更多的颞部一致性 如果人的某些部位被遮挡 或者走近镜头 跟踪也会更稳定 要使用改进后的 MotionCapture 就要在 Xcode 设置中 将您的部署目标设置为 iOS 16 接下来 我还想宣布 将支持 LocationAnchors 的 新城市和国家 一个小提示 Apple 地图使用了 LocationAnchor API 以辅助其行人行走指示 在这个例子中 您可以看到 它能引导您穿过伦敦的街道 这要感谢 LocationAnchors 的力量 LocationAnchors 已经在 越来越多的美国城市 和英国伦敦可用 从今天开始 温哥华 多伦多 和蒙特利尔等加拿大城市 也都将可以使用它 我们还在新加坡 和包括东京在内的 七个日本大都市启用了它们 还有澳大利亚的墨尔本和悉尼 也将能使用它 今年晚些时候 我们将在新西兰的奥克兰 以色列的特拉维夫 和法国的巴黎启用它 如果您想知道 LocationAnchor 在特定的坐标上 是否受支持 只需使用 ARGeoTrackingConfiguration 的 checkAvailability 方法 这些都是 ARKit 6 的更新 总之 我介绍了如何在 新的 4K 视频格式中运行 ARKit 对于高级用例 我演示了如何启用 HDR 或手动控制 AVCaptureDevice 对于需要更多像素的应用 我演示了该如何通过 ARKit 会话 获得高分辨率的照片 我们讨论了 Plane Anchor 的新行为 我还介绍了新的耳关节 和 MotionCapture 的其他改进 您还知道了今年晚些时候 Location Anchor 将在哪些国家推出
感谢收看 祝您的 WWDC 2022 之旅一切顺利
-
-
5:00 - HighRes Capturing
if let hiResCaptureVideoFormat = ARWorldTrackingConfiguration.recommendedVideoFormatForHighResolutionFrameCapturing { // Assign the video format that supports hi-res capturing. config.videoFormat = hiResCaptureVideoFormat } // Run the session. session.run(config)
-
10:55 - highRes background photos
session.captureHighResolutionFrame { (frame, error) in if let frame = frame { saveHiResImage(frame.capturedImage) } }
-
12:00 - HDR support
if (config.videoFormat.isVideoHDRSupported) { config.videoHDRAllowed = true } session.run(config)
-
12:35 - AVCapture Session
if let device = ARWorldTrackingConfiguration.configurableCaptureDeviceForPrimaryCamera { do { try device.lockForConfiguration() // configure AVCaptureDevice settings … device.unlockForConfiguration() } catch { // error handling … } }
-
16:00 - plane anchors
// Create a model entity sized to the plane's extent. let planeEntity = ModelEntity( mesh: .generatePlane ( width: planeExtent.width, depth: planeExtent.height), materials: [material]) // Orient the entity. planeEntity.transform = Transform( pitch: 0, yaw: planeExtent.rotationOnYAxis, roll: 0) // Center the entity on the plane. planeEntity.transform.translation = planeAnchor.center
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。