rarilog

主にゲーム制作に関することを書いていきます

2015/03/14 : Blender UnrealEngine

Blender で UE4 用 3D モデルを作って Import するまでに守るべきことまとめ

Blender で 3D モデルを作成して FBX として Export し、UE4 に Import するまでの過程で、守らなければならないこと・行った方がよいことについて解説していきます。

ここでは、Bone (Blender: Armature, UE4: Skeleton) と複数の Animation (Blender: Action, UE4: Animation Sequence) を持つキャラクターモデルを題材にします。つまりコイツです。

(Blender 2.73a、Unreal Engine 4.7.2 を使用しています)

目次

100 倍 Scale で Mesh を作成する

Blender で UE4 向けのモデルを作るにあたって、絶対に考慮しなければならないのが Scale 単位の違いです。Blender では 1 Unit = 1 m であるのに対し、UE4 では 1 Unit = 1 cm なので、普通にモデルを作成して Export / Import すると、サイズが 1/100 になってしまいます。

これの対処法としては、以下の 4 つが考えられます。

  1. (Blender) 最初から : 100 倍の大きさで Mesh を作成する
  2. (Blender) Export 直前 : (通常の大きさで作っていた Mesh や Armature を) 手作業で 100 倍の大きさにする
  3. (Blender) Export 時 : オプションで 100 倍の大きさにして Export する
  4. (UE4) Import 時 : オプションで 100 倍の大きさにして Import する

結論から言うと、現状では 1 の方法で対処するのが無難だと思われます。2 は特に Action の修正が地獄なので避けるべきです。また、3 と 4 では以下のような問題が発生することを確認しています。

  • Skeleton 編集モードにおいて、回転に必要となる角度まで 100 倍になる問題
  • PhysicsAsset の自動作成が上手くいかない問題
    • 3 の場合、本来の 100 倍のサイズで作成されてしまう
    • 4 の場合、エラーが発生して作成されない

さて、1 の方法で Mesh の作成を行うのに、いちいち「123 m のものを作りたいから、100 倍して 12.3 km に…」などと計算するのは面倒です。Blender の Scale 単位を UE4 に合わせることで、この問題を解決します。

Properties Editor → Scene → Units にて MetricDegrees を選択し、Scale0.01 に設定します。

これにより、頂点の座標や辺の長さが実際に作成されているデータの 1/100 で表示されるようになります。つまり、この設定を行えば、Blender 上で 1 m とされるもの (実際のデータは 100 m) は UE4 上でも 1 m になるので、Scale の問題を気にする必要がなくなります。

作成済オブジェクトの実データの Scale を変更するものではないので注意です。Mesh 作成開始前に設定しないと意味を成しません。

この設定を行った後、以下のように遠くの Object や Grid が表示されなくなった場合は、クリッピング距離を変更する必要があります。

3D View → Properties (N を押すと出てくるアレ) → View → ClipStartEnd の値を適切な値に変更します。普通は既に入っている値の 100 倍に設定すればよいはずです。

遠くの Object の表示を直すには End を変更するだけでよいのですが、Start の値が小さすぎる場合も表示の不具合を引き起こすことがあるので、両方設定し直すのがよいでしょう。

なお、Camera にも (3D View のものとは別に) クリッピング距離の設定があるので、Camera を使っているのであれば変更します。設定場所は Properties Editor → Camera → Lens → Clipping です。

キャラクターの正面が -Y 方向、上が Z 方向を向くように Mesh の作成を行う

Blender で普通に Mesh の作成を行えば、この向きになるはずです。

Scale とは異なり、座標系の違いに関しては Export / Import 時に対処すればよいので、Mesh 作成時にわざわざ変な向きで作ったりする必要はありません。

Object の Transform をニュートラルにする

基本的な話ですが、Object (Mesh 及び Armature) の Transform は最終的にはそれぞれ

  • Location : (0, 0, 0)
  • Rotation : (0, 0, 0)
  • Scale : (1, 1, 1)

となるように Apply (Ctrl + A) もしくは Clear (Alt + G, Alt + R, Alt + S) してください。

スムージング設定の表示反映のための Edge Split Modifier は Export 前に削除する

