来自Wiki
跳转至: 导航搜索
Main pageOptiTrack Unity Plugin

Streaming tracking data into Unity

插件概述

OptiTrack Unity3D插件可以让你从动机流实时刚体,骨架,HMD跟踪数据转换成统一。使用流数据,可以动画场景中的对象和字符。插件内容以unitypackage格式分发,您只需将此文件加载到Unity项目中即可导入其内容。导入后,可以将包含的C#脚本附加到Unity对象,以实例化客户端以接收跟踪数据。本文重点介绍如何设置和使用插件。

版本要求

  • Unity版本:2017.2 / 2017.1 / 5.4或以上。
  • Oculus SDK应与Unity版本兼容。

Info2.png

有关HMD兼容性的说明

  • 截至OptiTrack虚幻引擎4插件1.2.1,OptiTrack Oculus插件支持Oculus DK2,CV1和Gear VR HMD模型。
  • Vive HMD可以通过OptiTrack OpenVR驱动程序集成。

动机设置(服务器)


流式设置

文件:MotiveStreamingUnity 20.png
Motive中的数据流设置。

在Motive中,跟踪数据可以从实时捕获(实时模式)或记录捕获(编辑模式)实时传输。流设置在数据流窗格中配置,在该窗格中,必须启用广播帧数据,以便开始将数据流到本地接口部分的IP地址指定的本地网络接口。

为获得最佳性能,建议禁用不必要数据类型的流式传输。这将减少数据包的大小并简化客户端的解析过程。请确保在Motive中启用适当的数据类型以进行流式处理:

在Motive中流式传输

打开Data Streaming窗格并配置以下设置:

  • 在顶部启用广播帧数据设置
  • 从“本地接口下拉菜单中,选择要将数据流式传输到的网络地址。
  • 选择要在流选项下流式传输的所需数据类型。需要流动刚体。骨架流的骨架是骨架跟踪的可选项。为了跟踪HMD,建议禁用标记流。
  • 骨架坐标设置为本地
  • 在流式传输骨架时,请为客户端应用程序设置适当的骨骼命名约定。(如果角色使用FBX命名约定,则需要将其设置为FBX。)
  • 对于通过wifi网络进行流式传输,强烈建议将传输类型设置为单播。

Info2.png

其他提示

  • 为了从编辑模式流式传输数据,必须在Motive中播放捕获录音。
  • 为了获得最佳效果,建议在不同的计算机上单独运行Motive和Unreal Engine,这样它们就不会竞争处理资源。
  • 通过wifi网络传输数据时,必须使用单播传输。


Unity设置(客户端)


文件:UnityPluginFiles.png
Unity插件文件。

导入插件包

在Unity项目中,双击插件unitypackage文件并将插件资源导入到项目中。成功导入包后,项目中将提供以下内容:

插件内容
文件 内容描述
Assets/OptiTrack 所有Unity插件内容都包含在此文件夹中。
Assets/OptiTrack/Scripts 这是您将主要使用的文件夹。它包含插件C#脚本组件,可以导入Unity对象以接收流数据。
Assets/OptiTrack/Editor 此文件夹包含用于可视化刚体标记的编辑器脚本和内容。
Assets/OptiTrack/Plugins 此文件夹包含插件库和头文件。
Assets/OptiTrack/Prefabs 此文件夹包含样本客户端对象,骨架对象和HMD对象的预制件。
Assets/OptiTrack/Scenes 此文件夹包含示例Unity场景,其中包括预配置的客户端,刚体,骨架和HMD对象。

设置客户端对象

