Perception Nueron検証その③HMDと同期してVR内で自分の身体を見よう。

Perception Nueron検証その③HMDと同期してVR内で自分の身体を見よう。
  • このエントリーをはてなブックマークに追加

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

さて前回に引き続き今回もPerception Neutronネタです。一応今回で最終回。
トップ画は社内デモをした時のもの。

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

Perception Nueron検証その③HMDと同期してVR内で自分の身体を見よう。 | DVERSE Inc.

今回の目標

Oculus RiftやHTC vive等のHMDと同期してVR内で自分の体の動作に付随するモデルを見よう。
出来ればルームスケールで歩き回ろう。

Oculus Rift CV1対応

さてNoitom社が提供してくれているUnity Integrationには「OVR Sample」というものがあります。
Unity Integrationはこちらから

これはOculus Rift用(DK2用に作られてるみたい)のサンプルとなっていて、今回の目標であるHMDとの同期用のサンプルです。
よし!これで簡単に目標達成出来るだろう。
さっそくOculus Rift CV1を接続して試してみましょう。

あれ、、、動かない。

少なくとも僕の環境では正しい挙動は確認出来ませんでした。
Unityのバージョンのせい?それともOculus Rift CV1が悪い?

サンプルが動かない原因

原因を探していた所こちらのサイトを見つけました。
こちら大変参考になりました。ありがとうございます。

