見出し画像

バンナムが公開した「AI研究開発用3Dモーションデータセット」をUnityのモデルに適用させる方法

やれること

 上のデータを

 こんな感じに、Unity 上の Humanoid に適用させる方法について解説します。手順は以下のような感じ。

  1. bvh データのダウンロード

  2. bvh ファイルから Animation の作成

  3. Animator の適用

bvhデータのダウンロード

 

 上のリポジトリを clone します。なんのことかわからなければ、

 ここの「Download ZIP」でもOK。
 フォルダの中に「dataset-1_bow_active_001.bvh」といったファイルがあるが大量にあると思いますが、この bvh というファイルがモーションデータの本体になります。しかしこのままでは Unity に読み込めません。

アニメーションファイルの作成

 Unity に読み込める形にするためには、まず「fbx」に変換する必要があります。そのためには Blender で中間処理をする必要があります。と言っても、特にモデリング的な操作をする訳ではなく、本当にファイルを読み込んで別の形式にエクスポートするだけですので、Blender アレルギーがある人も身構える必要はありません。
 Blender のインストールについてはさすがに割愛するので、もししていない人はぐぐってください。

 「File」→「Import」→「Motion Capture」から bvh ファイルをインポート。GUI操作が煩わしければ、F3 キーを押して「import bvh」で検索しても同じ操作がヒットすると思います。私はそうしています。

 こんな感じのスケルトン君が召喚されます。

 これをそのまま「File」→「Export」→「FBX」でエクスポート。

 Blender あるあるですが、「Camera」と「Lamp」のチェックは外しておきましょう。これは、カメラと光源も fbx に含めるという内容で、3Dデータを部品として使う場合には、通常は必要ないです。

 出力された fbx を Unity で読み込みます。

 アセット欄にドラッグ&ドロップで放り込むと以下のようになります。

 まだ fbx が Generic(人型ではない固形物)扱いなので、これを人型のデータだと認識させます。

 Untiy 上で fbx を選択すると、(初期配置では)右上の方にあるインスペクタ欄に上のような情報が出ます。「Animation Type」を「Humanoid」にして「Apply」を押すと自動的に人型だと認識してくれます。bvhファイルの構成によりますが、よほど変な構成でなければうまくいくはずです。少なくともバンナムのデータセットでは大丈夫でした。データによってはボーンの手動割当が必要になるかもしれません。

 fbx がこのようになっていれば Humanoid としてインポートできています。この中にある▲マークみたいのが、アニメーションデータになります。

他モデルへの適用

 アニメーションデータを他のモデルへ適用させます。まずは適用させたいモデルを取り込みます。当たり前ですが、人型モデルで Humanoid として取り込む必要があります。

 本記事ではこの娘を使います。

 アセット欄を右クリックして「Create」→「Animator Controller」を選択します。「Animation」ではないので注意してください。

「New Animator Controller」というファイルができます。

 クリックしたらこのようになります。

 右クリックして、「Create State」→「Empty」を選択します。

「New State」というノードができて、自動的に「Empty」から線が引かれます。

(初期配置では)右上のインスペクタ欄に上のような情報が出ます。「Motion」の欄の右にある◎をクリックします。該当欄を選択した上でスペースキーでも可です。私はそうしています。

「Select Motion」というウィンドウが出るので、目的のアニメーションを選びます。上の図では「dataset…」というアニメーションがそれにあたります。

 これでアニメーターコントローラーの設定は終わりです。

 最後にこれを、モーションを適用させたい3Dモデルに適用させます。

 アニメーターコントローラーをドラッグ&ドロップすると、Humanoid のプリファブに自動的にそのコントローラーが設定されます。

 後はゲーム再生ボタンを押せば、そのモーションをしてくれるはずです。Unity のカメラの初期配置だとうまくアバターの方を向いていない可能性があるので、そのあたりは適宜調整しましょう。

他のソフトへの適用

 最後に、他のソフトへの適用について話します。

 そもそも、bvh(Biovision Hierarchy)がモーションキャプチャ用の汎用的な形式です。中身はテキストファイルで、以下のようなジョイントの情報と、それらがフレームごとにどう動くかを記述しています。

 では他のソフトだったらこれを読み込ませれば一発……とはなりません。

 なぜかというと、bvh で記述されているのはボーンの情報のみだからです。3Dモデルに同じ動きをさせるにはそのボーンの動きをベイクする必要があります。しかし、そもそもモーションデータと適用先が同じボーン構造をしているとは限りません。

 これを解決するためには、モーションデータと適用先のボーン対応関係を指示する(リターゲティング)するか、そもそも適用先のウェイトをすべて無視して、モーションデータのボーンにリギングするかのどちらかが必要です。どちらもそれなりに手間がかかります。

 Unity だとなぜ上手くいったかというと、Humanoid という形式で強力に正規化されているからです。

 また、VRM Live Viewer のような bvh ファイルをサポートしているソフトであっても、バンナムのデータセットは読み込めませんでした(ver3.3時点)。恐らくヒエラルキー構造の違いによるものだと考えられます。

 少なくとも Unity の Humanoid ではこのあたりの違いを吸収できているので、簡単な補正で対処可能だとは思いますが、まだ条件等を調査中です。

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