为了从服务器应用程序(例如Motive)接收跟踪数据,您需要创建一个客户端对象。客户端对象可以是Unity中场景中的任何对象,可以通过附加OptitrackStreamingClient.cs脚本来指定它。此脚本从连接的服务器应用程序(例如Motive)接收跟踪数据,并使数据在场景中可用。您可以将客户端脚本附加到现有对象或空对象上。此外,您只需从Assets/Optitrack/Prefabs文件夹中导入示例。

  • [Motive]Data Streaming窗格, 配置所需的连接设置并选中Broadcast Frame Data框。
  • [Unity] 在Prefabs文件夹下,将客户端预制对象导入场景,或者只需将OptitrackStreamingClient.cs脚本附加到现有对象上。
  • [Unity] 在Client对象中,从OptiTrack Streaming Client脚本配置连接设置,以便值(连接类型,本地地址,服务器地址,服务器命令端口,服务器数据端口)与Motive中Data Streaming窗格下的参数匹配。
  • 本地地址:运行客户端应用程序的PC的本地IP地址。
  • 服务器地址:运行服务器应用程序的PC的IP地址。
  • [Unity] 设置Bone Naming Convention类型,使其与Motive中设置的约定相匹配。
  • [Unity] 如果您希望从多个服务器实例接收跟踪数据,则可以创建附加了客户端脚本的多个对象。
文件:NetworkSettingsUnity 21.png
Unity中的客户端对象以及相应的Motive数据流网络设置。

Info2.png

在Unity中定位数据

流数据的位置组件将作为Unity中的参考位置接收。换句话说,如果对象位于Unity中层次结构的根级别,则流式位置将反映对象与其根对象或全局原点的相对位移。因此,尽管不是绝对必要,但您可能会发现将跟踪对象组织为公共游戏对象(例如客户端对象)的子对象有助于将其重新定位在Unity场景中以有效地确定位置追踪量原点。这样做可以更容易地在Unity中的场景中调整Motive的全局原点。

动画刚体

  1. [Unity] 在您希望设置动画的对象上,附加OpitrackRigidBody.cs脚本。
  2. [Unity]Streaming Client条目中,链接OptitrackStreamingClient.cs所连接的Client对象。默认情况下,它会搜索现有的客户端实例,但是,当场景中有多个流式客户端对象时,必须指定此实例。
  3. [Unity] 对于Rigid Body ID条目,在Motive中输入相应刚体资产的流ID。可以在刚体属性下找到并更改流ID 。
  4. [Motive] 确保Motive正在跟踪和流式传输数据。
  5. [Unity] 播放场景。链接对象将根据Motive中相关的刚体运动进行动画处理。
文件:RBObjectInUnity 20.png
OptiTrack Rigid Body配置以及Motive中的刚体属性。配置的流式传输ID必须与客户端指定的刚体ID相匹配。

动画骨架

通过与Unity的动画系统Mecanim集成,Unity3D插件允许Motive传输全身骨架数据。来自Motive的骨架跟踪数据作为分层骨段方向流出,并将此数据输入Unity的Mecanim系统,该系统允许以不同比例制作动画角色。

Info2.png

注意: 在撰写本文时,Mecanim在使用实时重定向时不支持反向运动学末端效应器的明确目标。此外,您可能会观察到重定向骨骼动画和流动刚体之间位置数据的整体比例差异。这两个限制可能导致演员与刚体道具交互时出现不一致,并且有望在未来版本的集成中得到解决。

步骤

  1. [Unity] 在Unity角色上,将OptitrackSkeletonAnimator.cs脚本作为其组件之一附加。
  2. [Unity] 对于Streaming Client条目,链接客户端脚本所附加的对象。默认情况下,它会搜索现有客户端实例,但必须在有多个流客户端对象时指定此实例。
  3. [Unity] 输入在Motive中分配的Skeleton Asset Name
  4. [Unity] 对于目标头像条目,链接到脚本加载到的字符。
  5. [Motive]Data Streaming窗格, 确保Motive是流式传输。
  6. [Unity] 播放场景。当一切设置正确时,Unity中的链接头像将根据Motive中的流式骨架进行动画处理。如上所述,演员的位置将处于其参考位置
