MRが楽しい

MRやVRについて学習したことを書き残す

Blender2.8でカーブモディファイアを使って作成したアニメーションをUnityに持ち込む 前編(アニメーション変換用モデルの作成)

本日は Blender の技術調査枠です。
Blender2.8でカーブモディファイアを使って作成したアニメーションをUnityに持ち込む手順を記事にします。
f:id:bluebirdofoz:20201010225928j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

カーブモディファイアのアニメーションをそのままUnityに取り込んだ場合

最初に、何の変換も行わずにカーブモディファイアのアニメーションを設定したモデルを Unity に取り込んでみます。
Unity にモデルを取り込むため、前回作成したアニメーションモデルを[ファイル -> エクスポート -> FBX]で出力します。
f:id:bluebirdofoz:20201010225939j:plain

作成した FBX ファイルをドラッグして Unity にインポートします。
f:id:bluebirdofoz:20201010225950j:plain

FBX ファイルの内容を確認すると、アニメーションデータが含まれています。
しかし、このデータを再生するとZ座標の情報が 0.0 m から 62.8 m まで上昇するだけのアニメーションが再生されます。
f:id:bluebirdofoz:20201010230021j:plain
f:id:bluebirdofoz:20201010230049j:plain

これはカーブモディファイアによる変形は Blender の機能であるためです。
Unity 側ではカーブモディファイアによる変形が起こらないため、キーフレームとして打ち込んだZ座標の移動アニメーションのみが再生されています。

Unityに取り込み可能なアニメーション

Unity に取り込み可能なアニメーションデータは、ボーンアニメーション(スケルタルアニメーション)またはシェイプキー(ブレンドシェイプ)によるアニメーションです。
docs.unity3d.com
docs.unity3d.com

Blender で作成したカーブモディファイアのアニメーションを Unity に取り込むには、Blender 内でこれらの種類のアニメーションに変換する必要があります。
今回の記事ではボーンアニメーションに変換することで、Unity に取り込む方法を説明します。

アニメーション変換のためのモデル作成

初めにアニメーションを行う3Dモデルと、アニメーションを制御するボーン構造を作成します。

メッシュオブジェクトの作成

今回は作業内容を分かりやすくするために円柱形のモデルを利用します。
[オブジェクトモード]で[追加 -> メッシュ -> 円柱]で Cylinder オブジェクトを追加します。
f:id:bluebirdofoz:20201010230124j:plain

アニメーションが分かりやすいよう[調整パネル]で[深度]を 8.0 mにします。
f:id:bluebirdofoz:20201010230137j:plain

アーマチュアによる変形が可能になるように[編集モード]で円柱の頂点数を増やします。
[ループカット]を実行し、[分割数]を[7]に設定しました。
f:id:bluebirdofoz:20201010230147j:plain

この手順だと分割の間隔が丁度 1.0 mになるため、後々の編集がしやすくなります。
f:id:bluebirdofoz:20201010230158j:plain

[選択 -> すべて]または[A]キーで全ての頂点を選択します。
この状態で[移動]を実行してZ軸方向に 4.0 m移動します。
f:id:bluebirdofoz:20201010230211j:plain

これはメッシュオブジェクトの底辺とワールド原点を合わせるためです。
こうしておくと、後々の編集がしやすくなります。
f:id:bluebirdofoz:20201010230222j:plain

アーマチュア(ボーン)の作成

次にメッシュの形状に合わせてアーマチュア(ボーン)を作成します。
[オブジェクトモード]で[追加 -> アーマチュア -> 単一ボーン]で Armature オブジェクトを追加します。
f:id:bluebirdofoz:20201010230234j:plain

ボーンがメッシュに埋まっているため、追加した時点では[3Dビュー]上でボーンが見えません。
このままだと不便なので、[オブジェクトデータ]タブを開き、[ビューポート表示]パネルから[最前面]にチェックを入れます。
これでメッシュにボーンが埋まった状態でも、ボーンが[3Dビュー]に表示されるようになります。
f:id:bluebirdofoz:20201010230244j:plain

