LoginSignup
1
1

初代Perception Neuronを使って接地について遊んだメモ

Posted at

中古価格も落ち着いた 初代Perception Neuron を使って、VRMモデルを動かして遊んでみました。

はじめに

本記事では、 初代Perception Neuron をモーション記録ではなくリアルタイムに動かし、接地感を改善するまでの私の試行錯誤をメモとして残します。

Perception Neuron 3.0 であれば磁気耐性も向上しており、ジャンプや上下の移動の精度などモーショントラッキングの性能も向上していますので、これから購入する場合は3.0をお勧めします。

新型と旧型のPerception Neuronの比較は以下が参考になります。
モーションキャプチャ交流会 - Day2

Perception Neuron Studio3.0Axis Studio という新しい専用ソフトウェアを使用します。
初代Perception NeuronNeuron Pro2.0 は旧世代の Axis NeuronAxis Neuron Pro というソフトウェアを使用しますので、ハードウェアの性能に差があるかもしれませんが、リンク先の動画であれば Neuron Pro3.0 の比較が参考になるかもしれません。

3.0は価格が高騰しており、販売当初はBody kitが 約35万円 でしたが、現在は 約50万円 ですので、性能とのトレードオフで旧型を中古で購入することもありかもしれません。
Perception Neuron 3 Body Kit NTM-PN3/BODY-KIT
※指トラッキングまで可能なグローブ付きは 約100万円 です。

私はメルカリで 初代Perception Neuron(マグケース付き)89,000円 で購入しました。
保証もなく修理も難しいかと思いますが、eBay等でセンサ単体購入なども可能です。

使用アプリケーション等

Unity
Unity上で動かします。私はバージョン2021.3.25f1を使用しています。

Axis Neuron (PN32)
初代Perception Neuron用のアプリケーションです。
リアルタイムのモーション送信やモーション記録が出来ます。

Neuron Mocap Live Unity
Axis Neuron からのモーション送信を受けてUnityで3Dモデルを動かすためのプラグインです。

FinalIK
3DモデルをIK制御するためのアセットです。
今回は接地感を出すためにGrounderを使用しています。

メモ

以下の記事を参考にVRMモデルへのモーション反映を実装しました。
UnityPerception Neuron MocapとUnityで通常の3Dモデルキャラを動かす方法

自分だけが使用できれば良い環境なので、直接のモーション受信などは特に実装せず、上記記事をそのまま実装しており、NeuronRobotを追従しています。
NeuronRobotについては、メッシュを非表示にすることで3D描画を節約することにしました。
image.png

モーションキャプチャーを行う本人と3Dモデルに体格差があると、歩幅や移動距離が異なるため脚が滑るように見えてしまいますが、Axis Neuronのデータをそのまま使うのではなく、 Motion Builder を使用してリターゲットと呼ばれる作業を行い体格差を吸収すると、補正が可能です。

Motion Builderの年間ライセンス料は30万円強ですが、残念ながら私の場合は予算不足でMotion Builderは導入しないこととしました。
そのため、VRMモデルの全体スケールを調整しNeuronRobotと大まかに合わせることとしました。
image.png

座標変換によるモーション追従で十分うまく動作している気がしているため、モデルのサイズを合わせる実装は、あまり意味が無いかもしれません。

3Dモデルの脚が床を貫通してしまう問題は、 FinalIK のGrounderを使用しました。

実装は以下を参考にしました。
【Unity】Final IKの「Grounder」を用いて足が地面に接地するようにする

NeuronRobotではなくVRMモデルにGrounderを設定しています。
image.png

なお試してはいませんが、接地感を与えるだけなら、別のUnityアセットである iStep でも良いかもしれません。

初代Perception Neuronは、座った状態で脚を上げるなどで接地を失うと、身体が沈むような挙動をします。
そのため、Raycastを用いて脚の接地判定を行い、両足の接地を失った場合は腰を固定する実装を行いました。

Raycastの実装は以下を参考にしています。
【Unity】アクションゲームの「接地判定」の作り方!Raycastを使って地面を検出してみよう

私のコードは見せられるほど綺麗ではないためオープンにしていませんが、両足の接地を失った場合、腰のNeuronRobotへの追従を停止すると共に、その時点の腰位置を保存して、その場で停止するようにしています。

その場合、両足が接地した瞬間にNeuronRobotへの腰の追従を再開しますが、そのままだと現在の位置に瞬間移動してしまい不自然に見えるため、以下を参考にLerpで保存した腰位置から現在値までを線形補完して移動させることとしました。
【Unity】Vector3.Lerp/Slerpの使い方と内部挙動

なおLerpだと動きに緩急が出ないため、以下を参考にイージング関数を実装することにしました。
動画製作をしているとおなじみの、イーズイン、イーズアウトの処理を行えます。
私はEaseInOutExpoを使用しています。
動きに緩急を付ける(Easing, Tween)

上記実装を踏まえ、ハンドトラッキンググローブであるHi5 2.0と組み合わせ、ライブステージで動かした動画が以下です。
初代Perception Neuronが苦手とする着席状態や着座状態での脚上げがうまく動作しています。

ハンドトラッキングを初代Perception Neuronに頼らない理由は、センサの磁気耐性が低く、特に指先は破綻しやすいためです。
Hi5 2.0はPerception Neuron 3.0と同一の新型センサを使用しており、磁気耐性が優れています。
Hi5 2.0は私がリリースしている以下アプリを使用し動かしています。
Sknucle
image.png

以上です。
大変今更ではありますが、初代Perception Neuronの使用を検討している方の参考になれば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1