気づけばツール漬け

3D,2Dのツールを色々使ってみた記録を書いていきたいです。

「グレイちゃんきをつけて」制作メモ モーション編

f:id:mi-zmix:20170507165451p:plain

第7回UE4ぷちコン応募作の「グレイちゃんきをつけて」の制作記録メモ、キャラモーション編です。

応募の動画URL

https://youtu.be/LWozCX3s2hE

アップしたパッケージURL

リンクは削除しました。

BP周りやゲーム内容等はこちらに書いてます。

http://mi-zmix.hatenablog.com/entry/2017/05/05/232302

 

●はじめに

モーション作成ならば、私にとっては特にわからないことも少なく、作りまくれば良い分野なのでテンション上がっていました。モーション作る気まんまんで、この内容にしたといった方がいいかもしれません。
しかし、そんなに簡単にはいきませんでした。主にリグ関係で。

 

●必要なモーションをあらいだす

まずは必要なモーションを確認しました。(Fはフレーム数)

・グレイちゃん 

  • ガード・・・・・ピシっとかっこよく 5F程度でガードポーズにする
  • ガード失敗・・・10~20Fくらいの待ち時間
  • 反撃・・・・・・コンボ攻撃にする。 操作不可なので全部の流れをベタで
  • やられる・・・・うなだれる感じ。 30Fくらいそのままにする
  • 立ち直る・・・・ゆっくり立ち上がり。何かアクションする
  • 歩く・・・・・・30Fループ。 あとは再生速度で調整する
  • 待機・・・・・・60Fのループ。 できるだけ女の子っぽく
・グレイマン
  • 攻撃→成功・・・20Fくらい動いてから攻撃。成功後は憎たらしい感じに見えるようにする
  • 攻撃はじかれ・・攻撃がはじかれたポーズ。大げさにのけぞる
  • やられ・・・・・なすすべない感じで
  • 待機・・・・・・60Fのループ。 何かしてきそうな感じで立つ
  • フェイント・・・小学生男子がよくやるやつ

考え始めたときはもう少しバリエーションはありましたが、必要最低限に絞っていきました。
どのくらいの長さ(フレーム数)になるかも考えていきます。
30FPSを想定しました。

●どのツールを使うか迷う

FBXでボーンは読み込めるので、それをコントロールするリグを作らないとモーション作成がかなりやりにくくなります。
モーション作成で使えそうで、自分が持ってるDCCツールは以下の
3個でした。

Blender
MODO
MayaLT

それぞれ試してみましたが、結局MayaLTを使いました。2017です。
Blender
はリグの操作の使い方がわからず、あきらめました。グレイちゃんのフォルダにはBlenderファイルも含まれていて、環境はバッチリだと思うのですが、すいません。
MODO
Setupモードでボーンとメッシュが90度傾いてしまうという問題に直面し使用を断念しました。
Setup
モードにすると、「骨とメッシュを関連付けた状態の形に戻る」ので、MODOの軸の関係で寝た状態になったのだと思います。強引にIKとか設定しても、足がねじれたりするのでだめでした。
このまま全体を90度回転させて起こすと、一部のメッシュが置き去りになります。

f:id:mi-zmix:20170507173445p:plainMODOのセットアップの図
MayaLT
なら慣れているというのと、骨とメッシュの構造が崩れないで素直に設定できたので良かったです。

MayaLTで、独自のリグを構築するかヒューマンIKを使うかで迷いましたが。
やっぱり時間がないので、ヒューマン
IKを使うことにしました。

MayaLTでリグ構築

ヒューマンIKの各骨にアサインしていきます。
アサインできない部分の骨は、とりあえず放置しておきます。

f:id:mi-zmix:20170507173530p:plain

 基本の骨を設定できたら、残りのボーンを動かすコントローラーを設定していきました。
ヒューマンIKの骨の子に設定していきます。間にオフセット用のノードもはさみます。
ゆれ物をUE4にまかせるのなら、この手順は必要ないと思います。UE4でのゆれ物の設定とか把握していなかったので全部自分で動かすつもりで設定しました。MayaLT上では物理シミュレーション関連はまるまるカットされてるので設定できません。
(プレビュー用でテクスチャ貼っただけなので、変な色になってます)

f:id:mi-zmix:20170507173600p:plain

オフセットのノードはなくても大丈夫だと思いますが、挟んでおくとオフセットの子にしたノードは、移動と回転の値を0にできるので、あとあとのモーションの作成がやりやすくなります。