更に[名前]にもチェックを入れておきます。
すると、各ボーンの名称が[3Dビュー]に表示されるようになり、メッシュとの対応を取る際に便利です。
f:id:bluebirdofoz:20201010230258j:plain

メッシュの形状に合うように、アーマチュアを編集します。
[編集モード]に入り、Bone ボーンを選択した状態で[拡大縮小]でZ軸方向に 9.0 m拡大します。
f:id:bluebirdofoz:20201010230310j:plain

底辺の位置を合わせます。
Bone ボーンを選択した状態でZ軸方向に 4.0 m移動します。
f:id:bluebirdofoz:20201010230323j:plain

この時点で横から見ると、このような形になっています。
f:id:bluebirdofoz:20201010230335j:plain

ボーンをメッシュのカット位置に合わせて分割します。
Bone ボーンを選択した状態で[アーマチュア -> 細分化]を実行します。
f:id:bluebirdofoz:20201010230349j:plain

分割数を[8]に設定すると、以下のようにメッシュのカット位置とボーンのヘッダ位置が重なるように分割されます。
f:id:bluebirdofoz:20201010230401j:plain

[3Dビューのシェーディング]を[ワイヤーフレーム]にすると、メッシュのカット位置の確認ができます。
f:id:bluebirdofoz:20201010230411j:plain

要注意

今回は予め決められた手順を踏めば、メッシュのカット位置とボーンのヘッダ位置が重なるようにしました。
もし、自身で作成したモデルでアニメーションを綺麗に変換する場合には、メッシュオブジェクトの変形させたい頂点の節目にボーンのヘッダを細かく合わせて編集する必要があります。

頂点グループの作成

次に各ボーンが追従するメッシュ位置の目安となる「頂点グループ」をメッシュオブジェクトに設定していきます。
f:id:bluebirdofoz:20201010230424j:plain

最初にボーンの名称と対応付く頂点グループをメッシュオブジェクトに作成します。
[アウトライナー]ウィンドウから Cylinder オブジェクトを選択し、Ctrl キーを押したまま、Armature オブジェクトを選択して複数選択の状態にします。
f:id:bluebirdofoz:20201010230436j:plain

複数選択の状態で、[オブジェクト -> ペアレント -> アーマチュア変形 空のグループで]を実行します。
f:id:bluebirdofoz:20201010230448j:plain

すると、Cylinder オブジェクトと Armature オブジェクトが親子関係で関連付けられます。
ここでは親子関係の設定は目的ではないので、そのまま[オブジェクト -> ペアレント -> 親子関係をクリア]を実行します。
f:id:bluebirdofoz:20201010230459j:plain

すると親子関係は解除され、[アウトライナー]ウィンドウ上の状態は元に戻りますが、メッシュオブジェクトに追加された「頂点グループ」は残った状態となります。
これでメッシュオブジェクトに各ボーンの名称の頂点グループを追加できました。
f:id:bluebirdofoz:20201010230511j:plain

頂点と頂点グループの関連付け

現在の状態は頂点グループを作成しただけで、どの頂点がどの頂点グループに属しているかを設定していません。
Cylinder オブジェクトの[編集モード]に入り、各頂点に頂点グループの重みづけを行います。
f:id:bluebirdofoz:20201010230523j:plain

各ボーンに合わせて節目の頂点を全て選択して、これらの頂点に対応ボーンと同名の頂点グループを割り当てます。
[オブジェクトデータ]タブの[頂点グループ]パネルでボーンと同名の頂点グループの[割り当て]を行います。
f:id:bluebirdofoz:20201010230536j:plain

頂点にどの頂点グループが割り当てられているかは[3Dビュー]の[アイテム]のサイドバーで確認できます。
f:id:bluebirdofoz:20201010230552j:plain

同じ手順で全ての頂点にそれぞれの頂点グループを割り当てていきます。
f:id:bluebirdofoz:20201010230604j:plain

全ての頂点に頂点グループを割り当てたら、モデル作成は完了です。
これでアニメーションの変換準備が整いました。
f:id:bluebirdofoz:20201010230615j:plain

次はアニメーションの作成と変換を行います。
bluebirdofoz.hatenablog.com