文件:SKLObjectInUnity 20.png
来自Unity中角色的Optitrack Skeleton Animator脚本配置。

流式标记位置

  1. [Unity] 在OptiTrack Streaming实例上,启用Draw Markers设置。
  2. [Motive]Data Streaming中,启用标记的流式传输。在这里,您可以选择流式标记的标记,未标记的标记或两者。
  3. [Unity] 确保正确设置流媒体设置,然后播放场景。
  4. [Unity] 每个标记将在场景中绘制为球体对象,如下面的屏幕截图所示。
文件:MarkerObjectUnity 21.png
在Unity场景中绘制的骨架标记标记。

在Unity中集成HMD


该插件还具有用于虚拟现实体验的HMD跟踪集成。有关在Unity中开发VR应用程序的一般说明,请参阅Unity文档:Unity Virtual Reality 教程

Info2.png

支持Oculus DK2,CV1和Gear VR HMD型号

Oculus DK2, CV1

  1. [Motive] 首先,按照HMD跟踪设置部分,在Motive中准备HMD刚体。
  2. 确保HMD软件正在运行。
  3. [Unity] 在Unity项目中,从播放器设置(编辑→项目设置→播放器)中选中虚拟现实支持框,如下图所示。
  4. [Unity] 从导入的插件包的Prefabs文件夹(OptiTrack / Prefabs)中,将HMD预制件(HMD-OptiTrack)对象导入场景。
  5. [Unity]Streaming Client条目中,指定流媒体客户端所连接的对象。默认情况下,它会搜索现有客户端实例,但必须在有多个流客户端对象时指定此实例。
  6. [Unity] 对于Rigid Body ID条目,输入Motive中为HMD刚体给出的用户数据ID值。
  7. [Unity]Rigid Body Orientation条目,输入Motive中定义的刚体坐标轴的方向。
  8. [Unity] 播放场景。当HMD正确连接时,将从HMD可见场景。

Android: Gear VR

还可以集成Gear VR设备,并且可以使用具有足够带宽的路由器通过wifi连接来流式传输跟踪信息。所需带宽将根据许多因素(例如路由器类型,跟踪对象的数量等)而变化。有关此设置的更多具体信息,请与我们联系。除了使用插件开发Gear VR体验的上述HMD设置外,还必须配置以下设置。有关在Unity中开发Gear VR应用程序的更多信息,请参阅Unity文档。

设置

1. [Unity] 要在Unity中开发Android应用程序,请确保为Android开发设置了环境:Android开发入门。以下是一些重要步骤:

  • 文件 → 构建设置... → 安卓下载Unity Android软件包。
  • 将手机置于开发者模式。例如,在Samsung Galaxy上,转到设置 → 关于手机,然后多次点击内部版本号以显示开发人员选项。
  • 打开Gear VR服务 → 内存 → 开发者模式安装并启用开发人员模式。.


2. [Unity]Project/Assets/Plugins/Android/assets/目录中包含OSIG文件(oculus signature)。请参阅:Oculus签名文件生成器

3. [Unity] 打开播放器设置(编辑 → 项目设置 → 播放器),然后选中XR设置部分下的虚拟现实支持框。然后在Virtual Reality SDK列表下添加Oculus SDK,如下图所示。

4. [Unity]其他设置部分下的播放器设置中,还有一些其他选项需要设置:

  • 配置 → Internet访问 → 需求
  • 标识 → 包名 → com。[公司名称]。[产品名称]。这需要唯一的。
  • 标识 → 最低API级别 → (API level 19).


5. [Motive]数据流窗格下,将Advanced Settings下的Network Type设置设置为Unicast

Info2.png

注意: 该插件目前仅支持用于流式传输到Android的单播广播。

通过Wifi连接

1. [Motive] 将流式IP地址设置为路由器的IP地址。

2. [Android] 将智能手机连接到Motive要传输到的路由器。