f:id:mi-zmix:20170507173900p:plainスカートのオフセットの例

f:id:mi-zmix:20170507174025p:plainその子の、スカートのコントロールのノード

コントロール用のノードを作ったら、元の骨へとコンストレイントを設定します。回転だけで動かすつもりなので、オリエントコンストレイントだけにしました。

f:id:mi-zmix:20170509212210p:plain

元の骨にあるけど、放置しても大丈夫そうな部分は放置しました。(膝や肘のアップベクトル用?)
消してしまうと、元のスケルトンと異なったデータになってしまいそうなので、消さずに残しておきました。

f:id:mi-zmix:20170507174324p:plainこのあたりのボーン


ひととおり設定できたら、選択用のセットを作っておきます。
骨の設定をしたら、モーションを作る前にセットを作ってしまいます。
あると便利かと思う選択セット

・ヒューマンIKボーンの全選択
IKコントローラの選択
・書き出し用の元の骨の選択。メッシュ含む。(重要)

・追加した分のコントローラーの選択

f:id:mi-zmix:20170507174547p:plain

●キャラモーションをまとめる

あとで指定範囲だけ切り出せるので、まとめられるモーションをまとめて作りました。
グレイちゃん

・待機
・歩き
・ガード→ガード失敗
・ガード→ガード成功→反撃
・やられ→立ち直る
の5種類のモーションを作成しました。

レイマン
・待機
・攻撃→攻撃成功
・攻撃→はじかれ→反撃をうけてやられ
・フェイント
という4種類を作りました。
作成したモーションでは、フェイシャル部分はいじりませんでした。

●それぞれのモーションについて 

・待機、歩き

ループなので、1モーション1ファイルとして作りました。
なぜならば、ループのモーションを作る時、カーブエディタで合わせやすいからです。
ループモーションの作成時は、最初と最後のカーブの傾き(タンジェント)をあわせるのがとても重要なので、1モーションで独立させておけば、カーブの表示を「サイクル」(下図の右上赤枠のアイコン)にしたとき、最初と最後がつながってくれて楽にあわせられます。

f:id:mi-zmix:20170507174927p:plain

ループのモーションなのに、複数のモーションを一つにまとめてしまうと、タンジェントを合わせるのがちょっと面倒です。

youtu.be

そういえば、UE4(グレイマンの?)の歩きや走りは、フレーム数と動きにルールがあるようですが、
今回は、それには合わせませんでした。
作った後でも、フレームをずらしてやれば対処できそうなので、とりあえず後回しにしました。1モーションで独立させておけば、フレームをずらしたりするのも楽です。

 

・ガードの失敗とガードの成功の流れの作成

まず先に、ガードしてからガードの失敗までの流れを1モーションとして作りました。

youtu.be
その後別ファイルにコピーして、「ガードして」の部分を残したまま、後ろをばっさりカットして、続きを作りました。

f:id:mi-zmix:20170507175723p:plain

このゲームでは攻撃の分岐はしないので、攻撃部分も全部一連の流れとしてベタで作りました。
グレイちゃんは攻撃後に一回転して待機に戻ってます。蹴りの勢いにまかせて、同じ方向に一回転するほうが自然だと思うのですが、あのようにもどす理由がありました。
蹴りによって軸足を踏み変えていて、「グレイちゃんの定位置」からだんだんずれていったので、元の位置に戻すという動きにしてます。もどさなかったら、再び歩いた時にコースが少しずれて、攻撃が届かない敵が出たりしました。
待機モーションのままズリズリ戻したり、パッと戻したりするのも不自然なので、どうせなら可愛くと思って、わざと回ってるふうにしました。

youtu.be

・やられ

待機状態から作りました。
やられてから立ち直るところまで、経過時間も想定してその分ベタで作りました。
うずくまってるところはループでもいいかもしれないですが、
髪の毛がはらりってのをやりたかったので、ループの設定はしてません。
ガクンと膝をついてから、体は動かなくなっても髪の毛は動くので、その分の時間を確保しました。
最初は全部で3秒分くらいの長さでしたが、立ち直り部分が早すぎに感じたので、+1秒のばしました。

youtu.be

 やられモーションは2種類つくりました。
最初につくった下の動画は、少しかわいそうな感じに見えて、やられるたびに毎回見せられるのもどうかな? と思っちゃったので、無難なやつを作りました。
ボツにするのももったいないので、10分の1くらいのランダムで出るように仕組んでます。

