見出し画像

こないだ少しバズったトラッキングシステムを紹介する記事

上のツイートのシステムの話です。

システムの概要

画像1

Live2Dの描画制御は昔に作ったGadgetXLive2DをCubism4の読み込みやiPhoneXで動作するフェイスキャプチャソフト「Face Cap」の通信規格を受け取れるように改造したものを使用しています。
同様のことをしようとする場合、GadgetXLive2DはCubism3,4対応版はライセンスの関係で公開が難しいのと、
Face Capはソフト自体は無料でもキャプチャデータをUDPで長時間飛ばすのに7000円ほど課金が必要になる点に注意してください。

フェイストラックシステム周り

機材のiPhoneXRは中古で42800円で購入しました。アウトレット品で契約のないSoftbank回線のものでしたがTrackingで使い倒そうと決めていたのでそこらへんは無視しています。
ソフトの課金も合わせると5万円ほどしましたが取り回しの良い視線まで高精度でキャプチャするシステムの構築が10人日工数でも無理な点を考えると1日1万円の日給換算で考えても破格です。
視線のキャプチャができるのはFaceRigも同等なのですがあちらは他の要素と連携ができないのと表示周りの制度がFaceRig頼りな点が欠点でした。

「Face Cap」の信号方法はOSCというオーディオをUDPで転送するための規格で拡張してパラメータ転送などによく利用されるようです。ARKitで取れるFacialTrackingのデータをそのまま転送してくれるので受信側で料理しやすいです。細かい仕様についてはこちらのリンクにありました。

iPhone系をキャプチャカメラとして使用するときに結構問題に感じたのはiPhone自体が結構大きいのでディスプレイの視界を邪魔せずに正面から取るのが難しいという問題でした。
この問題に関してはやってくるトラッキングデータを補正するカタチで解消しました。

iPhoneの置き方としては上記のツイートのようなカタチにしました。横置きにしているのはTrueDepthカメラの認識範囲が縦長な四角錐領域なので想定移動範囲をカバーするためにこのようにしています。
思ったより距離がなくて椅子の背もたれに限界まで持たれるとトラッキングきれる感じです。専用のスタンドを3Dプリンタで作成してもう少し手前においても良いかもしれませんね。

画像2

位置情報の補正には4点を使用しています。
・基準位置。角度情報も同時に記録
・Z軸のための前のめり位置
・X軸のための左ロール位置
・X軸のための右ロール位置
以上4点の位置情報を使った行列計算をつかって行っています。
細かく説明するとややこしいので計算自体は今度Qiita側に書いておこうとおもいます。
オイラー角を回転行列に変換して逆行列と掛け合わせて差分をきれいに出したりLookAt行列で座標をきれいに出したりしてる感じです。

ペンタブ周り

もとのシステムはGadgetXLive2Dの紹介動画を見てもらえるとわかるように3年位まえからあるシステムです。Wintab経由で情報をもらうとお絵かきソフトに干渉してしまうのでUSBの信号情報を直接読み取っています。大まかなやり方に関してはこちらのQiitaの記事にあります。
3年前はボタン情報もペンの状態情報も一緒に一つのデータ領域に記述されているのかと思っていたのですが、ボタンに対応する流れのなかでよくよく調べてみるとイベントによってデータ領域の情報の扱いが異なっていたようです。こちらもQiitaのほうに細かい経緯を書く予定です。

トラッキングシステム自作のススメ

安く仕上げたりするならばFaceRig+カメラの組み合わせは通常カメラでも視線トラッキングも動作して非常に優秀です。
顔だけですませるならばほんとにこれだけで十分なくらい完成されています。しかしそれでもお金を掛けてまでトラッキングシステムの自作を勧めるのは追加信号を取り扱ったりパラメータ処理に特殊な計算が利用できるためです。
昔スプラトゥーンの集計ソフト「ikalog」と連携して動くシステムを作ったことがあります。今ならば放送のコメントに連携したりWebサービスと連携したりすることができそうです。またUnityならば表示周りのライティング処理や追加の描画効果を望めます。
このようにVにはまだもう少し先があると感じています。

この記事が気に入ったらサポートをしてみませんか?