Blender において、スムージングの設定と表示への反映を行うには、以下の手順を実行します。

  1. シャープにしたい辺を選択して Ctrl + E → Mark Sharp を実行し、Sharp Edge に設定する
  2. Mesh のすべての面を選択し、Ctrl + F → Shade Smooth を選択する
  3. Mesh に対して Edge Split Modifier を Stack し、Edge Angle のチェックをオフに、Sharp Edges のチェックをオンにする

これで、Sharp Edge に設定された辺のみがシャープに表示され、その他の辺はスムーズに表示されるようになります。

実は、Export する FBX にスムージンググループ情報を含めたいだけであれば、手順 3 を実行する必要はありません。Blender では Sharp Edge の設定を行うだけでは見た目に変化がないので、表示反映のために手順 3 を実行する必要があるというわけです。

FBX を Export するという目的からすると、手順 3 は Edge Split Modifier によって Mesh の頂点数を無駄に増やす作業でしかありません。スムージング設定の表示確認が終わったら、Edge Split Modifier は削除してしまいましょう。

次項で Edge Split Modifier を削除すべきもう 1 つの理由について解説します。

Shape Key (Mooph Target) を利用する場合は、頂点数の増減を行う Modifier を Stack したままにしない

頂点数の増減を行う Modifier を FBX Export 時のオプションで Apply すると、Shape Key が書き出されない1ようです。書き出されない場合でも特に警告メッセージが表示されたりしないので、原因がわかりにくかったりします。

頂点数の増減を行う Modifier としては、Subdivision Surface Modifier や、前項で言及した Edge Split Modifier などが挙げられます。これらの Modifier は Export 前に手動で Apply するか、不要であれば削除しましょう。

頂点数が維持される Modifier に関しては、Stack したままで問題ないようです。Lattice Modifier の FBX Export 時 Apply で Shape Key が書き出されていることを確認しています。

Shape Key の Value は Export 前にすべて 0 にする

Shape Key の Value0 以外の値にした状態で Export すると、その状態が Value = 0 として扱われるようになってしまいます。Export 前に必ず 0 に設定しておきましょう。

Texture の幅と高さは 2 のべき乗にする

Texture の幅と高さが 2 のべき乗になっていないと、UE4 上で Mipmap が作成されなくなり、これに伴って Texture Streaming2 も行われなくなります。

特別な理由がない限り、2 のべき乗サイズで作成しましょう。なお、正方形である必要はないようです。

すべての Action に Fake User を設定する

Blender では 1 つのプロジェクトファイル (.blend) に複数のアニメーション (Action) を詰め込むことができますが、Armature の Animation Data Container から参照される Action は一度に 1 つだけです。

そして、Blender では、他から全く参照されていない要素はプロジェクトファイルに保存されません。つまり、プロジェクトファイルを閉じたが最後、今参照されている 1 つを除く残りすべての Action は消えてしまいます。

Animation Data Container から参照されていない Action もプロジェクトファイルに保存するには、Fake User の設定を行う必要があります。Dope Sheet → Action Editor → Browse Action to be linked で Action を選択し、F ボタンを押します。これをすべての Action に対して行います。

こうすれば、「Fake User がすべての Action を参照している」という扱いになるため、すべての Action がプロジェクトファイルに保存されます。

Material や Bone などの名前に日本語を使わない

Material や Bone、Shape Key (Morph Target) などの名前に日本語を使うと、現時点では UE4 への Import ができなくなったり、その他不具合が発生したりするようです。日本語名を付けるのは避けましょう。

Blender を日本語 UI で使っている人は、ファイル → ユーザー設定… → システム → 翻訳 → 新規データ をオフにしておきましょう。これがオンだと、新規作成した Material などのデフォルト名が日本語になってしまい、修正の手間がかかります。

なお、UE 4.8 からは、FBX ファイル内の日本語サポートが行われる予定とのこと。

FBX Export 設定を適切に行う

自分が使っている Blender FBX Exporter の設定は以下のとおりです。

設定の中で一番重要なのが、FBX の Version 指定です。絶対FBX 6.1 ASCII にしてください。