youtu.be

・その他

タイトル画面用のモーションも作っていました。
「望遠レンズで遠くから狙われていて、グレイちゃんがそれに気づく」っていう想定です。
つくってはみたものの、もっと長い尺がほしくなったり、調整している時間がなかったりで、断念しました。

youtu.be

・ざっくり敵

敵の方も作る方針はだいたい同じです。
攻撃とフェイントは、最初同じ予備動作モーションで作りましたが、さすがにまったく対処できないので、違いをつけました。それでもわかりにくいですが。
フェイントは、「わざと大げさに動いて、頭の後ろ掻くやつ」とか、「大きく拳を引いてから空を指差す」と
か、ムカつく、または呆れる感じのやつを考えてましたが、とりあえずインパクトがあって動きも大きめの、何か拾うモーションにしました。

●ベイクして書き出す

ヒューマンIKのメニューで、アニメーションを元の骨の方にベイク(リグの動きのキーフレームを骨の動きのキーフレームにうつす)します。

f:id:mi-zmix:20170507181206p:plain

やってみてびっくりだったのが、あとから追加したコントローラーのノードも一気にベイクできたことです。
前バージョンでは独自に追加した分は、別で選択してベイクしないとならなかった気がするのですが……
よくよく見てみると、メニューを実行した直後は元のボーン(コンストレイントされている方)にはキーがベイクされていないですが、書き出した時に元のボーン側にキーフレームがベイクされているようでした。
(3dsMaxはこういう挙動しますよね。というかこの挙動が当たり前のような気がs…)
これによって、書き出しがかなり楽になったと思います。

ゲームエクスポーターで書き出しました。
最初に書き出した時うっかり全部書き出して、ヒューマンIKのノードも含めて書き出されてしまい、無駄なデータが増えた上に、別の骨の扱いになってしまいました。
書き出しのオプションに「オブジェクトセットを書き出し」というのがあるので、そこに作っておいたセットを設定すれば必要な分だけ書き出せます。(これもびっくりでした。前は選択したものだけ書き出していても、勝手にコンストレイント元のノードが含まれていました。そのためいったん関係ないノードを削除してから必要なノードを選択していた気がs……)

モデル用の設定もして書き出しました。
UE4ではメッシュのインポートのチェックを外してたので必要ないかもですが、念のため書き出してました)
まとめて作ったアニメーションを、フレームごとに切り分ける設定をして、個別のFBXファイルにしました。
あと、
FBXのバージョンは2014です。
ファイル名の部分に文字列を入れておくと、その後ろにクリップ名で設定した名前が追加されて、それぞれ別ファイルで出力されるので楽です。

f:id:mi-zmix:20170507182936p:plain

 ※追記
ヒューマンIKのメニューでベイクを使わず、書き出す分のノードを選択しておいて、
ウインドウ内の「アニメーションのベイク処理」にチェックを入れておくだけで、必要な分のベイクがされてエキスポートできるようです。
(または、Fileメニューの書き出し■(オプション)から、ベイクにチェックを入れるだけで良い)

 

●インポートする

書き出しできたので、UE4にインポートしました。
MayaLT
で書き出したグレイちゃんのFBXファイルは、X軸で90度倒れてました。

f:id:mi-zmix:20170507183352p:plain
補正0度の状態で寝ていたので、90度補正しました。
あと、メッシュを含めてインポートしてしまうと、別のスケルトンとモデルとして扱われてしまったので、メッシュのインポートのチェックは外します。
90度の補正はしましたが、グレイちゃんの既存のスケルトンに合わせることはできました。

f:id:mi-zmix:20170507183317p:plain

●おわりに

UE4.16から、モーションまで作れるようになるので、作成の流れも変わってきそうな気がします。
ただ、プレビュー段階のを触ってみると、まだ制限が多そうです。骨の向きとか、かなり面倒な問題だと思います。
とはいえ、ゲームエンジン上でモーションが作れてしまうのはすごい話です。
いっそのこと、スキンの設定とウェイト調整もUE4でできるといいな~と思います。
モデリングは便利なツールがたくさんありますし、多数のツールを行き来できるので良いとして、
その後の、メッシュと骨の関連付けから、ウェイト調整してモーションを作成するまでの流れは、たいてい一つのツール上で完結する前提になっているような感じなので、DCCツールつかわずにUE4だけでできちゃえばとても便利になりそうです。
今後の
UE4の進化が楽しみです。