当たったらどうすんだよ

当たらなければどうということはない

修正版!2018年編:Blenderで作った3DアセットをUE4で利用するためのTipsあれこれ

前回記事から結局少し時間がかかってしまいました。

その間に、新潟県妙高市から引っ越して現在は大阪市のIndie-us Games所属アーティストになったりとか、公私の両面で大きな動きがありました。

この記事を書いている今日(2018年6月10日)から見て、一週間さかのぼると…

www.slideshare.net

UE4のアーティスト向け勉強会が大阪なんばで開催され、そこで登壇させていただきました。当日は技術論やTipsには重きを置かず、アーティストとしてのモノの見方や人生経験などをベースに、若いUE4アーティストやエンジニアの皆さんに、ぼくというアーティストのプロフィールを知っていただき、考えていることや目指していることを伝えることから「IP(知的財産権)を立ててコンテンツを作ること」についてお話しさせていただきました。

スライドの内容については割愛しますが、ブログではあらためて

BlenderUE4の連携で、問題ってなにがあるの?

について、あらためて紹介し、その対策などを書きたいと思います。

f:id:kanianthi:20180610152644p:plain

さて、いきなり結論ですが…少なくともBlender2.79b(最新安定版)でキャラクターをモデリングしてFBXに書き出し、UE4でアセット化するにあたって…

ほぼすべての問題が解決しています!

と、もう言っていいんじゃないかなー、と思います。
ただし、無条件にBlender最新版を利用すればすべての問題をなくせるわけではありません。前回の記事でも紹介した「Autorig Pro」の導入は必須と言えます。

blendermarket.com

AutoRig Proは作者によるアドオンの更新も頻繁で、今では動作の安定性を含めて、当初は問題だった不具合がほぼFixされています。

  • 肩や足のリム(関節のチェーン)が捻じれてしまう問題
  • メッシュとボーン(スケルトン)のスケール問題
  • ルートモーション
  • UE4ヒューマノイドリグとの互換性
  • シェイプキーのボーン連携(シェイプキードライバ)
  • 補助ボーンやカスタムボーンの追加

上記の問題のうち、UE4マネキン(グレーマン)の肩から腕のボーンのデフォルト回転と、Autorig Proが生成するFBXとの間で違いが発生してしまうことから、腕がねじれた状態でインポートされてしまう問題にはずいぶん悩まされたのですが、ユーザーが必死で解決法を探っている間に、アドオンそのものが更新されて解決されちゃいましたw

Autorig Proの導入から使用法については、作者によるドキュメント

www.lucky3d.fr

が上記にあります。

英文ですが、図表も動画も豊富にありますので、じっくり読み進めていただければ使用法については網羅できているのかなー、と思います。また、折をみてこのブログでもAutorig Proの使用法を解説できればしようかな、と考えています。

さて…それではBlenderの標準機能だけでキャラクタアセットを作成してUE4で使いたい場合、どのような問題が解消できないのでしょうか。以下は、これを解説します。

Blenderの標準機能だけでは解消できない(か、Fixが難しい)問題点

  • メッシュとアーマチュアのスケール問題(難易度C)
  • ルートボーンに回転が入ってしまう問題(難易度A)
  • UE4ヒューマノイドリグ互換にするのが面倒くさい(難易度D)

f:id:kanianthi:20180610160457p:plain

最初のお約束として、Blenderから標準のFBXエクスポーターでキャラクタ(スケルタルメッシュ)を出力する際、Armatureの名前をデフォルトのままで使用してください。↑のスクショにあるように「茶色の厚揚げ豆腐っぽいオブジェクトアイコン」下の名前欄をデフォルトのままにします。アーマチュアを表す人型アイコンの場所ではありませんので注意しましょう。

なぜなら、UE4でFBXを読み込む際「Armatureという文字列を検索して、こいつがスケルトンなんやで!」と認識しているからです。このお約束を守っていれば、アーマチュアの一番上の階層に「root」ボーンを設置すると、それが正しいrootボーンとして認識され、ルートモーションを使うことができるようになります。

f:id:kanianthi:20180610161150p:plain

f:id:kanianthi:20180610161400p:plain

また、rootボーンは「編集モードで」必ず原点に設置し、すべてのボーンの親になるように作成します。この工程を守ることで、UE4に読み込んだ際にrootボーンの位置情報を「0,0,0」にすることができます。

次に…ここからが超重要です!よく読んで実践して理解してください。