もう片方の Version である FBX 7.4 binary を選ぶメリットは今のところ確認できていません。FBX 6.1 ASCII では問題なく Export できるデータでも、 FBX 7.4 binary で Export するとアニメーションがガタついたり、壊れた FBX が書き出されたりするケースを確認しています。また、書き出される Bone 構造が両者では異なる3ようです。

Selected Objects のチェックをオンにした場合は、Export したい Armature と Mesh の両方を選択してから Exporter を開く必要があります。Mesh 作成のために補助的な Object を利用していたり、参考として他のキャラクターの Object を Append している場合などは、このオプションをオンにして Export 対象を指定できるようにする必要があります。

座標系設定は -Z Forward, Y Up にします。これで、Animation Sequence が正しい向きで作成されます。Skeletal Mesh の向きはこのオプションの影響を受けません。こちらに関しては UE4 での Import 時の設定で正しい向きにします。

Sharp Edge の指定を行っているという理由で SmoothEdge にしていますが、Face にしても結果に変化がないような気が…? Off にすると UE4 での Import 時に以下のような警告が出るので、スムージング処理が必要なくても EdgeFace かのどちらかにしておきましょう。

自分は Default Take 相当のものを Action として作っているので、Default Take のチェックはオフにしています。

FBX Import 設定を適切に行う

(Shape Key (Mooph Target) を利用する場合は、次項の設定で Import してください)

自分が使っている UE4 の FBX Import 設定は以下のとおりです。

Mesh → Use T0As Ref Pose のチェックをオンにすれば、Blender にてキャラクターの正面が -Y 方向、上が Z 方向を向くように Mesh を作成した場合において、Skeletal Mesh が正しい方向を向きます。オフだとコケます。

複数作成した Animation の再生時間がそれぞれ異なる場合は、Animation → Animation LengthAnimated Time に設定する必要があります。

Texture はどのみち後から追加で Import する必要があるので、Material → Import Textures のチェックはオフにしてありますが、オンでも特に問題ないと思われます。

Shape Key (Mooph Target) を利用する場合は、Import を 2 回に分けて行う

前項のように一度にすべての要素の Import を行うと、Mooph Target に不具合が発生する場合があるようです。

この現象を回避するために、Import を 2 回に分けて行います。

まず、以下のような設定で Import を行います。Mesh → Import Mooph Targets のチェックをオン、Animation → Import Animations のチェックをオフにします。その他は前項で示したものと同じです。

これで、Skeletal Mesh、Material、PhysicsAsset、Skeleton が Import されました。

次に、Animation Sequence の Import を行います。Mesh → Import Mesh のチェックをオフにし、Mesh → Skeleton に先ほど Import した Skeleton を指定します。

これで、Animation Sequence が追加で Import されました。各 Animation Sequence において Mooph Target の Weight を変更し、異常がないことを確認してみてください。

終わりに

誰かが作った MMD モデルやユニティちゃんを Import して使うのも楽しいですが、Blender のような素晴らしい 3DCG ソフトウェアが無料で使えるわけですから、自分でモデルを作って使う人がもっと増えてもよいのではないか、と思っています。

これまで見てきたように、Blender で作ったモデルを UE4 に持ち込むまでの過程には、様々な注意点・ハマりどころ・罠・ が存在します。これらを回避し、皆さんの自作モデルを UE4 上で活躍させるために、この記事を活用していただければ幸いです。

  1. > Currently shape keys will only be written if modifiers are disabled, or if the modifiers keep the same number of vertices (Extensions:2.6/Py/Scripts/Import-Export/Autodesk FBX - BlenderWiki より)

  2. > テクスチャストリーミングは、テクスチャをミップマップレベルが高い(粗い)ものから表示して徐々に高精細にすることでロード時間を短縮しようとするもの (テクスチャのインポートについて - ゲームエフェクトデザイナーのブログ (新) より)

  3. FBX 6.1 ASCII では Armature と同じ名前の Bone が Root Bone として作成されるので、Armature を複数作成していない限りは単一 Root Bone 構造になります。FBX 7.4 binary では Armature の子要素 (子孫要素ではなく直接の子) の Bone が Root Bone として設定されるので、子要素が複数ある場合は複数 Root Bone 構造となり、単一 Root Bone 構造のみをサポートする UE4 では Import に失敗します。