BLOGブログ

2017.08.29UE4UE/ Material

FBXインポートのマテリアルの新機能

こんにちは。テクニカルアーティストの黒澤です。

以前、FBXのインポートについて記事にしたのですが、UE4のアップデートによりずいぶん機能が拡張されました。今回はアップデートにより加わったマテリアルのインポート設定について書こうと思います。

公式サイトでは以下のページに記載されています。
FBX インポート オプションのリファレンス

 

このアップデートにより、FBXファイルをインポートする際にベースマテリアルが設定できるようになりました。
新規にオブジェクトをインポートすると、オブジェクトのマテリアル名に合わせたマテリアルインスタンスが自動的に生成さます。また、同名のマテリアルがすでにプロジェクト内にある場合にはそちらが割り当てられます。アセットごとに専用のマテリアルを毎回作るということは工数的にも負荷的にも現実的ではなくインスタンスになるケースが多いので、実用に即した非常に使える機能だ思います。

ベースマテリアルの設定

ベースマテリアルは以下のように設定しました。ベースカラーとノーマルにちょっとした調整機能をつけておきました。

新規アセットを読み込む

SK_MannequinをUE4から書き出し、Mayaで頭を付け替え新規マテリアルを割り当てます。このさい頭以外のマテリアル名はSK_Mannequinのままにしておきます。

インポート設定は以下のようにしました。BaseMaterialNameにBT_Baseを設定すると、それぞれのPropertyのスロットにマテリアルが持つパラメーター名を選択できるようになります。
(ちなみにマテリアルごとにどのようなパラメーター名を設定したかは保存されますので再設定不要です)

UE4に読み込んだ結果がこちらになります。
MI_NekoHeadという新規のマテリアルはBT_Baseのインスタンスとして作られました。M_UE4Man_ChestLogoとMI_NekoHeadは、SK_Mannequinのマテリアルとしてすでにプロジェクトに入っているマテリアルがそのまま割り当てられます。

欠点

非常に便利な機能なのですが(FBXの仕様のために)いくつか残念な点もあります。

ますは元になっているFBXのマテリアルの仕組みがPBRを前提にしていないことです。マテリアルにテクスチャを接続してインポートできる要素がBaseTexture、BaseNormalTexture、BaseEmissiveTexture、BaseSpecularTextureの4枚で、MayaのPhonegシェーダーではそれぞれカラー、バンプマッピング、スペキュラカラー、白熱色にあたります。これはPBRの見た目とは大きく異なります。

また、それぞれの要素が別のテクスチャになっているのでデータ効率的が悪くなります。Mayaの見た目を犠牲にして統合したテクスチャをなにかのスロットに使用すれば問題ないのですが、ますますMayaの見た目がUE4と異なってしまいます。

 

マテリアルの順番を固定する方法

 

FBX マテリアル パイプライン

上記のドキュメントに「4.14 時点で、マテリアルの順序を指定するためのSkin##の命名規則は不要になりました。」と書かれています。

これはマテリアルスロットにソースデータのマテリアル名が割り当てられるようになったため、再インポートのたびにエレメント番号が変わらないということを言っているのだと思います。しかし再インポートでなくとも、アセットのエレメント番号を揃えておきたいことはあります。

たとえばキャラクターモデルが複数のマテリアルを持ち、特定のエレメントのマテリアルにだけ処理を加えたいときなどは、Skin##の命名規則はまだ有用です。以前の検証ではSkin##をつけたマテリアルはマテリアル名が強制的に6文字になってしまうために、いまいち使いにくいという結論になりました。

こちらのマテリアルの命名の条件もアップデートで変わっていたので再検証してみます。

 

Mayaで以下のデータを用意しました。

マテリアル名は番号順に以下のようにつけました。

  1. IceCreamMaterialChocolate_skin01
  2. IceCreamMaterialMint_skin02
  3. IceCreamMaterialUjiGreenTea_skin03
  4. IceCreamMaterialMangoSolve_skin04
  5. IceCreamMaterialRamuneSoda_skin05
  6. IceCreamMaterialStrawberry_skin06
  7. IceCreamMaterialVanilla_skin07
  8. IceCreamMaterialGrapeSoda_skin08
  9. IceCreamMaterialBloodOrange_skin09

せっかくなのでネコちゃんとおなじように、マテリアルインスタンスを生成して読み込んでみました。ベースマテリアルは以下になります。

インポート設定はこのようにしました。

インポートした結果、マテリアルのエレメントは以下の順番になりました。
_Skin##で指定した通りの順番にエレメントが並んでおり、マテリアル名が欠けることもなくなっていますね!

保存