上記のリンクにもあるようにPERCEPTION NEURON UNITY HANDBOOKの「HMD INTEGRATION」の章には下記のような記載があります。

  • 1.The rotation tracker of the HMD should always have priority. Don’t overwrite its rotation values with something else and don’t use the head rotation values from the Perception Neuron system.
  • 2.Don’t use the positional tracking of the HMD.
  • 3.Never parent the HMD cameras or GameObjects to the skeleton setup.

    ※「PERCEPTION NEURON UNITY HANDBOOK」の「HMD INTEGRATION」より引用

    意訳

    • 1.頭の回転はいつもHMDが重要度を持つべき。Perception Neuronからの値で上書きしてはいけない。
    • 2.ポジショントラッキングはHMDからの値は使わない。
      • そして以下にVR向けのシンプルなスクリプトが用意されています。
        Assets/NeuronExamples/OVRExample/NeuronOVRAdapter
        これは「OVR Sample」でも使われていました。

        PERCEPTION NEURON UNITY HANDBOOKには以下のように書かれています。

        • ● On every new frame we position the OVR Camera Rig to the same position as the head target object.
        • ● This target object is an empty GameObject inside the Head skeleton hierarchy. We use the target object to provide an easy way to define an offset and to set the correct position on the head.
        • ● Since we never change the rotation of the OVR Rig you need to reset its tracker once you have the HMD on your head.
        • This way the rig will be aligned correctly with your virtual body.
        • Make sure you’re facing forward when resetting the Oculus tracker. (Note: you need to code the reference to the OVRManager yourself in order to reset
          the OVR pose).

          ※「PERCEPTION NEURON UNITY HANDBOOK」の「HMD INTEGRATION」より引用

          意訳

          • ・毎フレームごとにOVR Camera Rigと同じポジションにヘッドターゲットオブジェクトをポジショニングする。
          • ・このターゲットとなるオブジェクトは空のゲームオブジェクトでヘッドスケルトン階層の中に設置する。そのターゲットオブジェクトを現在の頭の位置を簡単に供給する方法として使用する。
          • ・このコードは消して、あなたがHMDを被っていたらOVR Rigの回転を変更しない。なので貴方は仮想の体と顔の向きを修正する必要がある。そのリセットの為のコードが貴方には必要である。
    上記を読む限りもともと用意されている「OVR Sample」は上記の条件に対応していない気がするのですが・・・途中で使用が変わった?

    検証用モデルの用意

    気を取り直して条件に沿うように上記のブログを参考に作業を進めます。
    さてモデルは前回行ったユニティちゃんを使用します。前回を読まれてない方はこちらをご覧下さい。

    検証用鏡の作成

    やはり鏡があった方が自分の動作が分かりやすくて面白いので用意する事にしました。
    鏡作成はAsset Storeで買っても良かったのですが、下記リンクの物で事足りそうだったのでこちらを利用させてい頂きました。

    検証の結果その①

    上記の記事に沿って作業を行った所、基本的にはうまくいったのですが1点上手くいかない所が。
    記事の内容ままではHMDの向きとモデルの向きが僕の環境では合わなかったです。
    そこで以下のようにスクリプトを修正しました。

    キャリブレーションする度にAxis Neuronの中の「前方」が変わってしまうので、今回はしぶしぶ都度修正する事にしました。
    展示等では使えないけど検証用には十分かなと。

    Perception Neuronはどうやって前方を認識しているのか?

    さてここで疑問が生まれます。
    今まで気になっていなかったのですがPerception Neuronは何を持って「前方」を認識しているのでしょうか?
    キャリブレーションの際に向く方向?と思って試してみてもうまく定める事が出来ませんでした。
    Axis Nueronの中に向きを修正するような機能があれば良いのですが僕の方ではそのような機能は確認出来ませんでした。
    そもそも本楽の用途にはいらないからなのか。

    HTC Vive対応

    さて今回の最終目標はOculus RiftではなくHTC Vive、つまりルームスケールで同期を行う事でした。
    そして上記で行っている方法であればHMDの種類に関係なく同じ要領でHMDとPerception Neuronの同期が出来るはず。
    という事で上記と同じ方法を試してみました。

    HTC vive対応にはAsset Storeから「SteamVR Plugin」をダウンロードして「Camera Rig」のprefabを置く事で対応しました。

    「Camera Rig」を使用する場合は「Camera Rig」直下に「CameraController」を作成。こちらのScaleを全て0にする事を忘れずに。その下に「Camera (head)」を配置しそこに「ResetOrientation」をアタッチしました。

    Perception Neuron HTC vive対応

    出来ましたーーー!
    因みに上記で行っているような「Camera Rig」を使用するケース以外で「SteamVR_Camera」を「Main Camera」にアタッチする方法でも問題なく動作しました。

    さてこうなったら対応させたいのがコントローラー。

    しかしHMDと同じ要領で出来るかなと一瞬思って試してみたのですが上手く出来ませんでした。
    HMDを起点として2つのコントローラーをIKで結んで上半身を再現して・・・それをPerception Neuronと同期して・・・とか考えたのですがなかなか難しそうなので今回は試してみていません。

    出来た事、出来てない事、分からない事

    • 出来た事

      ・HMDとPerception Nueronのリアルタイム同期。VRの中で自分の手足が見える。

    • 出来てない事

      ・リアルタイム同期を行っているスクリプトの関係で指はまだ動かせない。
      ・コントローラーの同期が使えない。

    • 分からない事

      ・Perception Neuronは何を持って前方を判断しているのか?現状はUnity側のスクリプトで調整している。

    総括

    Perception Neruonは基本的に展示会や体験会には向かない。特に今回行った方法では。
    問題は2点。

    • ・キャリブレーションがすぐずれる。もしかしたら解決策があるかも知れないが今回は見つける事が出来なかった。Neuron Doctorも動かない。
    • ・Axis Neuron内の位置が相対的で蓄積型であるため、座って作業をしているだけで中心点からずれている。その度にキャリブレーションしなおした。Axis Neuron内でセンターを調整する機能があれば良いが今回は見つける事が出来なかった。

    キャリブレーションさえずれなければなんとかなりそうですが、今回の検証ではそこまで長時間安定して使用する事は出来ませんでした。とは言え全身のモーションを高い正確性でとれるだけで十分素晴らしいですし、普通にモーションキャプチャーをとるという目的をならこの価格帯でそれを実現しているのは凄い事だと思います。
    これからもどんどん活用していきたいです。

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

    SNSでもご購読できます。

    コメントを残す

    *