前回はBlenderで作成したオブジェクトをUnityにインポートし、マテリアルを追加しました。
今回はUnityのマテリアルにテクスチャを適用する上での注意点について説明します。
【Blender】FBXファイルの出力


まず、今回出力するデータの構成を確認します。
親:エンプティノード
子:Mesh_001,Mesh_002
メッシュ名がノード名と同じ状態です。
画像ではテクスチャ付きのマテリアルが適用されています(マテリアル、テクスチャは任意で構いません)
ファイル > エクスポート > FBX
親ノードの名前で.fbx形式で出力します。

Unityの起動
Unityを起動します。
インストールの方法はこちら

FBXファイルのインポート
BlenderからエクスポートしたFBXファイルをインポート(読み込み)します

Assets > Import New Assetsを選択します。

先ほどBlenderから出力した.fbxファイルをインポート(読み込み)します

Assetsフォルダ内にtest_Blender.fbxのモデルが読み込まれました。
読み込まれたノードの確認
アイコン右側の「
」をクリックすると読み込まれたファイルを構成するパーツが確認できます。

Blender側で設定した6つのノード、メッシュ、マテリアルそれぞれが名前と共に引き継がれていることが確認できます。
3Dビューポートで確認
インポートした.fbxファイルを3Dビューポートで確認します。

アイコンを3Dビューポートにドラッグ&ドロップします。
アイコンでは回転値が入っていますが、3Dビューポート上では正常に表示されます。
テクスチャのインポート
Blenderのファイルにマテリアルがアサインされており、且つテクスチャが張られている場合は、テクスチャファイルを同時にインポートすることで、自動でテクスチャもアサインされます。

Assets > Import New Assets
を選択します。

テクスチャを読み込みます(複数選択可能)。
Importをクリックします。

ブラウザ上でテクスチャアイコンが追加され、fbxファイルのアイコンにテクスチャが適用されました。

3Dビューポートの表示にテクスチャが反映されました。
BlenderとUnityのマテリアルの違い
3DビューでBlenderとUnityの表示結果を比較すると以下のようになります。


画像では少々分かりづらいのですが、結論から言うと
カラー(color)、ノーマル(normal)
の値が反映されているのに対し、
メタリック(Metallic)、粗さ(Roughness)
の値が反映されていません。
テクスチャの適用状態の確認

Assetsのアイコンから外側のマテリアル(Pastic_Mtl)をクリックしてInspecterで詳細を確認します。

カラー(color)、ノーマル(normal)
のテクスチャは反映されているのに対し、
メタリック(Metallic)、粗さ(Roughness)
のテクスチャの値が引き継がれていないことが分かります。
メタリック(Metallic)、粗さ(Roughness)のテクスチャを適用するスロットが無いためです。
マテリアルは新規作成する必要がある
すべてのマテリアル情報を引き継げない理由
BlenderのプリンシプルBSDFとUnityのURP(Universal Render Pipeline)の間に互換性がないためです。
現状、3DCGソフトはオブジェクトデータには互換性がありますが、マテリアルを他ソフト間で引き継ぐことが出来ません。マテリアルの表示(シェーダー)方式やレンダラー(描画計算)のやり方が異なるためです。
そこで、Unity上でマテリアルと一部のテクスチャを新規で作成する必要があります。
ソフトウェアの垣根を越えて設定を引き継げるMaterialXという規格もあります。
環境構築や最適化の問題を考慮して今回は導入を見送りますが、興味がある人は調べてみてください。
一部のテクスチャを新規で作成する方法
ここでは、Unity用に新たに用意するテクスチャ
MetallicSmoothness(メタリック(Metallic)+滑らかさ(Smoothness))
の作成方法として、
の2つを説明します。ご自身の環境と状況に併せてお選びください。
Substance 3D PainterでUnity用のテクスチャを出力する
現時点で一番効率的と思われる方法は、Substance 3D Painterに代表されるテクスチャリングソフトからUnity用のテクスチャを出力することです。
事前にインストールとライセンスの取得が必要になります。
質感の作成をSubstance 3D Painterで行い、一括でテクスチャを出力することになるので、ソフトに関する最低限の知識が必要になります。
一度テクスチャリングソフトで作成したマテリアルは、BlenderのプリンシプルBSDFやUnityのURP(Universal Render Pipeline)は勿論のこと、MayaのAiStandardSurface、UnrealEngineのPBRシェーダーなどほぼすべてのテクスチャに出力が可能です。
Unity用テクスチャの書き出し方法
今回はSubstance 3D Painterで作成したことを想定して、Unity用のテクスチャを出力します。

ファイル > テクスチャの書き出し
を選択します。

出力テンプレートから
Unity Universal Render Pipeline(Metallic Standard)
を選択します。
書き出しをクリックします。

