![122b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/122b06ce-4813-eb11-8da9-e4434bdf6706.png)
(题图与文章无关)
上次为大家介绍了使用 Vive 做 Vtuber,其中用到 FinalIK 作为 IK(Inverse Kinematics,反向运动学)的方案。除了 FinalIK 之外,IKINEMA 的 Orion 也是常用的 IK 中间件。IKINEMA 深耕 IK 十多年,合作伙伴几乎覆盖所有游戏大厂,2017 年推出的 Orion 基于 Vive Tracker,硬件成本大大降低,效果也很不错,使得独立开发者也有机会在工作中体会到动捕带来的便利。
今天我们就来用 Orion 在 Unity 中进行全身动捕。由于我们只是演示 Orion 的功能,所以你并不需要 Vive Tracker。最终结果如下(左侧是 Orion 画面,右侧是 Unity 画面)。
![222b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/222b06ce-4813-eb11-8da9-e4434bdf6706.png)
让我们开始吧。
导入 IKINEMA Orion
Orion 可至官网下载。
https://ikinema.com/orion
提供 14 天的试用。试用期之后每年授权费 400 英镑,要注意的是授权是绑定席位的,意味着一次授权只能在一台电脑上使用。
安装 Orion 后,新建一个 Unity 项目,并且将 Orion 安装目录下 UnityStream/Assets 下的这些文件复制到我们的项目中。
![442b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/442b06ce-4813-eb11-8da9-e4434bdf6706.png)
另外我们还需将 IKinema OrionIKinemaMaleIKinemaMale.unitypackage 导入我们的项目。
Orion 功能简介
启动 Orion 后出现如下界面。
![552b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/552b06ce-4813-eb11-8da9-e4434bdf6706.png)
图中红框部分用于选择我们的 Vive Track 配置,Orion 支持十多种佩戴方式,可以根据 Tracker 数量以及是否需要佩戴头显选择适合自己的。
https://ikinema.com/index.php?mod=documentation&show=317&id=351
Options 中有几个 tab 比较重要。其中之一是 Input 选项。
![5c2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/5c2b06ce-4813-eb11-8da9-e4434bdf6706.png)
用于选择是进行现场动捕,还是回放预先录制好的捕捉数据。回放便于我们调试与 Unity 或者 Unreal Engine 之间的协作。
Output 选项中可以指定输出端口,我们将在 Unity 中通过该端口接收数据,使用默认值即可。
![632b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/632b06ce-4813-eb11-8da9-e4434bdf6706.png)
另外一个常用选项是 Output Avatar。
![652b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p04.5ceimg.com/content/652b06ce-4813-eb11-8da9-e4434bdf6706.png)
这里的 Output Avatar 需要和你在引擎中使用的 Avatar 相同。这也是我们需要导入 IKinemaMale 的原因。
使用 IKinemaMale
将之前导入的 IKinameMale 拖动到场景中。
![732b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/732b06ce-4813-eb11-8da9-e4434bdf6706.png)
我们为其添加名为 IKINEMA VRPN 的组件。这个组件将负责从 Orion 接收数据。
![762b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/762b06ce-4813-eb11-8da9-e4434bdf6706.png)
所有设置保持默认即可。如果你之前在 Orion 的 Output 选项中修改了配置,则需要在这里做出相应的修改。
![792b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/792b06ce-4813-eb11-8da9-e4434bdf6706.png)
回到 Orion 中,我们在 Input 选项中选择回放。
![802b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/802b06ce-4813-eb11-8da9-e4434bdf6706.png)
之后点击开始按钮。
![842b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/842b06ce-4813-eb11-8da9-e4434bdf6706.png)
再开始预览我们的项目,我们场景中的 IKinemaMale 已经跟随 Orion 中的模型舞动了起来。
![892b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/892b06ce-4813-eb11-8da9-e4434bdf6706.png)
使用 UnityChan 模型
在 Orion 的 Output 选项中,我们可以看到 Orion 还支持 UnityChan 的 Avatar,让我们来试一下。
首先我们在这里下载 UnityChan 的数据包。
http://unity-chan.com/download/index.php
图中红色部分。
![8a2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/8a2b06ce-4813-eb11-8da9-e4434bdf6706.png)
导入项目后可能会发现系统报错。
![8f2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p04.5ceimg.com/content/8f2b06ce-4813-eb11-8da9-e4434bdf6706.png)
改为下面的代码即可。
using UnityEngine;
using System.Collections;
using System.Security;
将 UnityChan > Models 下的 unitychan fbx 拖动到项目中
![942b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/942b06ce-4813-eb11-8da9-e4434bdf6706.png)
同样添加 IKINEMA VRPN 组件,并保持默认值不变。
![9d2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/9d2b06ce-4813-eb11-8da9-e4434bdf6706.png)
在 Orion 的 Output Avatar 中选择 Unity-chan 并开始回放。
![9f2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p03.5ceimg.com/content/9f2b06ce-4813-eb11-8da9-e4434bdf6706.png)
预览我们的项目,你就可以看到类似我们文章开始的结果了。
保存 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 运营的。
![a52b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/a52b06ce-4813-eb11-8da9-e4434bdf6706.png)
扯的有点远。从 github 下载代码后,将其中 Assets > EasyMotionRecorder 下的所有文件复制到我们的项目即可。
我们首先将 IKinemaMale 的 Rig 调整为 Humanoid。
![a92b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/a92b06ce-4813-eb11-8da9-e4434bdf6706.png)
之后为场景中的 IKinemaMale 添加 Motion Data Record 组件。
![ab2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p05.5ceimg.com/content/ab2b06ce-4813-eb11-8da9-e4434bdf6706.png)
将组件中的 Animator 改为我们的 IKinemaMale,其他选项保持不变。
![b42b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p02.5ceimg.com/content/b42b06ce-4813-eb11-8da9-e4434bdf6706.png)
在 Orion 中回放动画,并且开始预览我们的项目。预览过程中按下 “R”以及“X”开始和结束录制。
之后,我们在 Resources 目录下可以看到动作数据。选中数据,并在 Inspector 上点击右键,我们可以导出选项。我们选择导出为 Humanoid 动画。
![bb2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p04.5ceimg.com/content/bb2b06ce-4813-eb11-8da9-e4434bdf6706.png)
之后,可以使用其他 Humanoid 模型预览导出的动画。
![bf2b06ce-4813-eb11-8da9-e4434bdf6706.png](http://p01.5ceimg.com/content/bf2b06ce-4813-eb11-8da9-e4434bdf6706.png)
这样我们便能将动作捕捉的数据用于我们的游戏或者动画中了。
以上大致介绍了 Orion 的用法。如果你已经拥有 Vive 的话,只需额外购买三个 Vive Tracker 以及 Orion 就可以获得一套过得去的全身动捕设备,比起诺亦腾 Perception Neuron 之类的便宜不少。
但是不知道大家注意到没有,除了每年 400 英镑的授权费之外,Orion 还有个坑,就是对于 Unity,它只支持 IKinemaMale,Unity-chan 等少数几个 avatar 的输出,这意味着,如果你想在场景中使用其他模型,将没法实时看到动作捕捉的结果。IKINEMA 可以将你自定义的模型添加到 Orion 中,但是需要收取 200 英镑一个的费用。这显然不是办法。下一次我们就来介绍另一种添加自定义模型的方法。