まず、上記のままの「棒状キャラの棒ちゃん」をUE4に読み込んでみます。
すると…

f:id:kanianthi:20180610170051p:plain

↑スケルトン編集画面でrootボーンを選択した状態です。

f:id:kanianthi:20180610170204p:plain

この状態でトランスフォームを見ると…ぎゃー!!!

rootボーンのローカル回転に89.999985(≒90度)の数値ががががが!!!

実はこの状態でも「ゲームキャラとしてアニメーションを動かすだけなら」特に問題はありません。が、しかし…UE4シーケンサーに動きを録画して編集することで、カットシーンなどを作ろうとすると…このroot回転がベイクされてしまい、キャラクタが倒れてしまうのです!

また、このスクショではスケール値も1.1.1で正常に見えますが…実はBlenderでセットアップする際に一手間加えています。
これは、先に紹介したUE4勉強会のスライドでも解説しているのですが…

  1. まず、普通にメッシュにアーマチュアを関連づける(自動ウエイトやアーマチュア変形など)。このとき、アーマチュアもメッシュもすべてのトランスフォームをctrl+aで「適用(mayaでいうフリーズ)」しておくこと。身長160センチのキャラを作るなら、Blenderでも1.6メートル(単位はメートル系で1.0倍)にしておく。後からグズグズいわない!
  2. アレントできたら「オブジェクトモード」でアーマチュアに100倍スケールをかける。XYZすべてに100を入力すれば良い。
  3. 身長100倍に巨大化したキャラクタのアーマチュアにトランスフォーム適用する。スケールは1.0になる。大きさは変わらない。
  4. 再びアーマチュアに0.01倍スケールをかける。キャラクタの大きさが元に戻る。
  5. メッシュのスケール値を確認する。正しく手順を踏んでいれば100が入ったままの状態になっている。
  6. メッシュのスケールを確認したらctrl+aで適用する。スケールが1.0になる。
  7. アーマチュアのスケール値は0.01のまま、FBX出力する。Blender標準のFBXエクスポートの設定は以下の通り。
  8. f:id:kanianthi:20180610171754p:plain

これでいけます。

以上の手順でスケルタルメッシュのスケール問題は解決します…が先のスクショの通り、ルートボーンの角度問題だけは解決策が分かりませんでした…。

しかしついに…

Blenderのrootボーンにデフォルトで角度が入ってしまう問題を解決!

したので紹介します。

f:id:kanianthi:20180610172210p:plain

↑これ。

これじゃわかんねーよ!!!
って言われると思うので解説しますねw

一般論になりますが、リグを考えるときrootはすべてのボーンの親になります。なので、キャラクタの骨格やデフォルトポーズに関係なく、そのアセットの原点として正しく機能する必要があります。逆にいえば、rootボーンを骨格として組み込む必要というのはなくて、ルートモーションを仕込むみたいな「特別な必要性」がない限り、お前はいつもそこにいてじっとしてろよな!って存在なのです。

そこで、rootボーンから接続された骨がない状態をまず作ります。ボーンの編集モードに入り、alt+pで親子関係を解除したり接続解除ができますので、rootを背骨やその他の骨と接続解除し、自由に動ける状態にしておきます。このとき、rootがすべての骨の親である状態は維持する必要があります。

f:id:kanianthi:20180610173111p:plain

↑のスクショで選択状態なのがrootです。
3DマニピュレータのY軸方向を向いているのが分かります。r+xxでローカルX軸回転で「真後ろを向かせた状態」です。ctrlを併用すると角度スナップが効くので簡単です。

これがつまり「UE4にインポートしたときに-90度転んだ状態」なので、先のスクショで見せた「90度転んだ角度でインポートされてしまう」問題を相殺するのです。

ただし…

f:id:kanianthi:20180610173453p:plain

rootボーンのロール角を「必ず0」にしておくことも忘れないでください。ここになにか値が入っているとうまいことUE4にインポートできません。

これらの手順を踏んで正しくFBX出力し…UE4にインポートすると…

f:id:kanianthi:20180610173833p:plain

f:id:kanianthi:20180610173851p:plain

やったー!!!

これでBlenderで作ったキャラクタを正しいトランスフォームでUE4にインポートすることができました!これならシーケンサーでアニメーションをベイクしても問題が起きることはありません!

以上、今回の記事はけっこう大事なことを検証しましたのでお役立てください!