XR 基地是一个专心于 XR 范畴的学习社区,咱们专心供给 XR 开发教育课程及文章,经过 learn by doing 的教育理念,将不流畅难懂的概念变的简略易懂;除此之外,咱们还会结合社区的力量,让更多的创作者融入到 XR 生态中。

假如你想了解更多关于 Apple Vision Pro 的高质量信息,欢迎关注大众号 “XR基地”

掐指一算,自从 2017 年 Apple 发布 ARKit(同一年,Apple 发布了 iPhone X),Apple AR 相关的技能现已开展了 6 年多了。在这 6 年,每年的 WWDC 上 AR 的相关技能都会占据 Sessions 的一席之地,虽然没有 Swift 和 SwiftUI 相关话题的热度高,可是依然保持着安稳的输出。

可惜的是,因为运用场景的限制,绝大多数开发者或许只是是知道 Apple 有 AR 相关的技能,但对这项技能并没有实践的上手或许是深入了解。因而说他是 iOS 开发者一个“了解的陌生人”或许并不为过。

在这篇文章中,咱们将会测验从以下这些方面,来协助你对 visionOS 发布之前,Apple AR 技能有一个大致的了解:

  • 2017~2022,每年的 WWDC 都发生了什么
  • 从官方 30+ 个 Sample Code 演示中总结出来的 AR 全体结构
  • 一切 AR App 都会用到的最根底的代码,以及编程概念
  • 精进 Apple AR 有必要了解的其他技能
  • 入门 Apple AR 的引荐材料

争夺在你看完这篇文章后,能够和 Apple AR 从陌生人相处成能够进一步协作的同事。

时间线:从 2017 到 2022

首要,让咱们先来看看从 2017 年到 2022 年的这些年,每一年的 WWDC 都发生了什么。

2017 年

2017 年能够说是 Apple AR 的 “元年”,这一年的 WWDC 上,Apple 发布了 ARKit 结构以协助开发者在 Apple 生态下进行 AR App 的开发。

发布之初,ARKit 供给了平面辨认(PlaneTracking)以及设备运动状态跟踪的两项根底才干(WorldTracking),这两项才干是依据核算机视觉结构 Vision 对摄像头数据和 iOS 设备的陀螺仪传感器完结的。虽然根底,但这两个功用现已为 AR App 的开发打好了最坚实的地基。运用这两项才干,开发者能够十分简略地完结一个”物品放置”类的 AR App。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

除此之外,iPhone X 上搭载的原深感摄像头也为精密的人脸辨认才干供给了硬件保障。依据此,ARKit 供给了对面部表情的精确辨认(FaceTracking),开发者能够运用 ARKit 不仅能够辨认用户的面容,甚至能够精密辨认用户的表情与对应的面部三维模型。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

然而,ARKit 自身只是一个经过摄像头和陀螺仪来了解实践国际的结构,因而要开发 AR App,还需求有适宜的 2D 或许 3D 烘托引擎与之相结合才干让用户看到更为实在的 AR 画面。

在此之前,Apple 的技能生态中现已有了 SceneKit 和 SpriteKit 这两个用于 3D 和 2D 游戏的游戏引擎。此在 ARKit 发布之时,Apple 十分自然地挑选了将 ARKit 与 SceneKit、SpriteKit 相结合的办法,让开发者能够依据 SceneKit 或许 SpriteKit 来完结 AR App 的开发。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

在这一年,开发者也依据 ARKit 的才干做出了许多有趣的 App,例如 3D 笔刷:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

2018 年

因为 ARKit 是一个技能结构,在不凭借 App 的情况下用户很难直接体会到 AR 的魅力,因而在 2018 年,Apple 依据原有的 QuickLook 供给了 AR QuickLook,让用户能够直接经过体系内置的文件 App 来以 AR 的办法预览三维模型:

而在这一年,更新后的 ARKit 2 更新更多的实践国际的辨认才干,除了实践国际的平面和人脸,ARKit 还能够追踪辨认实践国际中的图片(ImageTracking)、三维物体(ObjectTracking),甚至还能在用户扫描实践国际时,对实践国际进行 “截图”,然后将其反映在场景中有反光作用的三维物体上(EnvironmentTexturing)。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

