PBRマテリアルを持った形状情報をエクスポートするには ?

ver.20
Shade3D ver.20のPBRマテリアル情報を他のツールにエクスポートする場合、ver.20の段階では対応するエクスポータプラグインはありません。
ver.21のProfessional版では、glTF形式をインポート/エクスポートできるようになりました。
glTFについては「glTFとは ?」もご参照くださいませ。

PBRマテリアルに対応しているファイルフォーマットとして、
Khronos GroupのglTF( https://github.com/KhronosGroup/glTF )、
PixarのUSD ( https://graphics.pixar.com/usd/docs/index.html )、があります。
これは、Shade3D ver.20段階ではエクスポートする標準機能はありません。

また、fbxやobjフォーマット自身はPBRマテリアルに対応していないフォーマットになります。
そのため、他のツールにPBRマテリアル情報を渡す場合は
形状(ジオメトリ)とマテリアルを分けて考え、他ツール側でマテリアル調整を再度行う必要があります。

他ツールにPBRマテリアルを渡す

ここでは、Unity 2019.3にShade3DのPBRマテリアルを渡す例を記載します。
Shade3Dで以下のようなモデリングを行いました。

形状はポリゴンメッシュ1つ、マスターマテリアル「盆 (PBR)」、
4つのイメージ「盆_Base_Color.png」「盆_Normal.png」「盆_Mixed_AO.png」「盆_Roughness.png」で構成されます。

ベースカラー RGB(204, 204, 204)、メタリック 0.0、ラフネス 1.0、屈折率 1.5、透明度 0.0、発光 0.0としました。

また、マッピングとして
「イメージ/ベースカラー」(通常合成)、
「イメージ/法線」(乗算合成)、
「イメージ/ラフネス」(乗算合成)、
「イメージ/オクルージョン」(乗算合成)、を与えています。

FBX形式でエクスポート

この形状を、メインメニューの「ファイル」-「エクスポート」-「FBX」よりFBX形式でエクスポートします。
「形式」タブで「フォーマット」-「バージョン」を「FBX 2012」を指定。
「ジオメトリ」タブで「面の頂点法線を出力」チェックボックスをオン。
「表面材質」タブで「イメージをFBXファイルに埋め込み」チェックボックスをオフにします。

これにより、FBXファイルとイメージファイルは分離して出力されます。
「bon.fbx」として出力し、以下のようなファイル構成になりました。

Unityにfbxファイルをインポート

Unity 2019.3を使用しました。
Projectウィンドウに「bon.fbx」をドラッグしてインポートします。

あらかじめ「Objects」フォルダを作成し、その中にインポートしました。
Projectウィンドウの「bon」を選択し、Inspectorウィンドウの「Materials」を選択。
「Location」を「Use External Materials (Legacy)」に変更、
「Naming」を「From Model’s Material」に変更し、「Apply」ボタンを押します。

ProjectウィンドウではMaterialsフォルダが生成され、「盆.mat」が生成されています。
ここでマテリアルの指定を行うことになります。

Unityにイメージをインポート

Projectウィンドウ上で「images」のフォルダを作成し、この中に参照するテクスチャイメージを入れます。
ベースカラーの「盆_Base_Color.png」、法線マップの「盆_Normal.png」、オクルージョンの「盆_Mixed_AO.png」をインポートしました。

ラフネスである「盆_Roughness.png」はそのままでは使用できないため加工する必要があります。
これは後述します。

Projectウィンドウ上の「盆_Normal.png」を選択し、Inspectorウィンドウで「Texture Type」を「Normal map」に変更し、下にスクロールして「Apply」ボタンを押します。

これで、法線マップが凸凹を付けるための要素として認識されました。

メタリック + ラフネステクスチャを加工する

Unityでは、初期状態では「Standard Shader」というのがマテリアルに割り当てられています。
これは、鏡面反射要素は「Metallic」で指定します。
荒さはラフネス(Roughness)ではなく「Smoothness」で指定します。
「Smoothness」と「Roughness」は逆の関係になります。
「Smoothness = 1.0 – Roughness」の式が成り立ちます。

また、リアルタイム系ではそれぞれテクスチャの格納方法が異なり、
UnityのStandard ShaderではR要素にMetallic/A要素にSmoothnessを指定し、MetallicとRoughness(Smoothness)は1つのテクスチャで表現します。
G/B要素は未使用です。
この加工をあらかじめ行う必要があります。
このテクスチャの「パック」については、glTFやUSDの場合はまた別の格納を行う必要があります。

テクスチャの加工は、Shade3Dでスクリプトを使って行うようにしました。
以降はShade3D上での作業になります。
RGBA要素別のテクスチャイメージを1枚に結合 (Pack) (スクリプト)」で記載したスクリプトを使用します。

「盆_Roughness.png」を読み込みます。
ブラウザで「盆_Roughness.png」を選択し、形状情報ウィンドウのプレビューで右クリックしてポップアップメニューを表示します。
「階調の反転」を選択します。これで、白黒が逆転します。

これで「Roughness」から「Smoothness」のテクスチャになりました。
イメージ名を「A_bon_metallicSmoothness.png」に変更します。

単一色のテクスチャを作成 (スクリプト)」で記載したスクリプトを使用し、黒色のテクスチャイメージを作成します。
この作業はペイントツールで黒色のテクスチャイメージを作成し、インポートしても問題ありません。
ファイル名を「R_bon_metallicSmoothness.png」としました。
これを2回繰り返し、「G_bon_metallicSmoothness.png」「B_bon_metallicSmoothness.png」のテクスチャイメージを作成します。
ブラウザでは以下のようになります。

Rとして、黒色のテクスチャイメージを使用します。これは、メタリックに相当します。
もし、メタリックのテクスチャが存在する場合はグレイスケールのイメージとしてRを指定するようにしてください。
G/Bは未使用のため何色でもいいのですが、Rと同じ黒色を指定しておきました。
Aとして、ラフネスを反転させたSmoothnessのテクスチャイメージを使用します。

この4つのイメージをブラウザで選択した状態で、「RGBA要素別のテクスチャイメージを1枚に結合 (Pack) (スクリプト)」で記載したスクリプトを実行します。
「bon_metallicSmoothness.png」のイメージが出力されました。
これは、RGBA要素をパックしたテクスチャイメージになります。

ブラウザで「bon_metallicSmoothness.png」を選択し、形状情報ウィンドウのプレビューを右クリックしてポップアップメニューを表示します。
「書き出し」を選択し、ファイルダイアログボックスで「アルファチャンネルを有効」でpng形式でファイル出力します。

「bon_metallicSmoothness.png」という名前にしました。
A要素も使用するため、png形式で指定するようにしてください。
これで、Unity向けのMetallic-Smoothnessのテクスチャになりました。

UnityにMetallic-Smoothnessのテクスチャをインポート

Unityに戻ります。
Projectウィンドウのimagesフォルダ内に「bon_metallicSmoothness.png」をドラッグしてインポートします。

R/G/B/A要素がどのように格納されているかは、Inspectorウィンドウの下のプレビューで切り替えて確認できます。

マテリアルにテクスチャイメージを割り当て

これでテクスチャが一通りそろったため、マテリアルに対してテクスチャを割り当てていきます。
ProjectウィンドウのMaterialsフォルダより「盆.mat」を選択し、Inspectorウィンドウを表示します。
「images」フォルダの4つのテクスチャイメージをドラッグして、以下のように割り当てました。
盆_Base_Color.png → Albedo
bon_metallicSmoothness.png → Metallic
盆_Normal.png → Normal Map
盆_Mixed_AO.png → Occlusion

Projectウィンドウで「bon.fbx」を選択すると、Inspectorウィンドウのプレビューでマテリアルが割り当てられたことを確認できます。

bon.fbxをシーンにドラッグすることで、シーン要素として配置されます。

UnityはPBRマテリアルに対応しているため、Shade3DからのPBRマテリアルは
ベースカラー、法線マップ、メタリック、ラフネスなどの各要素が1対1に対応することになります。

この記事のURLとタイトルをコピーする
Translate »