3. [Unity] 配置客户端对象。这可以使用插件中包含的Client - OptiTrack预制件来完成。

  • 连接类型设置为单播。
  • 本地地址设置为手机的IP地址。通常可以在手机设置下找到本地地址。例如,三星Galaxy的IP地址可以在 设置 → 关于手机 → 状态 → IP地址"。对于某些手机,0.0.0.0的地址可能有效。
  • 服务器地址设置为路由器的IP地址,或者主机PC(服务器)将数据流式传输到的IP地址。当智能手机连接到跟踪服务器的wifi路由器时,也可以在手机设置下找到此地址。

4. [Unity] 配置HMD对象。

  • 将“HMD - OptiTrack”预制件拖动到场景中。
  • 将Client对象拖到Streaming Client属性中。
  • 将刚体ID设置为您在Motive中用作HMD的任何刚体的流ID。

5. [Unity] 将智能手机连接到PC,构建并运行项目。确保为Unity应用程序提供网络权限。

6. [Motive] 仔细检查Motive是否流式传输。如果一切设置正确,Motive将向手机提供跟踪数据。

HMD跟踪设置


首先,按照入门指南硬件设置文档中的说明设置和优化动作捕捉卷。如果您计划在捕获体积内安装任何障碍物(例如墙壁),请确保它们不反光,并放置和定向摄像机,以便多个摄像机可以完全捕获每个角落。对于典型的刚体跟踪,请按照刚体跟踪页面中的说明连接刚体标记。

一般设置步骤

  1. 将标记贴在HMD上
  2. 创建一个刚体资产
  3. 校准刚体的枢轴点
  4. 在Motive中配置刚体设置

标记附件

有两种不同类型的标记可用于使用OptiTrack系统跟踪对象:被动标记和活动标记。被动标记是逆向反射标记,反射从摄像机上的IR LED发出的红外光。另一方面,有源标记是发射IR光的LED标记。两种类型的标记都可用于跟踪HMD。

使用适当的粘合剂和标记柱将标记牢固地连接到HMD。对于活动的标志,主动标签也必须以同样同步和电源指示灯连接。Oculus CV1 HMD可以使用活动的CV1夹子外壳轻松地在HMD上放置8个活动标记。根据您用于跟踪HMD的标记,设置说明会略有不同。

Oculus CV1 HMD夹子

活动的标记

附件和安置 使用HMD支架,只需将有源标记支架连接到CV1 HMD上,并使用其上的有源标记来定义刚体。

当使用活动标记时,标记被单独地从它们自己独特的照明模式中单独地标记,并且只有匹配的活动标记被贡献给刚体解决。单个标签的最大好处是标记可以放置在多个刚体资产中完美对称的位置。

文件:VR ActiveMarkerHMD.png
具有被动标记的HMD标记
文件:HMDBracket.png
打开HMD支架
文件:HMDBracketDetach.png
从HMD上拆下支架时,首先将支架后面的两个闩锁向上拉,然后从顶部慢慢拉出。

Passive Markers

被动标记

附件 安装逆向反射标记时,请确保标记牢固连接并可由摄像机轻松捕获。为了连接标记,我们建议在网上商店使用我们的20毫米宽和30毫米高的M4螺纹塑料标记基座和丙烯酸粘合剂,将标记贴在HMD上。

文件:VR PassiveMarkerHMD.png
具有被动标记的HMD标记

放置 一个市场化的HMD将被定义为Motive中的一个刚体。放置标记时,请确保在HMD内的布置中遵守放置不对称性。此外,多个HMD之间的标记排列必须是不一致的。有关更多详细信息,请阅读刚体追踪页面中的标记放置。

创建一个HMD刚体

具有活动夹子的HMD

创建活动夹子HMD

此功能仅可用于安装了OptiTrack活动夹子的HMD

