大多数浏览器和
Developer App 均支持流媒体播放。
-
将真人带入到 AR
ARKit 3 实现了一项革命性的功能,可让真人稳定地融入到 AR 场景中。了解 app 可以如何使用实时运动捕捉来制作虚拟人物动画或应用到 2D 和 3D 模拟中。了解 People Occlusion 如何让虚拟内容从现实世界中的人物后面通过,以此实现更加逼真的 AR 体验。
资源
相关视频
WWDC21
WWDC19
-
下载
(带领大家进入AR的世界)
大家好
谢谢你们的到来
这是关于ARKit的一个 深入的介绍 我们会向你展示如何带领 人们走进AR的世界
我是Adrian 我将会和同事 Tanmay一同为大家介绍
这周早些时候Apple 发布了RealityKit框架 这是为渲染逼真内容而 设计的一个新框架 它也是从底层开发用来支持AR
我们也有一个介绍ARKit 3 新功能的演讲 我们向你展示了今年ARKit 许多很酷的新功能 为了深入了解 我们将专注其中的两个方面
首先 我将向你展示真人遮挡剔除 是如何工作的 接下来 Tanmay会带你了解 动作捕捉是如何工作的
那么 我们开始吧
什么是真人遮挡剔除?
现在使用ARKit 我们已经可以 在真实世界 定位渲染的内容了 不过 如果我们看我身后的视频 我们能看到出现了严重的错误
我们期待看到的是 离相机近的人会挡住 被渲染的内容
使用真人遮挡剔除 我们就能做到了 我们能正确地在场景中处理渲染内容 和人相互遮挡对方 为了了解我们需要做一些什么 来实现这个功能 我将截取一帧
这里 我们有了照相机的图片 有两个人站在一张桌子周围 我们想要将一个渲染的物件放在 桌子上
目前为止 在ARKit 2上 定位渲染内容的方式 是简单地将它覆盖在图片上 当我们这样做的时候 我们看到了一个错误的遮挡关系
这不是我们所期待的 我们想要将红色的叉变为一个绿色 的对钩 为了实现 我们需要明白当有人比 渲染内容要靠近照相机时 我们需要正确地保证渲染物件 要被遮挡
这本质上是一个深度排序的问题 为了明白我们会如何解决这个问题 我会来分解这个场景
这是一张相同倾斜角度的图片 我们将场景分割散开 来查看我们有的 不同的深度基准面 我们在不同的深度基准面上 看到了不同的物件 真实和渲染的物件混合在了一起 每个人在他们自己的深度基准面上 中间是渲染的物件
对于渲染的物件 绘图管线已经知道 它的确切位置 简单地使用一个深度缓冲就可以了 我们为了对真实的内容也实现了 相同的功能 我们需要知道人在场景中的位置 为了实现 我们加入了两个新的缓冲
我们加入了段缓冲器 它会通过每个像素点来告诉你一个人 在场景中位置 我们也给了你一个相应的深度缓冲 它为你提供人的深度位置信息
现在 最酷的事情是我们 生产这些缓冲的这个功能 是由A12芯片 和机器学习一起提供的 只需相机的照片就可以 产生这些缓冲
我们的这两个新缓冲将作为 两个新属性暴露给ARFrame segmentationBuffer 和estimatedDepthData
因为我们想要使用缓冲来实现 真人遮挡剔除 我们也要将它们以相同的频率 制作成相机的帧 所以 当你相机的帧以60帧每秒 的频率运行时 我们也能以60帧每秒的频率 为你产出这些缓冲
我们也想要这些缓冲和相机的图片 分辨率一样
不过 为了实时完成这个功能 神经网络只能检视到一张小的照片 所以 如果你拿到神经网络的输出 我们放大它 我们会看到这里有很多细节 神经网络并未检视到
所以为了弥补细节的损耗 我们做了其他的处理
我们使用遮片提取 遮片提取做了什么呢 根本上来说 它使用了segmentationBuffer 作为一个指导 接着看相机的照片 为了了解遗失的细节是什么
现在 使用一张遮片提取的照片 我们能正确地从场景中提取人 和estimatedDepthData 一同使用 接着 我们能定位他们 正确的深度基准面 最后 我们解决深度排序的问题 接着 我们就能重绘场景了
这使用了很多的技术 我们想要开发者能尽可能简单地 使用它 所以我们提供了三种不同的方式 来实现了这个功能
首先 我们有RealityKit 我们宣布的最新框架 但如果你已使用SceneKit了 我们也引入了 真人遮挡剔除的支持 通过使用ARCSNView 如果你有了自己的渲染器 或是使用了一个第三方渲染 我们为你提供了建筑块来让你 在app中通过Metal的 协助完成真人遮挡剔除
那么 我们来看一下我们如何使用 RealityKit来实现
如果你要创建一个新的AR app 我们推荐你用RealityKit 它有新的UI元素叫做ARView 它为你提供了一个 简单易用的API 为AR增加了照片写实 更近一步混合了真实 和渲染内容的边界
它也在内部支持真人遮挡剔除功能 如果你参加过新功能介绍的演讲 你已看过在一个ARView中启用 真人遮挡剔除功能的一段实时示例 为了深入了解它 我们来快速回顾一下 我们来看一些代码
这里是我的视图控制器里的 viewDidLoad函数 所以 我要做的第一件事是 来确保是否支持这个功能
我通过检查我的配置 就是这个 WorldTrackingConfiguration 我需要一个新的属性叫做 FrameSemantics 我们将要使用FrameSemantics的 personSegmentationWithDepth 来启用真人遮挡剔除功能
只要我知道它在我的配置中被支持 我只需在我的配置中设置 FrameSemantics就行 接下来 当会话开始运行时 ARView会自动地为 我的AR app 启用真人遮挡剔除功能
所以 我们所需做的是 改变我们的配置 使用我们今年介绍的新属性 FrameSemantics 就像你在之前的例子中看到的 我使用personSegmentationWithDepth 但我们也可以只使用 PersonSegmentation 当你想要启用一个似气象员的体验
现在 我们推荐使用ARView 来实现真人遮挡剔除功能 原因是因为它内部集成了一个 深度渲染器 那意味着整个绘图管线都能意识到 场景中有人 它也因此可以使用这个功能来 处理透明的物件 它也会同时创建最佳的性能体验
如果你担心使用真人遮挡剔除 和RealityKit 的用户体验 我想为你带来一部短片
这是Swiftstrike 它是一个很酷的示例 我们在Dub-dub上展示的 我强烈建议你们中 还没有查看的人去尝试
那么 如果你已经在使用 SceneKit了呢?
我们看看我如何在SceneKit 实现真人遮挡剔除功能
如果你已在使用ARSCNView 就能用一个和RealityKit 一样非常相似的方式启用 实现真人遮挡剔除功能 我们要做是在我们的配置中设置 FrameSemantics ARSCNView会自动地 使用这个功能
但实现SceneKit和 RealityKit方式略有不同 SceneKit做了一个 后处理效果图 那对你具体意味着什么呢 基于你设置的深度 它可能不会 非常好地处理透明的物体
最后 假如我有我 自己的渲染引擎呢?
我们想要让你在你自己 或一个第三方的渲染引擎 实现真人遮挡剔除功能
它能让你完全控制效果图
我们想要给你更多的自由度 为你提供简单易用的API的同时 也提供了 这个很棒的功能 那么 在我为你展示如何做之前 我们来快速回顾一下
我们的这个来自神经网络的 segmentationBuffer 处理一张比较小的图片 接下来 我们介绍了遮片提取 为了修复一些遗失的细节
当我们自定义效果图时 我们提供了一个新的类型 它通过使用Metal 会为你实现遮片提取 为你提供遮片的纹理 集成至你自己的管线中 我们来用一个例子来看如何实现
那么 这里是我的自定义构建函数 我要做的第一件事是确认这个功能 是否被支持 只要我实现后 我只需调用 generateMatte 我为它提供frame 和commandBuffer的值 它返回给我Metal纹理 当我自定义效果图时 我能使用它们 最后 为GPU规划所有的进程
我们为ARKit增加的类叫做 ARMatteGenerator 就像你在例子中看到的那样 它获取 ARFrame和commandBuffer 返回一张你能用到的纹理 不过 我们还没做完
和segmentationBuffer类似 它的分辨率很低 estimatedDepthData也低 如果我们放大它 覆盖在我们的遮片图片上
我们看到它们可能不太一致 我们可以使用遮片的没有阿尔法值的 深度值 更重要的是 我们也能在遮片中获取没有 相应深度值的阿尔法值
现在 虽然遮片已经拥有了一些 遗失的细节 我们不能真的修正它自己的阿尔法值 取而代之的是 我们需要修正 深度缓冲
那么 我们回到我之前的例子 看看我们要如何实现
这里我们有我添加的一行代码 生成matte的定义 为了让我使用我自定义的效果图 所以我加入了额外的函数 调用generateDilatedDepth 非常相似地 它也获取frame和 commandBuffer参数 返回一张纹理图
你看它的API 它和我们生成 遮片的非常类似 返回纹理图 获取frame和 commandBuffer参数
这能保证遮片中 每个我们发现的阿尔法值 都有一个相应的深度值 我们可以用它来处理最终效果图
利用这个扩大了的深度和遮片 我们终于可以进入到 效果图中
效果图通常在片段着色器 由GPU完成 那么 我们来看一个示例着色器 了解我是如何整合一切的
我从通常需要怎么 创建一个AR体验开始 我创建了一个相机图片 和一个渲染纹理示例 因为我们要做遮挡剔除 我也创建了一个渲染深度示例
接下来 我通常会 这样在AR里实现 我在一张真实图片上覆盖 渲染的内容 传给它渲染阿尔法值
下一个部分 为了实现 真人遮挡剔除 我也创建了一个遮片和 dilatedDepth
接着我确保对比dilatedDepth 和renderedDepth 如我发现dilatedDepth里的 东西离照像机更近 则意味着那里可能有一个人 接下来 我通过混合了照像机 返回遮片的值 不过 如果渲染内容离照相机更近 如以往一样 将渲染内容 放在它的上面 这样 我们终于在我们自定义 的渲染器上 实现了真人遮挡剔除功能
因为这个功能运用了神经网络引擎和 机器学习 它支持使用了A12及之后的设备
我也在室内环境中运行良好 你看到的这些所有视频中 你看到场景中站着的人 但这个功能也适用于 你自己的手和脚
它也适用于多人场景
在我邀请Tanmay上台为大家 展示动作捕捉之前 我们来快速回顾一下
使用真人遮挡剔除功能 我们能为大家在渲染内容 和真实内容间正确处理遮挡关系
如果你要创建一个新的app 我们推荐你 使用RealityKit和ARView 因为它能进行深度融合 如果你已经在你的app中使用了 SceneKit 我们也在ARSCNView中 加入了真人遮挡剔除的支持
如果你有你自己的渲染器 我们为你提供了一个新的API 调用ARMatteGenerator 你就能自己合成图片 至你自己的渲染器中 下面 有请Tanmay 带大家深入了解 动作捕捉
(动作捕捉)
谢谢Adrian 大家好 我是Tanmay 今天我为大家介绍 我们今年引入的新技术 动作捕捉
那么 什么是动作捕捉呢? 它就是用来捕捉人的动作的
你看到了一个人 你捕捉了所有的动作 你用一个虚拟的角色 来模拟那个动作 使那个角色表现出和你看到的一样的 一套动作 我们试着能让你的app 可以实现这项技术
现在 我们开始深入了解吧 我们想要这个角色来模仿 你看到的这个人 但在我们开始前 我们需要了解我们要做 怎样的动画效果 这个角色需要怎样实现?
所以 这是一个虚拟角色的示例 我们给它照一张X光片子 来看看它里面有什么
你能看到它有两个主要部分 它的外层 叫做一个网格 骨性结构里面 称为一个骨架
结合这两者就是这个完整的角色
骨架是整个角色背后的驱动力 它包含了我们用来控制它动作的 所有的四肢 就像人那样 所以 为了让角色动起来 我们需要让这个骨架遵循 一样的动作动起来
所以 第一步怎么做呢? 我们有一个人 第一步我们 让这个骨架模拟这个人
这就是它的看上去的样子 这要这个骨架动了 这个角色就会接着动
整个虚拟角色在自动地模仿你
所以 我们如何实现呢?
我们如何让这个骨架动起来呢? 基于这张图片 我们使用机器学习 来首次估量图片中人的姿势 我们使用这个姿势来创建一个完整 高保真的骨架
最后 我们使用这个骨架 结合一个网格 给你最终的角色 我们在ARKit整合了你看到的 所有的这些
为了完整的概括 我们在今年的ARKit加入了 动作捕捉的科技 使用它 你能在你的设备中实时 追踪人的动作 它和RealityKit一起能完美工作 为你提供了驱动角色的动画效果 接着渲染在你的屏幕中 它由机器学习驱动 在Apple神经网络引擎中平稳运行
我们在A12及之后设备支持这功能
那么 现在利用这项技术 你可以做些什么呢? 你能用它做什么?
对于新手来说 你可以创建 一个可以跟随一个人的 虚拟角色 你可以在AR中拥有一个你自己的 木偶 这是可以立刻实现的 除此之外 你可以在其他的 一些使用案例中用到它 比如 你可以创建你自己的监测 人们动作的模型来进一步强化它
你能使用它来创建分析动作的工具 比如高尔夫挥杆动作 或是你的正确姿势 或是在锻炼中的姿势是否正确
现在 因为人在场景中有了一个 虚拟的表示物件 你可以和任何你喜欢的虚拟物件 产生交互活动
它支持场景中所有的虚拟物件
最后 你也能使用它来分析图片 和视频 因为我们也在图像空间 提供骨架的2D版本 你可以创建它来编辑工具 或是进行图像语义理解
这甚至不需要涵盖全部的可能性 你可以远程启用它 你还可以用它来做其他很多事情
现在 我来向你展示如何 在你的app中引入 动作捕捉 基于不同的使用场景 我们有三种不同的方式来使用它
第一种 是RealityKit的动作捕捉
如果你只是想快速地让一个角色 动起来 这个高级的API能帮你 如果你想启用高级的使用场景 比如活动识别 分析 或在场景中与3D物件交互 我们也提供了低级别的API 来单独取出骨架中的每个元素
它是为你而设计的
最后 如果你的使用场景需要 位于2D版本的图片空间的骨架 可能用于分析动态图片 或用来编辑工具 或用于其他事情 我们也提供了相关的入口
那么 我们从RealityKit 的动作捕捉开始
你知道的 我们今年 引入了RealityKit 使用RealityKit的API 你只需写几行代码 就能追踪一个人 以及添加一个角色来模仿
为此我们提供了一个 非常简单易用的API 你也可以加入你自定义的角色 基于我们提供的示例结构 所以 基于我们提供的示例结构 在示例包里 你可以使用任意的网格 你想要的任意的角色
最后 被追踪的人非常容易通过一个 叫做AnchorEntities的元素 在这里被访问到 它们只是在场景中创建的块 它会自动地收集我们在动作捕捉 中需要的所有转换信息
那么 首先
你在ARView获取的 动作捕捉的每个元素 你门知道的 它是结合了AR和RealityKit 主要的UI元素 它由一个新的配置 ARBodyTrackingConfiguration来驱动 只要你启用了它 你可以开始加入包含了身体锚点和 封装在锚点整体里的一个叫做 bodyTrackedEntity 的特殊类型 那么 我来为你简单介绍一下 bodyTrackedEntity 实际上是什么呢?
一个身体被追踪的整体代表着 一个单独的人 它包含下面的骨骼和它的位置
它被实时跟踪 每帧都会更新 最后 它结合了骨骼来 自动地拼凑出网格 和为你提供了完整的角色
现在 我们来快速过一遍让角色 动起来的代码 你会发现非常简单 你只需跟随这3个步骤 第一步是加载一个角色
为了自动地异步加载一个被追踪的人 你需要调用 entity.loadBodyTrackedAsync 函数
以及你可以使用.sync来捕捉 在完成接收块的错误 或者 如果没有任何问题的话 你会在返回值块中获取你的角色 这个角色是 bodyTrackedEntity类型
在我们示例代码的包中 我们有一个 叫做robot.usdz的文件 如果你为这个文件提供文件机器人 它会自动地 为机器人网格添加骨骼 以及提供一个角色给你
接下来 第二部是来获取 你想要放置角色的位置信息
比如 如果你想要将角色放在追踪人 的上方 你可以通过使用 AnchorEntity 的参数.body来获取位置信息 请留意这只是一个例子 它也能被放置到其他位置 在地板上 在桌面上或其他任意地方 你只需提供 位置的一个锚点
角色会一直模仿这个人
最后 将你的角色放在这里 看吧!
你可以驱动你的角色了 就是这么简单
那么 你可能会思考 你要如何用你喜欢的其他自定义 角色来替换这个机器人呢
就像我之前说的 我们有一个 叫做robot.usdz的文件 这个usdz文件有一个完整的结构 如果你自定义的模型遵循了和它 一样的结构 接着你就能使用它 另外 我们提供的下面的骨骼 是一个极高保真的包含了91个 关节点的骨骼 这就是你要了解的所有信息了
有很多 对吧? 这些只是一般的关节点 包含了手臂 腿等等
如果你的角色遵循了这个命名方案 你可以直接在RealityKit 中使用它
这是一个快速简单的方式来载入 一个被追随的人和驱动角色 现在 我们来看低级别的API 作为高级的用途
这里 我们提供了一些接触骨骼中 每个元素的方式
我们通过了一个非常简单易用的 API连接了它
你能启用所有的这些高阶的 使用案例 我们之前讨论过 它需要使用骨骼数据来分析 或是为你模型提供一个输入
最后 我们提供的骨骼包含了 我们介绍的一个新的锚点类型 叫做ARBodyAnchor
ARBodyAnchor 是我们提供的 整个数据结构的初始点
这就是数据结构的样子
上面有ARBodyAnchor 它包含了所有骨骼的元素
那么 我们来看看这个结构 从上面开始
ARBodyAnchor 是一个常规的锚点 它包含一个几何物体 现在 这个几何物体本身是一个骨架 这就是骨架的样子 它包含了节点和边界 就像其他几何物体一样
它也包含一个转换
这个转换只是锚点在 旋转和转换矩阵形式中的位置 在这里 访问骨架是我们主要 感兴趣的点 那么 我们开始吧
我们展现给你的这个骨架是什么呢? 它是一个由节点组成的几何体 它代表节点 你看到的绿色的点和黄色的点 它包含了表示着骨头的边界 你看到的白色的线 向你展示了节点被链接
只要所有的节点被连接了 你就能组建整个几何体了
我们称这个骨架为ARSkeleton 你可以通过骨架的属性 ARBodyAnchor来访问它
骨架的根节点 几何体最上面的点 在几何体的层级中 它是髋关节 你在这可以看到
那么 我们继续 来看一下它的结构的定义 这里所谓的定义 只是骨架的一个属性 它包含了两个组件 骨架中展示的所有关节点的名字 和它们之间的连接 它展示了如何将关节连接在一起 那么 我们来看一下这些属性
这里 我们在骨架上标记 了一些关节点 如你所见 这些关节点有具有意义的语义名字 比如左肩 右肩 左手 右手等等 和人类似
这里我想说明一下 绿色的点是我们控制的 它们是你看到的人身上估量出来的 黄色的是没有被跟随的 它们只是跟随离它们 最近的绿色的父节点
放大 关注右手 查看这三个关节点 右手 右胳膊肘和右肩 它们遵循了父子关系 你的手是胳膊肘的孩子 胳膊肘是肩的孩子 这也包含了骨架的剩余部分 以此来为你提供完整的层级
我们现在知道了所有被调用的关节点 以及如何连接它们 但我们如何确定它们的位置? 我们提供了两种方式来访问所有 关节点的位置 第一个是和它父辈有关联的 如果你想要你右手的位置关联到 胳膊肘 你可以通过调用localTransform 方法来转换 为它提供 .rightHand的参数
但如果你想要改变相关的根节点 在我们的示例中 是髋关节 你可以调用 modelTransform函数 以及再一次提供相同的 .rightHand参数
现在 如果你不想单独访问 所有关节点的转换 但你想要一个包含了所有 关节点转换的列表 你一可以通过使用 localTransforms 和modelTransforms 属性来实现 它会返回给你一个包含所有关节点 转换的列表 如果你想要它关联至你的父辈 你可以使用 localTransforms 如你想要它关联至根节点 你可使用 modelTransforms
所以 现在我们来仔细观察这个 骨架 我们来通过代码了解如何使用 其中的每一个元素
你从遍历场景中所有的锚点开始 只要找到bodyAnchor
只要你有了bodyAnchor 你可能会想要知道 bodyAnchor位于 世界坐标系中的哪个位置
你能使用bodyAnchor的 变换属性来获取
因为在我们的几何体中 髋是根部
所以bodyAnchor.transform会 返回髋关节在世界坐标系的位置
只要你有了锚点的变换 你可能需要访问几何体的锚点 可以通过使用锚点骨架属性来完成
当你有了这个几何体 你需要所有的关节点 你需要所有的节点 来获取所有关节点转换的列表 就是所有关节点的位置列表 你可以通过骨架的 jointModelTransforms 属性来获取 在这种情况下 当你有了列表之后 你就能遍历整个列表 以及访问每个元素或 每个关节点的转换
所以遍历所有的关节点 你可以通过定义中的 parentIndices 的属性来访问 每个关节点的 parentIndex 只需检查父节点是否为根节点 因为根节点 使整个层级中最顶部的点 所以它没有父节点 所以当父节点不是根节点时 你可以 使用相同的jointTransforms 列表访问父节点的转换 但需要使用 parentIndex来做索引 就是这些了 它为你提供整个层级中对应的 每个孩子 当你在层级中有了每个孩子和父亲 的配对 你就有了骨架的整个层级
你现在可以随时使用它 那么 我们来运行这段代码 使用它 我们来简单画一下这个骨架 来看它是什么样子
这是它的样子 我们所做的是 我们获取了整个层级 我们获取了所有的父亲和孩子的点 我们只是画了骨架 就是这样 它开始自动地模仿人了 这是你能做的最基本的事情 因为只要你有了 整个骨架层级 你可以使用它用在多种使用案例上 就如我们之前讲的那样 无论你的想象力把你带到哪里 你都可以用这个技术来实现
到现在为止 我们只了解了 世界坐标系中的3D物体 但 如果你想要平面空间的 2D版本的骨架 我们也有一个API能实现 这里 我们为你提供了在二维空间 访问每个元素详细的入口
我们也在一般的平面空间 提供了所有骨架关节点
使用这个API同样非常简单
你可以使用它做语义图片分析 或者为图片和视屏创建编辑工具
最后 整个结构都连接了一个物体 叫做ARBody2D
这就是视觉上ARBody2D 物件的样子 ARBody2D物件包含了整个 骨架的结构
这就是结构的样子 所以你在上面有了这个物件本身 接着 还是和3D响应的 所有骨架的元素 都在物件的下面
我们来看一下这个结构 快速了解这些元素
从上面的ARBody2D物件开始
你有两种访问这个物件的方式 如果你已经在二维空间了 默认访问它的方式是通过 vARFrame 你可以使用ARFrame的 detectedBody属性来实现
这里 这个人是ARBody2D物件 的一个实例
为了你使用方便 如果你在使用3D空间 因为某些原因 如果你已经在做一个3D的骨架了 你也想要二维空间对应的2D骨架 通过使用ARBodyAnchor的 referenceBody属性 我们为你提供了一个 直接的方式来访问
它也会为你返回 ARBody2D物件
访问完ARBody2D物件时 我们可以使用骨架的属性 从中取出骨架
这就是那个骨架的视觉图
就像我说过的 这个骨架画在了一般的二维空间里 所以 如果这是你的图像网格 左上的坐标是0,0 右下是1,1 示例图中的所有位置坐标都 在0到1之间 x和y方向都是
你看到的绿色的点被称为标记点 请注意 我们在这里并不称他们为 关节点 虽然它们代表着关节 我们称它们为标记点的原因是 因为它们是图片上的像素坐标
和3D版本一样 它包含一个 definition对象 描述哪一个标记点在骨架中被调用 以及如何连接这些标记点
在这个骨架中 有16个关节点 和3D类似 它们具有语义上有意义 的名字 比如左肩 右肩 左手和右手等等 根节点还在髋关节这里 还是和3D非常类似
那么 请关注右手 我们看到这只手是右胳膊肘 的一个孩子 胳膊肘是右肩的一个孩子 再一次 这和你在3D版本中看到的 父子关系类似 这个类似的层级关系在这里构成
那么 了解了所有的信息 现在我们来快速通过代码 了解一下这个结构
我们从访问ARBody2D物件开始
所以 只要你有了ARFRame 你就能使用detectedBody属性 来获取ARBody2D物件 现在 只要你有了ARBody2D物件 你就能访问整个内部的骨架结构 你可以通过使用person.skeleton 来提取几何体 现在 person指向了ARBody2D 物件 骨架的definition再一次包含了 所有关节点的名字 和如何连接这些关节点的信息 它在definition中被展示 你可以通过使用骨架的 definition属性来访问它
只要你有了这些信息 你可能需要知道这些标记点 的定位在哪里 和3D版本类似 我们有一个叫做 jointLandmarks属性 它提供了你看到的所有绿色点的 坐标列表 但请注意 这里的绿色的点都是 2D的 所以它们处于二维空间 它们是标准的像素坐标
只要你有了那个列表 你可以遍历所有的这些标记点 对于每一个标记点来说 你通过调用definition的 parentIndices属性 来访问它的父节点 再一次 只需检查它的父节点是否为 根节点 因为根节点处于点的层级中的最顶层 如果父节点不是根节点 你可以通过 jointLandmarks 列表访问它的转换 使用parentIndex来索引 这种方式下 你在骨架层级中 有了每个父子对的转换 如果你想的话 你可以再一次使用它 你可以在这里继续完成你想做的事
我们来总结一下
我们介绍了今年AR的动作捕捉
我们提供了实时追踪人的访问 方式
我们同时提供了3D和2D骨架 这就是我们连接人体姿势的方式
我们支持了立刻同步的角色动画 它在RealityKit中 运行平稳
我们有了一个之前讨论过的 RealityKit API 来快速让角色动起来 就像我之前提到的 你也可以使用你自定义的角色 只要它是基于我们提供的示例结构 构建的
我们介绍了一个你可能会想到的 用于识别任务或分析任务 的高阶用法的ARKit API
今天的演讲就要结束了 我们介绍了两个功能 真人遮挡剔除和动作捕捉 我们为这些功能都提供了API
了解今天演讲的更多信息 请访问我们的网站 请随意下载示例代码并使用它 我们明天会在实验室 你可以带着你的问题来找我们
谢谢
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。