unity3d模拟电脑实现_ARKit实现人体动作捕捉功能
unity3d模拟电脑实现_ARKit实现⼈体动作捕捉功能
Apple 已经成为动作捕捉⾏业的新玩家!可以说,其推出的 ARKit 将和移动设备 Kinect 相媲美。⼈物遮挡功能以及动作预测是 ARKit 框架的核⼼部分。本部分向你展⽰如何利⽤ iPhone 和 iPad 设备开发动作捕捉应⽤程序。
前提条件
因为我们开发的是 Apple 系统的应⽤,所以需要使⽤ Mac 计算机开发应⽤程序并利⽤ iOS 设备运⾏它们。
家用空调选那种好
硬件
在硬件⽅⾯,你需要⼀个兼容 MacOS Catalina 系统的 MacOS 计算机。此外,动作捕捉应⽤程序需要 Apple A12 仿⽣处理器(Apple
A12 Bionic processors)才能正常运⾏。以下 Mac 计算机和 iOS 设备都需要具备的开发条件:
对于这个指南,我使⽤的是⼀台 Mac Mini 主机和⼀个 11 ⼨ iPad Pro。
软件
为了运⾏顺利,您需要在您的 Mac 电脑中安装如下软件:
Unity3D 2019 mac 2019.1.5f1
MacOS Catalina 10.15 (Beta)
XCode 11 (Beta)
您的 IOS 设备需要更新⾄ iOS 13 (Beta)系统或者 iPadOS 13(Beta)系统。
正如你所看到的,在编写这篇⽂章时,⼤多数软件都是测试版(Beta)。请记住,设备可能会变得不稳定或⽆响应,因此要特别⼩⼼,不要丢失有价值的数据。新的⽂章将伴随着 ARKit3、iOS13 和 MacOS10.15 的公开发布。
如果你着急,请在 GitHub 上下载完整的源代码(代码地址:github/LightBuzz/Body-Tracking-ARKit )。
继续阅读,了解如何创建⾃⼰的动作捕捉应⽤程序!
详细步骤
说的⾜够多了…让我们驶⼊ ARKit 的魔法世界吧。在你的电脑上,打开 Unity3D 2019.1 并且创建⼀个新的⼯程⽂件。繁体qq个性签名
步骤⼀:设置主要的场景
Unity3D 将从⼀个空场景开始。在添加任何视觉对象(visual objects)或编写任何代码之前,我们⾸先需要导⼊适当的资源包(dependencies)。⾻架跟踪功能是 ARKit ⼯具包的⼀部分。因此,我们需要导⼊ ARKit 和 ARFoundation 依赖包。
现在,创建⼀个新场景并添加 AR Session 和 AR Session Origin 对象(在 Unity 中创造 AR 场景,⾸先做的都是这两件事情)。这些对象控制 iOS 相机的同时也会提供⼤量的 ARKit 其他体验功能。
另外,添加⼀个空的游戏对象,例如命名它为:Human Body Tracking,并附加⼀个新的 C#脚本(HumanBodyTracking.cs)。
场景的结构看起来是这样的:
泡凤爪步骤⼆:设置⾻架
视觉元素已经到位,我们现在可以开始添加⼀些交互性。打开HumanBodyTracking.cs脚本,引⽤AR
房屋赠与税HumanBodyManager 类。ARHuman Body Manager 是分析摄像机数据以检测⼈体的主要脚本。代码如下:
[SerializeField] private ARHumanBodyManager humanBodyManager;
为了显⽰关节,我们将使⽤⼀些简单的 Unity3D 球体材质。每个球体将对应于特定的关节模式。添加⼀个 C# Dictionary 类,以逐帧(frame-by-frame)更新关节数据。代码如下:
private Dictionary bodyJoints;
最后,添加对⾻架的⽤户界⾯元素的引⽤。我们需要球体材质作为关节,线材质作为⾻骼。代码如下:
[SerializeField] private GameObject jointPrefab;[SerializeField] private GameObject lineRendererPrefab;private LineRenderer[] lineRenderers;private Tran
你可以在 GitHub 上到 HumanBodyTracking.cs 这个类完整的 C#代码。(GitHub 地址:github/LightBuzz/Body-Tracking-ARKit/blob/master/body-tracking-arkit/Assets/Scripts/HumanBodyTracking.cs )
步骤三:动作捕捉检测
红包数字这是教程中最重要的部分!ARKit 已经使动作捕捉变得⾮常容易实现。你所需要的就是⽤ ARHumanBodyManger 对象并且订阅到humanBidiesChanged 事件。
private void OnEnable(){    humanBodyManager.humanBodiesChanged += OnHumanBodiesChanged;}private void OnDisable(){    humanBodyManager.h humanBidiesChanged 事件就好像是实现动作捕捉功能的咒语。动作捕捉的信息是事件参数的⼀部分。下⾯将告诉您如何获取动作:private void OnHumanBodiesChanged(ARHumanBodiesChangedEventArgs eventArgs){    foreach (ARHumanBody humanBody in eventArgs.added)    {  很简单,对不对?所以,让我们完成以上操作,并在先前创建的 Unity ⽤户界⾯中显⽰⾻架。
注意:笔者在写这篇⽂章时,ARKit 仅仅⽀持单个⼈物的动作捕捉。
步骤四:展⽰⾻架
以下的代码会更新相机中关节的位置。在 iOS 相机摄像头中,球体材质和线材质都会被覆盖(overlayed)。
private void UpdateBody(ARHumanBody arBody){    if (jointPrefab == null) return;    if (arBody == null) return;    if (ansform == null) return;    Initia
Apple ⽀持 92 种关联模式(指数)。然⽽,不是所有的关联模式都能被追踪到!⼤多数是根据它们相邻关节的位置推断出来的。为了您的⽅便,我选择了 14 种关联模式,这样能够和 Kinect 相机公平⽐较。下⾯是如何连接合适的关节并形成⼈体⾻骼的代码:
private void InitializeObjects(Transform arBodyT){    if (bodyJoints == null)    {        bodyJoints = new Dictionary        {            { JointIndices3D.head_joint, In ARKit 会给我们在 3D 空间中,关节的位置以及旋转度!下⾯代码中反映出在 2D 界⾯中是如何更新坐标,位置和球体的旋转:
private void UpdateJointTransform(Transform jointT, XRHumanBodyJoint bodyJoint){    jointT.localScale = bodyJoint.anchorScale;    jointT.localRotation =现在!就让我们建⽴并运⾏我们的⼯程在实际的 iOS 设备中吧!
步骤五:建⽴并部署应⽤
春望原文及翻译最后,我们需要在实际的设备中建⽴和运⾏⼯程。ARKit 是 IOS 和 IpadOS 的⼀部分,我们不能测试我们的代码在 MacOS 中(尽管我很想看到这样⼀款模拟器。
在 Unity 中,选择File->Build Settings。点击 iOS 建⽴⽬标并点击Build键。你将需要指定⼀个位置去存储所⽣成的⼯程,并耐⼼等待直
到 Unity 完成搭建过程。
Unity 将创造⼀个 XCode ⼯程(.xcodeproj)。⽤ XCode 11 Beta 打开这个⼯程。如果您使⽤ XCode11 Beta 之前的版本,将会有⼀个
错误提⽰并且⼯程⽆法正常运⾏。
当这个⼯程被发布后,需要提供你的 iOS 开发证书,连接你的 iOS 13 设备,并且点击 Run 键。这样,这个项⽬将会被部署在设备中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。