为了将OptiTrack系统用于VR应用,重要的是将HMD刚体的枢轴点放置在适当的位置,该位置位于眼睛之间的鼻根处。使用HMD剪辑时,您可以使用“构建器”窗格中的HMD创建工具让Motive估计此点并相应地放置轴心点。它利用夹子上的已知标记配置来精确定位枢轴点并设置所需的方向。

Info2.png

具有被动标记的HMD可以利用外部枢轴对准工具来校准枢轴点。

Creating an HMD rigid body in the Builder pane.

步骤

  1. 首先,确保Motive配置为跟踪活动标记.
  2. 视图选项卡下打开构建器窗格,然后单击刚体
  3. 类型下拉菜单下,选择HMD。这将提出定义HMD刚体的选项。
  4. 在方向下拉菜单下,选择所需的HMD方向。用于流式传输到Unity的方向是+ Z forward,而虚幻引擎是+ X forward,或者您也可以在客户端插件端指定预期的方向轴。
  5. 将HMD保持在跟踪体积的中心,可以很好地跟踪所有活动标记。
  6. 3D视口中选择8个活动标记。
  7. 点击创建,将从所选标记创建HMD刚体,并将启动校准过程。
  8. 在校准期间,缓慢旋转HMD以收集不同方向的数据样本。
  9. 一旦收集了所有必要的样品,将创建校准的HMD刚体。

具有附加标记的HMD

从标记创建HMD

在Motive中,选择附加到HMD的标记并创建刚体(热键:CTRL + T),就像对其他刚体一样。设置完成后,使用构建器窗格中的 外部枢轴对齐工具(刚体→编辑)来校准创建的刚体的轴心点:

为了将OptiTrack系统用于VR应用,重要的是将HMD刚体的枢轴点放置在适当的位置,该位置位于眼睛之间的鼻根处。外部枢轴对齐工具利用OptiTrack mocap系统和HMD自己的跟踪系统(Oculus Tracker / Vive基站)来精确计算HMD枢轴点的位置。使用此功能时,两个系统必须同时跟踪HMD。

Info2.png

HMD兼容性说明:

  • 对于Motive版本2.1 Final和更高版本:支持Oculus和Vive HMD。
  • 对于早期版本的Motive:仅支持Oculus HMD。
  • 相应的原生HMD跟踪器必须同时跟踪HMD以及运动捕捉系统。
  • 对于CV1主动HMD剪辑,将单独提供刚体定义。

步骤

  1. 首先,连接HMD Tracker(Oculus Tracker / Vive基站)并在后台运行相应的软件。
  2. 启动Motive。
  3. [Motive] 从HMD上的标记创建刚体资产。
  4. [Motive] 打开Builder窗格并访问刚体的编辑选项。
  5. [Motive] 在Motive中选择HMD刚体。
  6. [Motive → Builder pane] 在Detected Type下,它应指明您将使用的HMD类型。
  7. [Motive → Builder pane] 设置所需的样品计数(默认值:750)和所需的方向。
  8. [Motive → Builder pane] 按开始启动采样过程。
  9. [Motive → Builder pane] 在校准期间,确保mocap系统和HMD跟踪器(Oculus Tracker / Vive基站)正在跟踪HMD。
  10. [Motive → Builder pane] 一旦开始收集样本,将HMD指向跟踪器并缓慢旋转它并采样不同的方向。
  11. [Motive → Builder pane] 当完成采集样本时,它将显示由HMD跟踪系统和动作捕捉系统检测到的枢轴点位置之间的偏移距离(mm)。
  12. [Motive → Builder pane] 如果结果令人满意,请按应用以校准HMD刚体。

刚体属性

创建刚体后,选择资源并打开属性窗格。需要为HMD跟踪配置以下设置。

偏转 偏转设置是以毫米为单位的可容许距离,刚体标记在未标记且与刚体无关之前可能偏离其预期位置。偏差默认设置为4 mm。对于HMD跟踪应用程序,我们建议将此值降低到3或2.这将减少标记所需的计算量,并且可以减少总体延迟。 跟踪算法 跟踪算法设置确定在Motive中用于解决刚体的协议。

