unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树


(题图与文章无关)

上次为大家介绍了使用 Vive 做 Vtuber,其中用到 FinalIK 作为 IK(Inverse Kinematics,反向运动学)的方案。除了 FinalIK 之外,IKINEMA 的 Orion 也是常用的 IK 中间件。IKINEMA 深耕 IK 十多年,合作伙伴几乎覆盖所有游戏大厂,2017 年推出的 Orion 基于 Vive Tracker,硬件成本大大降低,效果也很不错,使得独立开发者也有机会在工作中体会到动捕带来的便利。

今天我们就来用 Orion 在 Unity 中进行全身动捕。由于我们只是演示 Orion 的功能,所以你并不需要 Vive Tracker。最终结果如下(左侧是 Orion 画面,右侧是 Unity 画面)。


unity 如何将spine抛给lua unity怎么导入_数据_02


让我们开始吧。

导入 IKINEMA Orion

Orion 可至官网下载。

https://ikinema.com/orion

提供 14 天的试用。试用期之后每年授权费 400 英镑,要注意的是授权是绑定席位的,意味着一次授权只能在一台电脑上使用。

安装 Orion 后,新建一个 Unity 项目,并且将 Orion 安装目录下 UnityStream/Assets 下的这些文件复制到我们的项目中。


unity 如何将spine抛给lua unity怎么导入_github_03


另外我们还需将 IKinema OrionIKinemaMaleIKinemaMale.unitypackage 导入我们的项目。

Orion 功能简介

启动 Orion 后出现如下界面。


unity 如何将spine抛给lua unity怎么导入_文件复制_04


图中红框部分用于选择我们的 Vive Track 配置,Orion 支持十多种佩戴方式,可以根据 Tracker 数量以及是否需要佩戴头显选择适合自己的。

https://ikinema.com/index.php?mod=documentation&show=317&id=351

Options 中有几个 tab 比较重要。其中之一是 Input 选项。


unity 如何将spine抛给lua unity怎么导入_文件复制_05


用于选择是进行现场动捕,还是回放预先录制好的捕捉数据。回放便于我们调试与 Unity 或者 Unreal Engine 之间的协作。

Output 选项中可以指定输出端口,我们将在 Unity 中通过该端口接收数据,使用默认值即可。


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_06


另外一个常用选项是 Output Avatar。


unity 如何将spine抛给lua unity怎么导入_数据_07


这里的 Output Avatar 需要和你在引擎中使用的 Avatar 相同。这也是我们需要导入 IKinemaMale 的原因。

使用 IKinemaMale

将之前导入的 IKinameMale 拖动到场景中。


unity 如何将spine抛给lua unity怎么导入_数据_08


我们为其添加名为 IKINEMA VRPN 的组件。这个组件将负责从 Orion 接收数据。


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_09


所有设置保持默认即可。如果你之前在 Orion 的 Output 选项中修改了配置,则需要在这里做出相应的修改。


unity 如何将spine抛给lua unity怎么导入_unity 如何将spine抛给lua_10


回到 Orion 中,我们在 Input 选项中选择回放。


unity 如何将spine抛给lua unity怎么导入_github_11


之后点击开始按钮。


unity 如何将spine抛给lua unity怎么导入_github_12


再开始预览我们的项目,我们场景中的 IKinemaMale 已经跟随 Orion 中的模型舞动了起来。


unity 如何将spine抛给lua unity怎么导入_数据_13


使用 UnityChan 模型

在 Orion 的 Output 选项中,我们可以看到 Orion 还支持 UnityChan 的 Avatar,让我们来试一下。

首先我们在这里下载 UnityChan 的数据包。

http://unity-chan.com/download/index.php

图中红色部分。


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_14


导入项目后可能会发现系统报错。


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_15


改为下面的代码即可。


using UnityEngine;
using System.Collections;
using System.Security;


将 UnityChan > Models 下的 unitychan fbx 拖动到项目中


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_16


同样添加 IKINEMA VRPN 组件,并保持默认值不变。


unity 如何将spine抛给lua unity怎么导入_文件复制_17


在 Orion 的 Output Avatar 中选择 Unity-chan 并开始回放。


unity 如何将spine抛给lua unity怎么导入_文件复制_18


预览我们的项目,你就可以看到类似我们文章开始的结果了。

保存 Animation

现在我们的模型已经可以从 Orion 取得动作数据,但是除了实时演示之外,我们还需要把数据保存起来的方法,这样才能进一步使用。

在 Unity 中,保存动画数据常用以下两个插件

https://github.com/newyellow/Unity-Runtime-Animation-Recorder

https://assetstore.unity.com/packages/essentials/unity-recorder-94079

可惜它们都不支持 Humanoid 类型的动画。而为了在模型间共享动画,Humanoid 型是必须的。

这次我们将使用下面这个插件。

https://github.com/duo-inc/EasyMotionRecorder

作者是日本一家叫 ZIZAI 的公司,如果你对 VTuber 有所了解,可能听说过 ミライアカリ,就是 ZIZAI 运营的。


unity 如何将spine抛给lua unity怎么导入_文件复制_19


扯的有点远。从 github 下载代码后,将其中 Assets > EasyMotionRecorder 下的所有文件复制到我们的项目即可。

我们首先将 IKinemaMale 的 Rig 调整为 Humanoid。


unity 如何将spine抛给lua unity怎么导入_文件复制_20


之后为场景中的 IKinemaMale 添加 Motion Data Record 组件。


unity 如何将spine抛给lua unity怎么导入_github_21


将组件中的 Animator 改为我们的 IKinemaMale,其他选项保持不变。


unity 如何将spine抛给lua unity怎么导入_github_22


在 Orion 中回放动画,并且开始预览我们的项目。预览过程中按下 “R”以及“X”开始和结束录制。

之后,我们在 Resources 目录下可以看到动作数据。选中数据,并在 Inspector 上点击右键,我们可以导出选项。我们选择导出为 Humanoid 动画。


unity 如何将spine抛给lua unity怎么导入_unity怎么导入系统的树_23


之后,可以使用其他 Humanoid 模型预览导出的动画。


unity 如何将spine抛给lua unity怎么导入_数据_24


这样我们便能将动作捕捉的数据用于我们的游戏或者动画中了。

以上大致介绍了 Orion 的用法。如果你已经拥有 Vive 的话,只需额外购买三个 Vive Tracker 以及 Orion 就可以获得一套过得去的全身动捕设备,比起诺亦腾 Perception Neuron 之类的便宜不少。

但是不知道大家注意到没有,除了每年 400 英镑的授权费之外,Orion 还有个坑,就是对于 Unity,它只支持 IKinemaMale,Unity-chan 等少数几个 avatar 的输出,这意味着,如果你想在场景中使用其他模型,将没法实时看到动作捕捉的结果。IKINEMA 可以将你自定义的模型添加到 Orion 中,但是需要收取 200 英镑一个的费用。这显然不是办法。下一次我们就来介绍另一种添加自定义模型的方法。