(WWDC 2018,环境纹理作用展现,其间生果碗是三维模型,香蕉是实践国际中存在,能够看到生果碗上反射出来了香蕉的外表)

2019 年

跟着 ARKit 才干的增强,Apple 发现 SceneKit 这个为游戏规划的引擎在 AR 场景下无论是性能仍是易用性仍是存在着局限性。因而,在 2019 年的 WWDC 上,Apple 发布了专门为 AR 场景规划的烘托引擎—— RealityKit。

和 SceneKit 相比,RealityKit 在 AR 场景下 API 运用起来会愈加简略。而且同一时间推出的创作者东西—— Reality Composer 也只能和 RealityKit 协作。

运用 Reality Composer,即使你是不明白开发的 AR 爱好者,也能够经过简略的操作构建一个比较完整的 AR 场景,而且无论是在 Mac、iPad 仍是 iPhone 上,你都能够运用 Reality Composer 来完结场景的构建作业。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

这一年 ARKit 也带来了不少更新,其间最引人瞩目的,无疑是 ARKit 对人物的精准辨认(PeopleOcculusion),当人物处于三维物体的前方时,人物就会遮挡住三维物体,从而让整个 AR 的体会更为实在:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

除此之外,ARKit 还支撑了人物的动作捕捉——只是经过一般的摄像头就能完结(BodyTracking),无需复杂的动作捕捉设备。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

2020 年

在 2020 年之前,开发者假如想要将三维模型转换成 RealityKit 或许 SceneKit 支撑的 USDZ格局只能运用一个命令行东西——USDZ Converter,这在一些需求对模型进行精密化调整的场景下是不太便利的。因而在 2020 年,Apple 推出了 Reality Converter,补上了 Apple 在创作者东西这儿的一块拼图。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

与此同时,从这一年开端,Apple 也开端在一些设备上添加了 LiDAR 扫描器——一个经过向实践国际发射激光来测量设备到物体的距离的传感器。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

以往的 ARKit 都是依据核算机视觉技能来知道实践国际的,因而在一些光照场景欠好的场合就会出现定位作用欠好的问题。在配有 LiDAR 传感器的设备上,这一问题得到了解决,这也让 AR App 的体会得到了显着得到提升。

这一年 ARKit 也添加一个新的知道实践国际的办法:地理方位定位(GeoTracking)。但可惜的是,这个功用只能在一些美国的城市才干运用。这是因为,地理方位定位需求将 GPS 数据和 Apple 对实践国际的高精度扫描成果结合剖析才干得到安稳的成果,因而在运用地理方位定位前,Apple 有必要对当地的实践国际场景进行扫描。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

2021 年

在 AR App 的开发进程中,精美的三维模型一直是良好用户体会不行缺失的部分,为了下降开发者获取这些模型的本钱,在 2021 年,Apple 在 RealityKit 中供给了 Object Capture 的 API,让开发者能够直接经过对物体拍照来生成高质量的三维模型。

2022 年

不仅如此,2022 年 Apple 又推出了 RoomPlan,这是一个让开发者能够经过配有 LiDAR 的设备,就能够对房屋进行建模的结构。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

小结

漫长的六年韶光让 Apple AR 的才干逐渐丰富,只是是这六年间出现的各种结构、东西就现已让人目不暇接了。不用忧虑,上面出现的种种名词,你都能够经过下面的这张图来再次回忆他们出现的时间,以及当年出现的一些主要更新:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

在上面出现的一切的名词术语中,最为要害的便是 ARKit 和 RealityKit 这两个结构了,他们各有分工,ARKit 负责获取实践国际的各种信息,而 RealityKit 则专心于将虚拟的 3D 内容实在地烘托出来。

假如把 Apple AR 不精确做一个类比的话,ARKit 就像是 CoreLocatioin / CoreMotion 这样的设备信息结构,获取着实践国际的更多维度的信息;而 RealityKit 则便是像 UIKit / SwiftUI 这样的 UI 结构,只不过 RealityKit 愈加专心于 3D 国际的烘托。

