Perception Nueron検証その②Unity内Mecanimモデルとリアルタイムで同期しよう。

Perception Nueron検証その②Unity内Mecanimモデルとリアルタイムで同期しよう。
  • このエントリーをはてなブックマークに追加

Dverse Inc.R&D部のタイラです。

今回も前回に引き続きPerception Neuronの検証です。トップ画は電話を掛けている風のUnityちゃん。

こちらの記事は全3回となっています。興味のある方は下記の記事も併せてもご覧下さい。

Perception Nueron検証その②Unity内Mecanimモデルとリアルタイムで同期しよう。 | DVERSE Inc.

今回の目標

Unity内でMecanimモデルとリアルタイムで同期する

参考になる動画

まずはこちらの動画を見ましょう。

動画の通りにやれば全てうまくいくはず。
大事なのは SettingsのBroadcastingの設定ですね。

Axis Neuron Broadcasting

なんだ楽勝じゃん。と思ったのですが問題が発生。
Neuron側が用意してくれているモデルでは問題ないのですがそこからその他モデル、例えばユニティちゃんに変更した時に問題が発生しました。

Neuronオリジナルモデルは問題なく動作するのにUnityちゃんはなんの生き物なのか分かららないこんな姿に。
Neuronオリジナルモデルは問題なく動作するのにUnityちゃんはなんの生き物なのか分かららないこんな姿に。

調べてみたら下記の記事を発見致しました。皆さん同じ問題にぶち当たるのですね。
記事は非常に分かりやすかったです。ありがとうございます。

何が問題なのか?

上記のブログにもあるのですが、ドキュメントにある内容が重要なのでこちらにも転載させて頂きます。

The following is a guide for how to configure a new character model to receive real-time
motion data by Perception Neuron. Before we start you need to be aware of a few things:

  1. 1. Your model needs to be rigged on a humanoid skeleton.
  2. 2. The bones of your rig can not have any existing rotations in them and their axis orientation needs to be identical with Unity’s axis system.
  3. 3. Your model needs to be rigged in a T-Pose.
  4. 4. If you’re model is not rigged with our skeleton setup you can only use real-time motion data without displacement for now.

日本語に意訳します。

以下ではあなたのモデルを動かすために、Perception Neuronを使ってリアルタイムのモーションデータを受信する方法を説明します。始める前に、いくつかの注意です。

  1. 1. モデルはHumanoid SkeletonへのRigがついていること
  2. 2. Rigの各ボーンはRotationが0でなければならず、軸の方向はUnityの座標軸と一致していること
  3. 3. モデルはTポーズの形でRigづけされてること
  4. 4. もし私たちが指定した方法でスケルトンが調整されていない場合、現時点ではDisplacement無しの状態でしかモデルを動かせません。

1番は当然として大事なのは2番と3番。3番に関してはUnity Asset Storeで購入したモデルはAポーズのものが多いのでそれらを使用したい場合はUnity内で修正してあげる必要があります。
問題は2番で、これを満たすには専用のモデルを作成しなくてはならず、これはでは汎用的とは言えません。
という事で上記のブログで行っている座標変換を行ってみました。

座標変換の結果1

Neuronモデルと一緒に体操をするUnityちゃん

うまくいった!!!アキレス腱伸ばしてみました。
もともとNeuronについているNeuron Toolの機能も使えました。素晴らしい。しかしこれも少々問題が残ります。

  1. 1.スクリプトはNeuronの元のモデルの動きをコピーするようになっているためもとのモデルが必要。非表示にする事は出来る。スクリプトを改造するか?
  2. 2.ジャンプが出来ない。
  3. 3.位置の移動が出来ない。
  4. 4.指の動きまでは対応していない。
1はどうにかなるとしても今回は2,3には対応したかったので調べていたら、更に似たような処理を行っているスクリプトを発見しました。UnityのKeijiroさん作で1,2,3の問題は起きないようです。

今度はこちらを試してみました。

座標変換の結果2

Axis Neuron And Unity

こちらの方が使い方がシンプル!上記で問題だった1番「スクリプトはNeuronの元のモデルの動きをコピーするようになっているためもとのモデルが必要」も必要ありません。
さらに2「ジャンプが出来ない」、3「位置の移動が出来ない」の問題もありません。しかしこれも完璧ではなく下記の課題が残ります。

  1. 1.指の動きまでは「まだ」対応していない。今後対応する予定がある?時間をかければ出来そう。
  2. 2.もともとNeuronが提供しているNeuron Toolが使えない。上記のスクリプトなら使えた。こちらも恐らく時間をかけて対応していけば出来ると思うのですが今回は特にNeuron Toolが必要では無かったので検証していません。

総括的な

という事で今回の目標である「Unity内Mecanimモデルとリアルタイムで同期する」為には上記のその2の方法
「A minimal subset of Perception Neuron SDK for Unity」
が一番適切でした。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*