CrossRoad

XRを中心とした技術ブログ。 Check also "English" category.

Blenderでテクスチャ付きfbxを出力し、Unityでテクスチャ付きfbxを読み込む方法

最近Project PLATEAUの3DCGモデルを軽量化する方法をまとめており、表示結果の確認のためにUnityも使っています。

ただ、Blenderでfbxで出力するときにテクスチャが入らなかったり、Unityで読みこむとテクスチャが反映されなかったりという問題がありました。色々探しましたが、すぐに見つかる情報が古いものが多かったので、改めてまとめてみました。

動作確認環境
・Blender 2.93
・Unity2019.4.12f1

なお、使用したPLATEAUのモデルは、東京都23区の533936の一部です。

3D都市モデル(Project PLATEAU)東京都23区(FBX 2020年度) - 533936

1. Blenderでfbx出力 (テクスチャあり) する方法

Blender2.79のときはわかりませんが、少なくともBlender2.93では、Blender単体でテクスチャ付きのfbx出力ができました。
こちらの解説を参考にさせていただきました。

www.youtube.com

具体的には、File > Export > FBX を選択して出力先と設定が書かれた画面を表示させます。この画面において、Path ModeをAutoからCopyに変更し、その横にある書類?のようなアイコンを1回クリックします。

Export setting as fbx on Blender2.93

このアイコンをクリックすると、テクスチャが埋め込まれるようです。

あとの設定は任意です。これで出力したfbxをAutodeskのFBX Reviewで表示させた結果がこちらです。

A fbx format file on FBX Review

FBX Reviewのダウンロード場所はこちらです。

FBX Review | Cross-platform 3D model viewer | Autodesk

なお、YouTube動画でのコメントによると、Blenderを使って自分でモデリングしたものにテクスチャを当てている場合、"File > External Data > Pack All into .blend"から、使用したテクスチャをBlenderのプロジェクトファイルに埋め込む必要があるようです。

Pack All into .blend setting on Blender2.93

今回はPLATEAUの3DCGモデル (fbxですでにテクスチャが埋め込まれている) を使ったため、この処理を実行しても"No new files have been packed"というメッセージが出るだけでした。PLATEAUの3DCGモデルを使う場合は不要ということですね。

2. Unityでfbx (テクスチャあり) を読み込む方法

fbxが埋め込まれている3DCGモデルをそのままUnityにインポートすると、このようになります。

Just importing fbx data into Unity2019

テクスチャが表示されておらず、全体的にクリーム色?のようになっています。

テクスチャを表示させるには、インポートした3DCGモデルをProject Viewで選択して、Locationが"Use Embedded Materials"となっていることを確認します。

次に、その下のExtract Textures..を選択します。

Select Extract Texture button for importing fbx model on Unity2019

Extract (抽出する) 先フォルダをAssets以下の任意の場所に指定すると、テクスチャが反映されます。

Reflect Textures on imported 3DCG model on Unity 2019

しかし、まだ色が実際と異なっています。色を正しく反映するには、materialから指定する必要があります。
まず、同じようにmaterialをExtractします。次にExtractしたmaterialをProject Viewで全て選択して、InspectorからShaderの設定を変更します。具体的にはStandardから、Ulint > Textures に変更します。

Changing shader settings from Standard to Ulint/Textures on Unity2019

すると、このように色合いが合います。

Changed shader setting as Ulint/Textures on Unity2019

3. おわりに

基本的な話ですが、探すのに時間がかかったので備忘録も兼ねてまとめました。
現在、PLATEAUの3DCGモデルを軽量化、位置調整するBlenderのスクリプトを作っています。今回の調査で出力方法の目処もたったので、もう少ししたら公開します。