好,很棒,现在你现已知道和了解了 ARKit、RealityKit 这两个 AR 国际最为核心的两个结构,它们在 WWDC 历年 AR 相关的视频 中占据了肯定的主角方位:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

除了 RealityKit 和 ARKit,你或许还会看到其他一些名词,有的你或许会彻底陌生,先别着急,在后面咱们会展开向你介绍它们的,现在,让咱们来持续咱们的旅程。

做分类:用适宜的结构知道 AR 技能

信任在前面的时间线展现中,你现已看到了许多例如 WorldTracking、FaceTracking 这样的名词了。在 AR 的国际中,这样的名词数不胜数。只是是看一遍 Apple 官方一切的 Sample Code,这些 Demo 所体现的各种技能名词都现已让人目不暇接了:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

Tips:

为了便利你快速了解这些 Demo 所体现的才干,这儿的每个 Demo 都附上了一个展现的视频或许图片,并对 Demo 的重点内容进行了讲解,你能够直接点击 飞书多维表格 的链接进行检查。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

假如你想亲身去跑这些 Demo,因为需求真机运转,证书的装备将会是一件十分繁琐的作业。为了便利你运转,XR 基地将这些一切的 Demo 汇总在 apple-wwdc-ar-demo 这个仓库中,并经过一个单独的 xcconfig 文件统一装备,每个工程直接翻开就能够跑。

假如不用一个适宜的结构来将他们分类,恐怕咱们就要迷失在新鲜术语的海洋中了。

因而在持续深入 AR 的国际之前,咱们无妨暂停一下,回想一下咱们所了解的,在小小的屏幕上所开发的 App 的根本结构。

在一个简略 iOS 运用的开发进程中,咱们能够将最根本的开发作业归类在下面两个范畴:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

  • 烘托:将数据转换成屏幕像素的进程,UITableView 在这儿陪伴咱们度过了一段段美好的岁月
  • 交互:响运用户接触操作的进程,单击、双击、拖拽以及各种自定义的手势辨认器协助咱们更精确的获知用户的主意

实践上,在 AR App 中,你也能够将一切的才干依照上面的办法进行分类,只不过需求额定的添加一个新成员:场景了解。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

所谓场景了解,指的是 AR App 对于实践国际信息的剖析了解,从而影响 App 的内容出现。

在传统的 iOS 运用开发中,对地理方位的运用也算是场景了解的一种根本体现,一些相似美团、地图这样的 App 会依据用户当时所处的方位,展现出不同的内容。

而在 AR App 中,对实践的了解就不只是是地理方位这么简略了,简略回忆一下你就会发现,ARKit 的一切才干,都是围绕着场景了解展开的,咱们再回忆一下在前面的历年 WWDC 中所看到的各种场景了解才干:

  • PlaneTracking:辨认平面
  • WorldTracking:辨认设备在实践国际中的相对方位
  • FaceTracking:辨认设备采集到的人脸以及面部表情
  • ImageTracking:辨认实践国际中的图片
  • ObjectTracking:辨认实践国际中的三维物体
  • BodyTracking:辨认实践国际中的人体姿态
  • GeoTracking:辨认设备所处的方位

这些场景了解才干是协助开发者开发出拟真的 AR App 最重要的才干。例如,凭借 WorldTracking 中的 EnvironmentTexturing(环境纹理,ARKit 能够经过对相机画面的剖析对实践国际的大致样子进行建模,从而赋予虚拟物体更实在的反射作用),你能够在一个虚拟的金属小球外表出现出实在的反射作用。

而在烘托和交互这儿,因为需求和实在的国际进行交互,大部分 AR App 都会挑选 3D 场景进行烘托和交互,这也就要求开发者在开发 App 时,有必要将视野从二维空间转移到三维空间。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

而将视野转移到三维空间后,因为游戏引擎(例如 Unity、Unreal)现已在这个范畴现已有了相当多的堆集,开发者的知识库就需求扩大许多来自游戏的新知识了。例如物理模拟、ECS (一种游戏代码的安排范式,能够类比成咱们所熟知的 MVC)这些只要在游戏编程才会出现的术语也会进入到开发者的视野中。

