【Blender3.0】小物(人型じゃないモデル)にボーンを使ってアニメーションつける
はじめに
この記事では、小物の3Dモデルにボーンを使ってアニメーションをつける方法をまとめました。
どうしてわざわざボーンをいれるの?
ボーンなしの3Dモデルに2つアニメーションをつけてUnityにいれたら、同時再生で使う前提のアニメーションなのに、別々のアニメーションになっていてなんとなく気持ち悪かったからです。
Blenderでボーン以外の方法でアニメーションをまとめる方法があったら、教えてほしいです。
この記事では、Blender 3.0.1 を使用しました。
この記事のゴール
デラックスどこでもドアにボーンを使ったアニメーションをつけてUnityで動作を確認する
目次
準備
0-1.工程の概要を理解する
まずは、今回の主な作業の全工程を大雑把に解説します。
①ボーンを作成する
②ウェイトをつける(ボーンとモデルを結びつける作業)
③アクションを作成する
大まかにすると3つの工程のみです。
とりあえずこんな感じのことをするんだな~と概要を知っておくのは大事な気がします。
構造的にはこんな感じのものが出来上がります。
3Dモデルの作業は後戻りできないことがあるので、やりはじめる前に大雑把にでも工程や構造を理解して作業の順序を整理してから進めると苦労が減る・・・たぶん。
※いざという時に戻せるようにバックアップをこまめにとるのも大事です。
0-2.下準備をする
アニメーションをつける為の大雑把な工程と構造を理解できたと思うので、これからつけるアニメーションを想像してみます。
想像してみると、ドアと枠は分けておいたほうがいいとか、ドアノブはドアと結合しといた方がいいとか、準備が必要なことに気がつきます。
今回のデラックスどこでもドアの場合は、扉を開けるアニメーションをつけるので、ウェイトの作業で楽ができるように「枠・左のドア・右のドア」の3つにパーツを分けました。
それと、ボーンが変な位置で作成されないように、3DカーソルをShift+S→Cursor to World Originでワールドの中心に移動しておきます。
ボーン
1-1.ボーンを作成する
ここからはアニメーションの軸となるボーンを作成していきます。
Shift+A→Armature→Single Boneで、ボーンを新規作成します。
Armatureは正確にはボーンそのもののことではないと思うのですが、BlenderではArmatureからボーンを作成します。
※アーマチュアとボーンとリグの違いはここの記事がとてもわかりやすかったので、興味がある人は読んでみてね。
ボーンが3Dモデルに埋まってしまうので、ボーンを最前面に表示する設定をします。
1-2.ボーンを追加・削除する
ここで一旦、どういう構造のボーンを作ればアニメーションできるかを考えます。
今回は両方の扉が開閉するアニメーションをつけたいので、こんな構造を目指してボーンを編集すれば良さそうです。
ボーンを追加する為に、メッシュを編集する時と同じようにTabでEditモードにします。
左右対称にボーンを作成したいので、Options→X-Axis Mirrorにチェックします。
ボーンのテール・ジョイント(細くなってる方についてる丸いやつ)を選択して、Shift+Eで左右対称に押し出してボーンを追加していきます。
押した直後にXYZの各キーを押せば軸に沿って真っ直ぐ押し出せます。
さっき追加したボーンのテールから更にボーンを内側に押し出します。
アニメーションに不要なボーンは消します。
1-3.ボーンの位置を調整する
必要なボーンが揃ったら、ボーンの位置を調整します。
TransformのTailに数字を打ち込んで、左右のボーンのテールが中心にくるようにしました。
ボーンを斜めに押し出した影響でRollも斜めになっていたので、0°に直しました。
1-4.ボーンに名前をつける
アニメーションを付ける時にわかりやすいように、ボーンに名前をつけておきます。
ウェイト
2-1.親子関係をつける
ボーンが完成したら、ボーンとメッシュを関連付ける為にウェイトをつけます。
まずは、ボーンとメッシュに親子関係をつけます。
親がボーン、子がメッシュになるように、デラックスどこでもドア→ボーンの順番で選択します。
Ctrl+P→With Empty Groupsで、親子関係がつきます。
2-2.ウェイトペイントをする
左右の扉にそれぞれ順番にウェイトをつけていきます。
まずは右側の扉にウェイトをつけます。
ボーン→右側の扉の順番で選択して、Ctrl+TabでWeightPaintモードに切り替えます。
右用のボーンが水色に、右側の扉が青色になっていればOKです。
もし違うボーンが選ばれていたら、Ctrl+左クリックでボーンを選び直します。
どこでもドアが真っ赤になるまでウェイトを塗っていきます。
メッシュをパーツに分けてあれば、雑に塗っていけばいいだけです。
※ウェイトの基礎知識や、ウェイトペイントのやり方はこちらの動画がわかりやすいので、わかんなかったら見ましょう。
※ここでウェイトが塗れないなどの問題が起きたら、こちらの記事の「上手くウェイトペイントができないQ&A」を参考にすると解決できるかもしれません。
2-3.ウェイトがうまくついているか確認する
無事にウェイトが塗れたら、ボーンとメッシュがくっついてるかを確認します。
確認するには、Poseモードを使います。
一旦、Ctrl+TabでObjectモードに戻します。
ボーンを選択した状態で、Ctrl+TabでPoseモードに切り替えます。
ボーンを選択して、Gを押して移動してみます。
ボーンにモデルがくっついてくるのが確認できます。
Tips
Editモードでメッシュの頂点を選択するとItem→VertexWeightsで、選択中の頂点と結びついているボーンとウェイトの強さを見れます。
関係ないボーンと結びついていたら、ここから修正することもできます。
右側が終わったら、左側の扉にもウェイトをつけます。
2-4.ボーンの位置を調整する
ウェイトをつけ終わったら、デラックスどこでもドアの扉が理想通りに動くかPoseモードで確認してみます。
Poseモードにした後、ボーンを選択してR→Zを押してつける予定のアニメーションと同じ動きを再現してみます。
細かいところですが、ドアが枠にめり込んでしまいました。
ボーンのテールの位置を起点にしてドアが回転するので、下の図のようにテールの位置を調整すれば、めり込まなくなりそうです。
めり込む理由がわかったところで、ボーンの位置を調整していきます。
ボーンを選択して、Editモードに切り替えます。
ボーンはスナップ機能が使えるので、辺にスナップするように設定します。
Tips
Options→X-Axis Mirrorがオンになっているか確認しましょう。
まずはテールを選択して、G→Xでドアの辺にくっつけます。
次に、ボーン全体を選択して、G→Yで移動します。
これでドアを回転しても、めり込まなくなりました。
これでアニメーションをつける為の準備が全て整いました。
アニメーション
3-1.Actionを作成
では、いよいよアニメーションを作っていきます。
Blenderではアニメーションのことを、Actionと呼んでいます。
まずは、Blenderの画面上にあるレイアウトタブでAnimationレイアウトに切り替えます。
すると画面下に、DopeSheetというタイムラインが付いた画面が出てきます。
そこにキーフレームを打ってアニメーションを作成していく感じです。
最初はActionを作成する必要があるので、Action Editorに切り替えます。
+Newを押して、新規のActionを作成します。
Actionを作成したら、名前をつけておきましょう。
また、Actionの名前をつけた右横にある盾のマークを押しておきましょう。
BlenderのActionは、Actionを作成した時点では内部的にどこからも利用されていないデータということにされています。
どこからも利用されていないデータは、Blenderを終了した際に削除されます。
それを回避する為に、この盾のマークを押してフェイクユーザーをオンにします。
Action作成後に、ストリップ化することで正式なノンリニアアニメーションのデータ(この呼び方で合ってるのか不明ですが・・・)として登録しますが、Action作成の途中でBlenderが落ちないとも限らないため、一旦はフェイクユーザーを設定して進めておきます。
※フェイクユーザーについてはこちらの記事が参考になります。
※その他Blenderのアニメーションの基礎概念はこちらの記事がわかりやすいです。
※Blenderのアニメーションの概念は全体的にクセがあるので、更に詳しく知っておきたい人はこちらの記事を読むと理解が進むと思います。
3-2.フレームレートの設定
アニメーションを作成するときは、フレームレートを設定しておきます。
今回は30fpsで3秒のアニメーションを作りたいので、以下のように設定しました。
- 終了フレーム:90
- フレームレート:30
1秒間で30fpsと設定したので、3秒のアニメーションを作りたいなら90フレーム必要という感じです。
3-3.キーフレームを打つ
ここからはキーフレームを打って、アニメーションをつけていきます。
最初にAction Editor上のシーケンスバーが1になっているのを確認します。
ボーンを選択して、Poseモードにします。
まずは右ドアにアニメーションをつけたいので、右のボーンを選択します。
Iを押して、Rotationのキーフレームを打ちます。
今度はアニメーションの終わりのキーフレームを打ちます。
Action Editor上のシーケンスバーの位置を90にします。
R→Zで、適当な位置までボーンを回転します。
Iを押して、Rotationのキーフレームを打ちます。
Action Editorの下側にある▶(再生)を押すと、右ドアが開くアニメーションを確認できると思います。
左ドアに同じようにボーンを選択してキーフレームを打って、アニメーションをつけました。
3-4.Actionのストリップ化
Actionが完成したら、ストリップ化します。
ストリップ化するとNLA EditorにActionが登録されます。
NLA Editorは、Actionの再生速度を変えたり、繰り返したりなど、Actionに対して編集をする機能です。
ストリップ化した時点で、Actionのデータは一時的なデータではなくなります。
また、Unityなどの外部ソフトへモデルを出力する際に、ストリップ化したアニメーションだけを書き出す設定ができたりします。
ストリップ化するのはとても簡単です。
まずは、DopeSheetをNolinearAnimationに切り替えましょう。
※スクリーンショットのようにNolinearAnimationのウィンドウを増やす形でもOKです。
Amatureの下にさっき作成したActionがあるので、PushDownActionを押してスナップ化できれば、アニメーション作りは完了です。
おつかれさまでした!
Unityで確認
4-1.FBX形式でエクスポート
早速、作った3DモデルをUnityで確認してみましょう。
Unityに出力するものを選択したら、FBXで書き出します。
書き出し時の設定は、スクリーンショットを確認してみてください。
4-2.Unityにインポート
エクスポートしたモデルをUnityに読み込んでみると、さきほどスプリット化したアニメショーンがモデルと一緒に読み込まれているのが確認できると思います。
法線おかしいけど・・・動いてるの確認できたからヨシ・・・。
おわりに
アニメーションがわかれていてもUnity上で同時再生するようにしたらいいだけだとは思うのですが・・・わたしのようにどうしてもひとつにしたい人がいたら、このような方法もあるので、やってみてください。
もし、他にActionをまとめて出力する方法をご存知の方がいたら、そっと優しく教えていただけないでしょうか。