[Omniverse] マテリアルの割り当て その7 (MDLを渡す)

今回はSubstance DesignerでMDLを作成し、それをOmniverseで使用します。
Substance 3D Designer 2022を使用しました。

MDLについては「[Omniverse] マテリアルの割り当て その1」で説明してますので、そちらもご参照くださいませ。

Substance DesignerでMDLを作成

Substance Designerを起動し、メインメニューの「File」-「New」-「MDL graph」を選択します。

「New MDL graph」ダイアログボックスで「Physically based(Metallic/Roughness)」を選択した状態でOKボタンを押します。

以下のように表示されました。

すでにノードがたくさん配置されていますが、基本的なPBRマテリアルの指定になっています。

ズームしていくと「Base Color」がありました。
デフォルトでは灰色が設定されています。

このノードを選択し、右端のPROPERTIESでBase Colorの色を変更しました。

他のパラメータも確認します。
Roughnessは0.5。

Metallicは0。

この状態で保存します。
プロセットのPhysically based(Metallic/Roughness)に対して、Base Colorを変更しただけのファイルになります。
EXPLORERウィンドウのツリー表示されている「sbs」となっているのがSubstance Designerのファイルになります。
これを選択し、右クリックのポップアップメニューより「Save」を選択します。
名前を付けて保存の場合は「Save as」を選択します。

Substance DesignerでMDLを出力

EXPLORERウィンドウのツリー表示されている「xxxx.sbs」を選択し、右クリックのポップアップメニューから「Export MDL Module」を選択します。

「MDL_graph_test.mdl」という名前で出力しました。
これで最もシンプルなMDLファイルを生成できました。

Omniverse CreateでMDLを割り当て

Omniverse Create 2021.3.8を起動します。
マテリアルの確認のため、Meshの球(Sphere)を配置しました。

StageウィンドウでSphereを右クリックしてポップアップメニューを表示し、
「Create」-「Materials」-「Custom MDL Material」を選択します。

Create Materialウィンドウで右のフォルダアイコンをクリックします。

ファイルダイアログボックスが表示されるので、Substance Designerで出力したMDLファイルを指定します。
Identifierには読み込んだMDLファイル名、subIdentifierにはSubstance DesignerでのGraph名が表示されます。
「Create」ボタンを押します。

MDLがコンパイルされますので、しばらく待ちます。
Substance Designerで変更したBase Colorの色になりました。

StageウィンドウでLooksを見ると「MDL_graph」が追加されています。
このPropertyを見ます。

「Base Color」はSubstance Designerで変更した色になっています。
なお、Omniverseでの「色」はリニアで扱われるため、Substance Designerの色(sRGB)はリニア変換されて格納されます。
そのため、Substance Designerでの色より少し暗くなっています。
その他、RoughnessとMetallicがSubstance Designerのノードの値と同じになっているのが確認できました。

また、Stageウィンドウの「MDL_graph」もShaderが1つだけでシンプルです。
入力パラメータがMaterialのプロパティに列挙されている点にも注目してくださいませ。
OmniverseのMaterial Graphでは、入力パラメータをMaterialのプロパティとしてまとめることができませんでした。

MDLの入力パラメータの制御

この入力パラメータは、Substance Designer上でカスタマイズできます。
Substance DesignerのGraphでノードの左上に円状のアイコンが付いているものがあります。

これはMDLとして入力パラメータとして採用するものです。
Base Colorノードを右クリックしてポップアップメニューを出すと「Expose」にチェックが入っています。

このチェックが入ったものが入力パラメータとして使用できるノードになります。
float値や色、テクスチャなどでExposeをOnにできます。
ノードを新規追加した段階ではExposeはOffになっています。

入力パラメータの情報

選択されたノードの情報はPROPERTIESに表示されます。

「Identifier」は識別名です。他のノードとかぶらない名称を指定します。
Omniverseに持ってきた場合は、これはUSDでの「inputs:識別名」として使用されます。
「In Group」はグループ名です。
複数のパラメータをまとめる場合は同じグループ名を指定します。
「Display Name」はパラメータの表示名です。

Omniverse上で比較すると以下のような対応になります。

入力パラメータの表示順

Omniverseのマテリアルを見たときの入力パラメータの表示順はSubstance Designer上で指定します。
Graph上で何もないところでダブルクリックすると、Graph自身のパラメータが右端のPROPERTIESに表示されます。

PROPERTIESの一番下までスクロールします。
「GRAPH INPUTS」に入力パラメータが列挙されています。
ここの左端をドラッグすることで順番を入れ替えることができます。
この順番でOmniverseのマテリアルのUIパラメータが表示されることになります。

MDLを更新した際に変更をOmniverseに反映させるには ?

MDLファイルを更新した際、Omniverseで再度MDLファイルを読み込んでもUIやマテリアルは更新/再コンパイルされないようでした。
Omniverseをいったん終了し、再起動したら反映されました。

今回は簡単なところでここまでにします。
MDLの場合は、入力パラメータを指定できるという内容でした。
次回、MDLについてテクスチャ割り当てなど拡張していきます。