【要約】【VRChat×Unity】ShaderMotionでアバターの動きをモーションキャプチャーする [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
VRChatのユーザーは、アバターが行ったダンス等の動作をUnity等の外部環境で再利用したいと考えている。しかし、VRChat内の動きを直接データとして取り出す標準的な手段は限られている。具体的には以下の課題が存在する。
- ・既存のツールでは、特定のワールド環境に依存する制約がある。
- ・表情やリップシンクのキャプチャが困難な場合が多い。
- ・モーションデータの抽出プロセスが複雑になりやすい。
// Approach
開発者は、Shaderを用いた高速なデータ抽出手法を採用した。ShaderMotionをアバターに実装し、動画を介してモーションを復元する。具体的な手順は以下の通りである。
- ・アバターにShaderMotionを導入し、VRChat内で動作を録画する。
- ・録画時にカラーバーを表示させ、データの同期性を確保する。
- ・Unity上でVideo PlayerとMotionPlayerを使い、動画から動きを再現する。
- ・AnimationRecorderを用いて、再現された動きをAnimationClipとして書き出す。
// Result
この手法により、VRChatでの複雑な動きをUnityで利用可能な形式で保存できるようになった。導入によって以下の成果が得られる。
- ・GPU処理を活用することで、高速なモーション抽出が可能となった。
- ・表情やリップシンクを含む、リッチなモーションキャプチャを実現した。
- ・アバター側のギミックとして動作するため、多くのワールドで利用可能だ。
Senior Engineer Insight
> 動画という汎用的な中間データを用いる設計は、極めて合理的だ。ShaderによるGPU処理は、計算負荷を分散しつつ高精度な抽出を可能にする。ただし、AnimationRecorderによる書き出し時の負荷や、SkinnedMeshRendererのデータ肥大化には注意が必要だ。実運用では、不要なデータをフィルタリングする工程をパイプラインに組み込むべきである。また、FootIKの不具合など、出力後の微調整コストも考慮しておく必要がある。