虽然或许比较粗糙,但这个结构现已根本能够协助咱们了解 Apple AR 的大部分才干以及他们所起到的作用了。现在,让咱们测验将上面一切 Sample Code 的才干依照这个结构进行分类,会不会感觉明晰了一点 :

开发 visionOS 前,你需要了解的 Apple AR 技术全景

上代码:怎么开发一个简略的放置类 AR App

讲完了概念上的东西,或许你仍是有点儿云里雾里。毕竟,Talk is Cheap,Show me the Code。

那么接下来,经过一些简略的代码实例,你将会了解一个 AR App 终究应该怎么开发,这儿咱们直接借用 Yasuhito Nagatomo 这位日本小哥编写的 ARBasicApp 的代码实例。在这个 App 中,咱们将完结一个最为简略不过的放置类 AR App——当你点击屏幕时,一些心爱的玩具就会出现在实践国际中。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

首要,你需求创立一个 ARView,这是翻开 AR 国际大门的榜首把钥匙:

class ARViewController: UIViewController {
    private var arView: ARView!
    override func loadView() {
       // ...  
       arView = ARView(frame: .zero,
                            cameraMode: .nonAR,
                            automaticallyConfigureSession: false)
       // ... 
       // set up delegate     
       arView.session.delegate = self                  
    }
}

这儿除了 ARView,还出现了一个 Session 的概念。在 AR App 中,场景了解是一个需求持续进行的进程,因而在这儿 Apple 将整个了解进程像 NSURLSession 一样抽象成了一个 Session 目标,并经过 Delegate 来获取整个了解进程的细节信息:

// MARK: - ARSession Delegate
extension ARViewController: ARSessionDelegate {
    func sessionShouldAttemptRelocalization(_ session: ARSession) -> Bool {
        // ...
    }
    func sessionWasInterrupted(_ session: ARSession) {
        // ...
    }
    func sessionInterruptionEnded(_ session: ARSession) {
        // ...
    }
    func session(_ session: ARSession, didFailWithError error: Error) {
        // ...
    }
    func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) {
        // ...
    }
}

接下来,因为这儿挑选了不主动装备 Session,因而咱们能够有时机自己装备一个 ARWorldTrackingConfiguration,并用这个 ARWorldTrackingConfiguration 开启咱们前面看到的各项场景辨认才干:

extension ARViewController {
    private func startARSession() {
        // ...
        let config = ARWorldTrackingConfiguration()
        // Plane Detection
        config.planeDetection = [.horizontal, .vertical]
        // Environment Texturing
        if AppConfig.enableEnvironmentTexturing {
            config.environmentTexturing = .automatic
        }
        // ...
        // People Occlusion
        if AppConfig.enablePeopleOcclusion {
            if ARWorldTrackingConfiguration.supportsFrameSemantics(.personSegmentationWithDepth) {
                config.frameSemantics.insert(.personSegmentationWithDepth)
            }
        }
        // Run the AR Session with reset-tracking
        arView.session.run(config, options: [.removeExistingAnchors, .resetTracking])
        // ...
}

到这儿,咱们就现已能够运转起来带有场景辨认才干的 AR App 了。让咱们给这个 App 添加一点用户交互,这儿依然仍是 iOS 开发所了解的 UITapGestureRecognizer:

class ARViewController: UIViewController {
    // ...
    override func viewDidLoad() {
        super.viewDidLoad()
        let tap = UITapGestureRecognizer(target: self,
                                         action: #selector(tapped(_:)))
        arView.addGestureRecognizer(tap)
    }
}

当用户点击屏幕的时分,UITapGestureRecognizer 只能告诉咱们用户在屏幕这个二维空间的点击方位。

在 AR App 中,咱们需求知道用户点击场所对应的三维空间方位,这儿能够运用 Raycast 来获取这一信息,所谓 Raycast,指的是发射一条射线,返回这条射线上所碰触的一切物体(能够不精确的了解为三维版别的 HitTest):

开发 visionOS 前,你需要了解的 Apple AR 技术全景

了解了概念后,再看代码就比较简略了:

extension ARViewController {
    @objc private func tapped(_ gesture: UITapGestureRecognizer) {
        if gesture.state == .ended {
            let location = gesture.location(in: arView)
            // create ray cast query
            guard let query = arView.makeRaycastQuery(from: location,
                                                      allowing: .estimatedPlane,
                                                      alignment: .any) else {
                return
            }
            let raycastResults = arView.session.raycast(query)
            if let result = raycastResults.first {
                // [Note] result.anchor: ARAnchor? can not be casted to ARPlaneAnchor
                // - if query's allowing is .existingPlaneInfinit, result.anchor will be ARPlaneAnchor
                // - if query's allowing is .estimatedPlane, resutl.anchor will be nil
                let anchorEntity = AnchorEntity(raycastResult: result)
                placeARScene(anchorEntity)
            } else {
                // do nothing (no raycast result)
            }
    }

经过 raycastResults,咱们得到了一个实践国际的三维坐标,接下来要做的作业便是加载对应的模型。

你或许会注意到这儿又出现了一个没见过的名词——Anchor(锚点),在 Realitykit 和 ARKit 的国际中,Anchor 所代表的是一个虚拟的点或许区域,用来将虚拟国际中的图像、模型、视频等元素与实践国际中的物理方位和方向进行关联。咱们只需求确保虚拟物体和锚点之间的相对坐标是正确的即可,RealityKit 会主动将实践国际的坐标改变更新在 Anchor 上(例如 FaceAnchor 会跟着人脸的移动而改变坐标),无需咱们去关注实践国际物体的坐标改变。

开发 visionOS 前,你需要了解的 Apple AR 技术全景
在这儿,咱们将这个锚点和用户所点击的区域进行绑定,便利下一步加载模型时加载在正确的方位。

前面咱们提及到,在 AR App 中会不行避免的涉及到许多来自游戏引擎的编程概念,在这儿咱们行将调用的placeARScene()中的 Scene,也是一个来自游戏引擎的概念。你能够不精确的将 Scene 了解为游戏中的关卡,一个 Scene 中会负责将一个关卡中玩家看到的一切东西依照层级安排在一同,例如在 Unity 中,你会看到:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

不过这儿咱们还无法有这样可视化的东西来辅佐咱们开发,让咱们持续来用代码构建咱们的 AR 国际,将刚刚创立的 AnchorEntity 放置到 Scene 的根节点下:

extension ARViewController {
    private func placeARScene(_ anchorEntity: AnchorEntity) {
        if arScene != nil {
            removeARScene()
        }
        arView.scene.addAnchor(anchorEntity)
        arScene = ARScene(anchorEntity: anchorEntity)
        arScene?.setScale(sceneScale)
        arScene?.loadModels()
        startFrameLoop()
    }
}

完结了场景了解、交互,现在让咱们来完结最重要的烘托。

在这儿,咱们会经过 RealityKit 内置的办法,将三个格局为 USDZ 的 3D 模型挂载到 AnchorEntity 之下:

final class ARScene {
    func loadModels() {
        ARSceneSpec.models.forEach { modelSpec in
            // ...
            Entity.loadAsync(named: modelSpec.fileName)
                .sink(receiveCompletion: { _ in
                    // handle error
                }, receiveValue: { [weak self] entity in
                    // ...
                    self?.anchorEntity.addChild(entity)
                    // ...
                })
                .store(in: &loadingSubscriptions)
        }
    }
}

至此,一个简略的放置类 AR App 就完结了!

看过去了这么一大堆代码,让咱们再来回忆一下刚才接触到的一切概念:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

再精进:AR 背后默默支撑的其他技能

除了 ARKit 和 RealityKit ,在 Apple 巨大的武器库中,还有许多技能能够协助咱们完结一个体会良好的 AR App,这儿咱们主要介绍这几个你在深入时大概率会碰到的技能:

  • USD:由皮克斯所开发的三维场景文件格局
  • CoreML:苹果的机器学习结构
  • Vision:苹果的视觉智能结构
  • Multipeer Connectivity​:苹果端到端的本地连接和发现服务结构
  • Metal:苹果供给的高性能的底层图形结构

USD

开发 visionOS 前,你需要了解的 Apple AR 技术全景

先来说说 USD(Universal Scene Description),出于皮克斯和 Apple 之间 有趣的过往,Apple 挑选一个皮克斯推出的三维场景格局就不奇怪了。而 USD 也是 RealityKit 仅有支撑的三维模型格局。前面咱们所提及到的 AR Quicklook 支撑的也是 USD 这种格局。

在日常的开发流程中,咱们主要会看到这几种文件后缀——usda 、usdc 以及 usdz,其间,usda 是纯文本文件格局(你能够直接用文本编辑器将其翻开),而 usdc 则是二进制格局,usdz 则相似 zip ,是一种压缩包格局,在这个文件中能够有一些贴图(png、jpg 格局等),你能够运用 unzip -l 来检查其内部的内容,比方 这个文件:

$ unzip -l teapot.usdz
Archive: teapot.usdz
Length Date Time Name
--------- ---------- ----- ----
4262569 01-24-2023 18:24 teapot.usdc
2210854 01-24-2023 18:24 0/teapot_bc.png
489015 01-24-2023 18:24 0/teapot_ao.png
1246353 01-24-2023 18:24 0/teapot_r.png
793984 01-24-2023 18:24 0/teapot_n.png
17302 01-24-2023 18:24 0/teapot_m.png
--------- -------
9020077 6 files

假如你想看到更多的 USD 文件比如,你能够前往 Apple 的 Quick Look Gallery 玩耍一番。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

Tips:

你或许会注意到,在 Quick Look Grallery 中,Examples with animations 中的比如下载下来是 .reality 格局。之所以会有这种格局,是因为 USD 是一个公开的 3D 模型文件规范,并不是专门针对 AR 场景规划的,因而一些针对 AR 场景才会有的功用就不能直接被 USD 文件所支撑,例如锚点、空间音频等。(例如,在 Quick Look 中翻开 这个 .reality 文件,是具有 FaceTracking 的作用的,而 USD 文件则无法拥有这样的作用)

为了不受制于 USD,Apple 便将这些 AR 特性依据 USD 进行了 扩展,就有了 .reality 格局。

CoreML && Vision

开发 visionOS 前,你需要了解的 Apple AR 技术全景

机器学习和视觉智能,这两者能够说是 ARKit 完结场景了解的底层柱石。CoreML 和 Vision 则一同,从 iOS 11 开端承担起来 Apple 在 AR 场景了解上的重任。ARKit 中许多场景了解的才干在 CoreML 和 Vision 中都能找到愈加底层的接口。

例如,前面咱们提及过的 BodyTracking,你也能够运用 Vision 中的 VNDetectHumanBodyPoseRequest 来完结:

// Get the CGImage on which to perform requests.
guard let cgImage = UIImage(named: "bodypose")?.cgImage else { return }
// Create a new image-request handler.
let requestHandler = VNImageRequestHandler(cgImage: cgImage)
// Create a new request to recognize a human body pose.
let request = VNDetectHumanBodyPoseRequest(completionHandler: bodyPoseHandler)
do {
    // Perform the body pose-detection request.
    try requestHandler.perform([request])
} catch {
    print("Unable to perform the request: \(error).")
}

当然,了解 CoreML 和 Vision 肯定不是为了运用 ARKit 现已封装好的功用。在 CoreML 和 Vision 中,还有许多十分合适 AR 场景运用的功用还没有被封装在 ARKit 中, 了解他们有助于咱们完结那些 ARKit 尚未封装好的功用,这其间,最典型的比如便是手势辨认。

在 ARKit 的当时版别中,咱们还不能十分精密地辨认到画面中的人物手势并进行区别。而凭借 Vision 供给的 VNDetectHumanHandPoseRequest ,以及 CoreML 配套的模型训练东西 CreateML 中供给的 Hand Action Classification,咱们就能够轻松完结人物的手势辨认。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

例如,在 WWDC 21 的这个示例中,凭借以上两个结构,咱们就能够完结下面这段视频中对人物手势的精准辨认:

Multipeer Connectivity

独乐乐不如众乐乐,手机 App 是如此,AR App 也不例外,除了直接录屏同享,一个制作精美的 AR App 假如能够供给本地多人联机才干,那这个 App 带来的高兴无疑会增倍。

而为了完结这样的功用,从 iOS 7 年代就推出,可是长久以来简单被忽视的 Multipeer Connectivity 结构在 AR 场景中又焕发出了新的生机。RealityKit 也依据这个结构供给了十分简练的封装。例如,依据 MultipeerConnectivityService,咱们能够十分简略的经过几行代码来完结和其他设备间的场景同享:

let peerID = MCPeerID(displayName: UIDevice.current.name)
let session = MCSession(peer: peerID, securityIdentity: nil, encryptionPreference: .required)
arView.scene.synchronizationService = try? MultipeerConnectivityService(session: self.session)

HoloKit 中令人惊叹的多人 AR 游戏场景,便是依据这项才干完结的:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

Metal

最后,就不得不提及到 Metal 了。在 Apple AR 国际中,你看到的那些绘声绘色的虚拟 3D 物体的背后,都有 Metal 这个底层图形制作结构的默默支撑。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

作为一个 2014 年就发布的底层图形结构,Metal 现已成功成为了在 iOS 渠道进行底层图形制作的不贰挑选(成功替换掉了在 Apple 渠道被废弃的 OpenGL ES),前面咱们所介绍的 SceneKit 和 RealityKit,以及 iOS 开发者所熟知的 CoreImage,甚至 Unity 这样的游戏引擎,都是依据 Metal 去操作 GPU 的。

开发 visionOS 前,你需要了解的 Apple AR 技术全景

因而,当你的 AR App 需求完结一些愈加高效或许定制化的烘托作用时,你就能够运用 Metal 来大展身手了。例如在 Apple 的 Sample Code – Creating a Fog Effect Using Scene Depth 中,就依据 Metal 完结了十分高效的雾气的作用:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

在实践运用中,除了直接运用 Metal,你还能够挑选运用 MetalKit(供给了许多便利的东西类和函数)、MPS(Metal Performance Shader,供给了一系列高性能的核算和烘托 Shader) 和 MetalFX(将低分辨率的画面 upscale 为高分辨率的画面,以取得更好的烘托性能) 这三个结构来快速开发。

除了用于制作,得益于 GPU 强壮的并行核算才干,Metal 也在机器学习中被广泛运用,CoreML && Vision 的底层也运用到了 MPS 来加速核算:

开发 visionOS 前,你需要了解的 Apple AR 技术全景

心中有数:学习 Apple AR 的材料引荐

呼,看到这儿,信任咱们现已达成了最开端的那个小小的目标:和 Apple AR 成为了能够进一步协作的同事。

为了尽或许协助你在入门的这条路上走的愈加顺利,在这儿 XR 基地的各位开发者们精心准备了一些比较引荐的入门材料:

  1. AR Quick Look:先快速玩起来
    1. 简略一览:Quick Look Gallery
    2. 发现更多好玩的模型文件:Sketchfab
  2. 3D 入门
    1. B 站视频——万字解析:今天的游戏技能终究开展到了什么程度?
    2. YouTube:What is mesh
    3. 实践上手:Spline
      1. 【包教包会 一学不费】 B站最简略易上手的建模软件Spline教程
  3. RealityComposer
    1. WWDC 19:Building AR Experiences with Reality Composer
  4. RealityKit
    1. 全体概念:WWDC 19:Introducing RealityKit and Reality Composer
    2. 代码示例:Building Apps with RealityKit
    3. 实践上手工程:Creating a Game with Reality Composer

当你学习完以上的材料之后,在概念上信任你会明晰不少,不过接下来,你还需求测验写一些详细的代码来练个手。从 Sample Code 中找一些你感兴趣的 Demo 测验改一改来上个手叭~