被动标记

对具有被动标记的HMD使用基于光线的跟踪算法。建议使用此算法,因为它允许跟踪不易受标记遮挡的影响,并且在不引入轨迹间隙的情况下更加稳健地求解刚体。使用基于射线的求解会增加处理负荷,但由于它可以很好地稳定跟踪,因此更适合跟踪被动标记HMD,即使是较小的遮挡也会严重影响体验。

文件:VR HMDProperties 20.png
HMD资产的刚体属性。

积极标记

使用活动标记剪辑为HMD使用基于标记的跟踪算法。基于射线的跟踪不支持活动标记,因为活动标记本身已经使用独特的照明模式从活动标记提供稳定的跟踪。因此,基于标记的跟踪将为具有活动标记的HMD提供稳健的跟踪。

流式传输ID 每个刚体的“用户数据”值用作标识号,以引用外部应用程序中的刚体。记录场景中每个刚体(包括HMD)的此值。此编号将用于使用插件设备关联客户端应用程序中的资产。

最小标记计数(仅限被动标记) 在使用被动标记跟踪HMD时,可能需要修改此设置。要防止更换刚体定义,请将此设置设置为4.在跟踪多个HMD时,可能会对可实现的各种独特标记排列进行限制。如果该值被设置为较低值,则HMD上的一组三个标记可以与另一个HMD中的另一个组一致,并且可以在Motive中切换刚体定义。

重新校准枢轴点

在为HMD创建刚体定义之后,刚体枢轴点的位置和方向应精确地放置在玩家鼻子的根部上,相应的定向轴指向前方。如果需要,可以使用构建器窗格编辑工具重新校准HMD轴点位置。

  • 枢轴点放在鼻梁上; 特别是,正好在两只眼睛之间的中点。
  • 刚体的定向轴应与物理HMD部件精确对准。
文件:UncalibratedHMD 20.png
未校准的HMD刚体定义。枢轴点未定位或定向不正确。
文件:CalibratedHMD 20.png
校准的HMD刚体定义。用于UE4集成的x轴前进。

手动校准HMD枢轴点 在大多数情况下,您将使用先前描述的校准工具来精确定位和定向HMD刚体。但是,如果由于某种原因,您想在不使用HMD校准功能的情况下手动定位轴心点,请按照此页面上的说明操作:手动校准HMD轴点

文件:HMDSetup Active1 Unity.png
Buidler窗格HMD校准标签。

出口刚体

Info2.png

提示: 配置HMD的刚体资产后,可以将资产导出到TRA文件中以供将来使用。导入TRA文件(例如CV1.tra)将加载刚体(HMD)资产并使其可供使用; 但是,标记放置必须保持不变,以便重新加载以前创建的刚体。

文件:UnityPluginFiles.png
Unity plugin files.

直播


连接客户端对象并在场景中的资源上配置脚本组件后。播放场景,如果属性配置正确,游戏场景中的资源将根据刚体的位置和方向以及Motive中的HMD进行动画处理。在播放场景时,HMD和指定的actor对象将放置在Motive坐标系中的位置,忽略它们在编辑器中的位置。

无线多人游戏设置


在使用无线客户端设置多人游戏时,每个客户端直接连接到跟踪服务器(Motive)和游戏服务器更有利,而不是通过游戏服务器重新广播流式跟踪数据。然后,可以在游戏服务器上处理与跟踪数据交互的任何游戏相关动作,并且该服务器可以向无线客户端发送相应的更新。这允许无线客户端仅接收跟踪数据或更新,而不必发回任何信息; 换句话说,最小化所需的数据传输次数。如果无线客户端正在发送数据,则无线网络上将至少进行两次传输,并且每次通过无线网络传输数据都存在延迟或丢失数据包的风险。