BaseMap(カラー(BaseColor))
MetallicSmoothness(メタリック(Metallic)+滑らかさ(Smoothness))
Normal(ノーマル)
Emissive(発光(今回は不使用))
其々のテクスチャが出力されます。
新規マテリアルを追加の項目に移動して、上記テクスチャをUnityマテリアルに適用します。
PhotoshopでUnity用のMetallicSmoothnessテクスチャを作成する
- Substance 3D Painter等のテクスチャリングソフトで質感を作成していない
- BlenderのプリンシプルBSDFシェーダーのテクスチャのみを所持している
上記の場合はAdobePhotoshopなどの画像ソフトでUnity用のテクスチャを作成することが出来ます。
手続きが少し複雑になります。頑張ってついてきてください。
Blender用のメタリック(Metallic)粗さ(Roughness)テクスチャからUnity用のMetallicSmoothnessテクスチャを作成する
BlenderのプリンシプルBSDFシェーダーのメタリック(Metallic)と粗さ(Roughness)をUnityのURP(Universal Render Pipeline)で反映させるためには、画像編集を行う必要があります。
具体的には
- 粗さ(Roughness)の画像を反転して、滑らかさ(Smoothness)の画像に変更
- メタリック(Metallic)の画像の透明度に滑らかさ(Smoothness)の画像を設定
- MetallicSmoothness(メタリック(Metallic)+滑らかさ(Smoothness))画像をPngファイルで保存
という工程を行います。


粗さ(Roughness)の画像とメタリック(Metallic)の画像を用意します。
粗さ(Roughness)の画像を反転して、滑らかさ(Smoothness)の画像に変更
Blenderで使用する粗さ(Roughness)パラメーターの代わりに
Unityでは、滑らかさ(Smoothness)を使います。
この違いはシェーダーごとの方言のようなものと考えて構いません。
粗さ(Roughness) 0滑らか 1粗い
滑らかさ(Smoothness) 0粗い 1滑らか
つまり
滑らかさ = 粗さ の反対
ということで、画像の階調を反転して、滑らかさ(Smoothness)マップを作成します。
Photoshopによる階調の反転
画像編集にはAdobePhotoshopを使用します。皆さん使い慣れた画像編集ソフトを使用してください。

粗さ(Roughness)の画像を開きます。

イメージ > 色調補正 >階調の反転(Ctrl+I)を選択します。

滑らかさ(Smoothness)マップが作成されました。
滑らかさ(Smoothness)画像をコピー

全画面選択(Ctrl+A)した後
滑らかさ(Smoothness)画像をクリップボードにコピー(Ctrl+C)します。
メタリック(Metallic)の画像の透明度に滑らかさ(Smoothness)の画像を設定
メタリック(Metallic)の画像を開く

次にメタリック(Metallic)の画像を開きます。(滑らかさマップと色が似ているので注意してください)
レイヤーマスクの作成
次にレイヤータブを開きます。

「レイヤーマスク」ボタンを押します。

作成されたレイヤーマスクをクリックします。
画面がマスク(白い状態)に変化します。
滑らかさ(Smoothness)画像をペースト

全画面選択(Ctrl+A)した後
先ほどクリップボードにコピーした滑らかさ(Smoothness)をペースト(Ctrl+v)します。

画像レイヤーをクリックします。
滑らかさ(Smoothness)がメタリック(Metallic)の画像にレイヤーマスクとして半透明化されたことを確認します。
MetallicSmoothness画像をPngファイルで保存
上記のようなアルファチャンネルを含まない形で透明度を保存するファイル形式として、.Png形式を使用します。
Png形式の保存には「コピーを保存」を使用します。

ファイル >コピーを保存
を選択します。

ファイルの種類:PNG
を選択して、保存をクリックします。

これでMetallicSmoothness画像をPngファイルで保存することが出来ました。
新規マテリアルを追加
Unityにインポート(読み込み)を行う
出来上がったテクスチャをUnityに読み込みます。
Unityの画面に戻ります。

Assets > Import New Assets
を選択します。

MetallicSmoothness画像を読み込みます。
Importをクリックします。
新規マテリアルを作成
新規マテリアルを作成し、テクスチャ画像を適用した後、先ほどのFBXファイルに適用します。

Assets > Create > Material
を選択します。
新規マテリアルがブラウザ内に作成されます。

ファイル名を変更します。
今回はメッシュと同じ名前+mtlというルールで
”mesh_001_mtl”とします。
マテリアルの適用

マテリアルアイコンを3Dビューポート上のFBXファイルにドラッグ&ドロップで適用します。
テクスチャの適用

マテリアルをクリックしてInInspecterに詳細情報を表示させます。
テクスチャを左側の四角いソケットにドラッグ&ドロップします。
Base Map →カラー画像
Metalic Map →メタリック+滑らかさ(MetallicSmoothness)画像
Normal Map →ノーマル画像
マテリアルの確認

左がMetaric Map(MetallicSmoothness画像)適用前、右が適応後です。
特に足場のサビた部分で反射の値が弱まっていることが確認できます。
まとめ
今回はBlenderからfbxファイルを出力して、Unityでオブジェクトを読み込みました。
同時に、テクスチャが適用されたマテリアルの読み込みもトライすることで、BlenderとUnityではシェーダーに互換性がないことを確認しました。
新たにテクスチャを持ったマテリアルを作成する方法として、
Substance 3D PainterからUnity用のテクスチャを出力する方法
Blender用のメタリック(Metallic)粗さ(Roughness)テクスチャからUnity用のMetallicSmoothnessテクスチャを作成する方法
の2種類について言及しました。
Unity側で新規マテリアルを作成し、Unity用のテクスチャを適用することで、Blender側で設定した質感とほぼ同等の質感を再現することが出来ました。
非常にざっくりと説明したので、まだまだ詳細に説明したいところはありますが、マテリアル作成の要点はつかめたと思います。
このチュートリアルがみなさんのUnity開発の一助となれば幸いです。