OptiTrack Unity 插件
概述
OptiTrack Unity3D 插件允许您将实时刚体、骨架和 HMD 跟踪数据从 Motive 流式传输到 Unity。使用流式数据,可以对场景中的对象和角色进行动画处理。插件内容以 unitypackage 格式分发,您只需将此文件加载到 Unity 项目中即可导入其内容。导入后,包含的 C# 脚本可用于实例化客户端源和接收跟踪数据。本文重点介绍如何设置和使用插件。
版本要求
- Unity 2022 LTS 到 Unity 6 LTS(使用Unity2019.4.20f1c1进行测试)
- Visual Studio 2019 或最新的 Visual C++ 可再发行组件
将跟踪数据流式传输到 Unity。
Motive 设置(服务器)
流式处理设置
从Motive,跟踪数据可以实时流式传输,无论是实时捕获(实时模式)还是录制的数据(编辑模式)。设置在 Application Settings 的 Streaming Settings 选项卡上进行配置。
在 Motive 中流式传输
单击 Control Deck 右下角的按钮打开 流设置.配置以下设置:
- 启用 - 打开 NatNet 部分顶部的 Enable 设置。
- 本地接口 - 从此下拉列表中选择所需的 IP 网络地址以流式传输数据。
- 传输类型
- 单播仅订阅所选数据,并且通常使用较少的网络带宽。当仅流式传输刚体和/或骨架时,请使用此方法*。* 如果通过 WiFi 流式传输数据,则尤其建议这样做。
- 流式传输 Trained Markersets 时需要多播传输。此方法需要更多带宽,因此我们建议仅启用所需的数据类型。例如,在跟踪 HMD 时,我们建议禁用 Marker 流。
其他流媒体提示
- 要从编辑模式流式传输数据,必须在 Motive 中播放捕获记录。
- 我们建议在不同的计算机上运行 Motive 和 Unity,这样应用程序就不会争夺处理资源。
- 通过 WiFi 网络流式传输数据时,必须使用单播传输。
Unity 设置(客户端)
导入插件包
在 Unity 项目中,双击插件 unitypackage 文件并将插件资源导入到项目中。成功导入包后,项目中将提供以下内容:
插件内容
文件夹 | 内容描述 |
---|---|
Assets/OptiTrack | 所有 Unity 插件内容都包含在此文件夹中。 |
Assets/OptiTrack/Scripts | 这是您将主要使用的文件夹。它包含插件 C# 脚本组件,这些组件可以导入到 Unity 对象中以接收流数据。 |
Assets/OptiTrack/Plugins | 此文件夹包含插件库和头文件。 |
Assets/OptiTrack/Prefabs | 这是最容易开始的地方。此文件夹包含用于设置流式客户端、跟踪刚体和重定向骨架的预制对象。 |
Assets/OptiTrack/Scenes | 此文件夹包含示例 Unity 场景,其中包括预配置的客户端、刚体和骨架对象。 |
设置 Client 对象
为了从服务器应用程序(例如 Motive)接收跟踪数据,必须设置客户端对象。OptitrackStreamingClient.cs 脚本可以附加到任何对象,以相对于该对象流式传输数据。通常,此脚本附加到空对象或使用文件夹中的 “Client - OptiTrack” 预制件对象加载。Assets/Optitrack/Prefabs
- **[Motive]**在 Streaming Settings (流式传输设置) 中,配置所需的连接设置。
- **[Unity]**在 Prefabs 文件夹下,将“Client - OptiTrack”预制件对象导入到场景中,或OptitrackStreamingClient.cs脚本附加到空对象上。
- **[Unity]**在流 Client 对象中,配置连接设置以匹配 Motive 中的流设置。
- 服务器地址 - 运行服务器应用程序 (Motive) 的 PC 的 IP 地址。
- 本地地址 - 运行客户端应用程序 (Unity) 的 PC 的本地 IP 地址。(通常,这看起来类似于 Server Address(服务器地址),但可能是最后一位数字。
- 连接类型 - 必须与 Motive 匹配。建议使用单播。
- **[Unity]**如果您希望从多个服务器实例接收跟踪数据,则可以创建多个附加了客户端脚本的对象。
Client 对象和相应的 Motive 数据流网络设置
在 Unity 中定位数据
尽管并非绝对必要,但您可能会发现将跟踪的对象组织为流式处理 Client 对象的子对象会很有帮助。这将允许您调整 Client 对象的位置,以调整所有流式对象相对于 Client 对象的位置。
在 Unity 中定位数据
使用过程
创建刚体
(1)将三个以上的反光球组成一组绑定在物体上,在
选择球体即可
(2)把物体放置好后,在Motive里框选物体上所有的光点,然后创建刚体。
刚体可以根据需要改名字,和ID。这里这个ID非常重要,把刚体的定位数据传输出去需要使用。
Active选上后才可以传输数据。
(3)打开流数据
Edit->setting->streaming
从Motive中,跟踪数据可以从实时捕获(实时模式)或录制的数据(编辑模式)实时流式传输。流式处理设置是通过修改 Streaming Settings (流式处理设置) 来配置的。必须启用 NatNet 流,并且必须设置正确的 IP 地址。
-
Enable - Turn on the Enable setting at the top of the NatNet section.
-
Local Interface - Choose the desired IP network address from this dropdown to stream data over.
-
Transmission Type - Typically you will want to set this to Unicast since it subscribes only to the data you wish to use and normally uses less network bandwidth. This is especially advised if streaming data over WiFi.
(最好调整为unicast)
在Unity里导入插件
1、添加Client - OptiTrack,在
由于是在本地,所以Local Address和Server Address不需要修改
2、在对应物体上添加同步Motive刚体位置信息的脚本OptitrackRigidBody:
注意:RigidBody Id要和Motive那边的刚体ID对应。
追踪刚体
刚体的枢轴点用于定义位置和方向。创建刚体时,默认情况下,其枢轴点放置在其几何中心,并且其方向轴将与全局坐标轴对齐。要在 3D 视区中查看枢轴点和方向,请在 Properties (属性) 窗格中所选刚体的显示设置下将 Pivot (枢轴) 和 Orientation (方向) 设置为 true。
(实际上并不是很重要,重要的是在unity中获取你需要追踪物体的position和rotation)
使用硬件参数
在实验中OptiTrack系统选用的摄像机型号为PX13