使用ソフトウェア | バージョン | 備考 |
---|---|---|
Unreal Engine | 5.2.1 |
2023/07/02:「まとめ」「プラグインで対応できる?」の項目を追加。
BlenderからFBXでエクスポートを行いUnreal Engine(以下UE)でインポートすると、ラフネス等が正しく設定されない。
何がダメなのか、どうすれば良いのかを検証する。
また、透明マテリアルについても検証した。
「分かること」と書いたが、結局なんもわからなかったので注意。
どうやらノードの接続先がUEに読み込んだ際に次のように書き換えられているようだ。
Blenderにて次のように上から順番に数字を入れたテクスチャをマテリアルに挿していく。
これをFBXで出力してUnreal Engineでどう読み込まれるのかをテストする。
全25ソケットに番号の画像を接続した。
念のため書いておくが、FBX等に出力するときは必ず画像テクスチャのノードだけを使用する。
演算などのノード互換性がなくFBXで扱えないため。
これはFBXに限ったことではなく、汎用的なファイルで出力する場合は基本的にすべてこうなる。
意外に初心者が知らないケースなので覚えておきたい。
では、実際に読み込んでみよう。
次のようになった。
この画像から分かるようにUEで読み込んだ際に接続先が変わってしまっている。
このようにFBXで出力するとつながる先のノードが変わってしまう。
これがFBXを読み込んだ時におかしくなる原因だ。
ただ、ベースカラーとエミッションは正しく設定されている。
別途調査したところノーマルだけ特殊扱いだということがわかった。
上の例からわかるようにテクスチャノードをそのまま繋いでもUEでは認識されないが、次のようなノードを組むとノーマルも正しく引き渡しされていた。
上のノーマルで気づいたかもしれないが、ソケットの色違いを入力してしまっているのがダメな可能性もあるので検証した。
次のように灰色には灰色のノードを接続して検証(灰色はアルファチャンネル単体が入っている)
結果を言えば何も変わらなかった。
これは関係ないようだ。
Blender側では上から順に25枚のテクスチャを差したが、上の通り4枚しか読み込まれないようだ。
これに関してはFBXの仕様も大きく関わっているためBlenderやUEが悪いとは言い切れない。
ただ、後に解説するがアルファ画像に至っては読み込みすらできないのが致命的に思う。
FBXはアルファチャンネルを扱えるはず。
海外のフォーラムを含めこれに関して丸一日調べたが全くもって納得の行く解答が得られなかった。
この問題は2年以上前から指摘されているため恐らく今後も対応することはないだろう。
残念ながら現時点ではインポート後に手動でノードを組み替えてやるほかない。
Blender側でスクリプトを書いてやるという手法も考えられるが、それでは元となるマテリアルを書き換えてしまう。
その回避のために複製してマテリアルを変換して...といった手続きを考えると手間が大きすぎる。
透過マテリアルが正しく反映されない件についても調査した。
つまりAlphaのテクスチャが送られていないことを調査。
私が作ったものではない配布FBXによっては正しく送れるものがあるため。
Blenderで作成したデータは全てこれがOpaque
(不透明)になってしまう。
マテリアル設定のBlend Mode
を変更し出力したが全てにおいてUE側でOpaque
(不透明)で認識されてしまう。
一部フォーラムにBlender側で読み込まれているテクスチャそのものにアルファチャンネルが入っているものが使われているとTranslucent
の透明テクスチャとして認識されるとの報告有り。
しかしながら、透過されたテクスチャを入れたところでなんの変化もなかった。
UE公式が用意しているSend to Unreal
というプラグインを利用してファイル化することなくダイレクトにUEに送ることができる。
こちらは単純なメッシュやデフォルトの設定のみで送る場合は非常に素早くデータを送ることが出来る。
ただ、残念ながら透過テクスチャは送ることができず、上のようにラフネスの問題も解消されていない。
恐らくベースにあるエクスポートプログラムは同じものだと思われる。
さらに、こちらに関しては頂点数が多いモデルを送ろうとするとエラーが出てしまい何度やっても解消できなかった(頂点数を減らすとなぜか通る)
またメッシュの結合(Combine Meshes)などのオプションをオンにしても機能しないため現時点ではFBXで出力したほうが高機能だと考える。
正しく透過マテリアルとして認識するFBXが存在する。
これは私が作ったものではなく配布されているFBXを調査したときに見つけたもの。
それを一度Blenderで開いた後FBX化してUEで読み込むと結局不透明なマテリアルとして読み込まれてしまう。
恐らくBlenderのFBX出力そのものに問題があるのではないかと予想した。
USD, Alembic, Collada等のファイル形式でも試したが、これらも全てダメ。
特にUSDは最新の形式だが、ボーンが入った物をスケルタルメッシュとしては読み込むことができない。
また複雑なマテリアル(1つのメッシュのなかに複数のマテリアル)も上手く渡せなかった。
FBX自体がUEの推奨であり、結局のところこれが一番正しくデータを扱えることがわかった。
以上のことから透過テクスチャを直接UEに投げることは私の検証範囲内では不可能だと結論付けた。
つまりFBXで読み込んだ後、UE側でマテリアルノードを手動で組んでやる必要あり。
Blenderの標準FBX出力は完全ではないとの記述があり、その解決策として次のプラグインが開発されている。
Better FBX Importer & Exporter - Blender Market
こちらは有料プラグインであり、これが使えるかどうかは検証していないため機会があれば試したい。
BlenderからFBXを出力する場合、UE側では次のマテリアルに変換される。
Blender(出力元) | Unreal Engine(出力先) | 備考 |
---|---|---|
Roughness | Metallic | |
Specular | Roughness | |
Base Color | 正しく出力 | |
Emission | 正しく出力 | Emission StrengthではなくEmissionの方 |
Normal | 正しく出力(条件あり) | Blender側でNormal Mapノード通すこと |
Alpha | Blender標準機能で出力不可 | 他のソフトなら出力可能(要調査) |
その他 | 出力不可 | Normalのようなケースがあるので要検証 |
Send to Unreal
を使用しても制限は同様。
長い間放置されているので、今後対応される可能性は低い。
これに関して詳しい情報があればメッセージフォームから気軽に投稿していただければ幸いです。
匿名でも構いません。
調べて思ったのだが、このあたりのDCCツールからUEに持っていく系の記事があまりにも少ない。
おそらく個人クリエータークラスだと自分でモデリングしてゲームに持っていくというワークフローを経由している人口そのものが少ないのではないだろうか。
この記事自体があまり有用だとは思えないが、この現状を鑑みると少しでも同じ境遇のユーザーに役に立てるのではないかと思って記事を書いた。
今後も調査する。