On this page |
概要 ¶
MaterialXとは、シェーディングネットワークを記述するためのオープンソース規格です。 MaterialXシェーディングネットワークは、アプリケーションとレンダラー間で持ち運びできるように設計されています。
SolarisとKarmaは、USDでMaterialXシェーダを取り込めるようにするプラグインのUsdMaterialXを介してMaterialXを活用します。
Houdiniでは、MaterialXマテリアルをVOPで組んで、それを自動的にUsdShade
Primに変換することができます。
VOPノードを.mtlx
ファイルに変換することができるスクリプトが存在しますが、Solarisがサポートしている基本ワークフローは、USD PrimとしてエンコードされているMaterialXノードが前提となっています。
Solarisは.mtlx
ファイル内で定義されているMaterialX Lookを参照することができますが、.mtlx
ファイルへの 書き込み のサポートはかなり制限が付いています。
Solarisでは、ユーザは、純粋なMaterialXマテリアルやKarma中心のマテリアルを構築することができます。 この違いは、Karma中心のマテリアルだと、足りない機能を専用シェーダノードで補足できることです。 これらのワークフローを容易にするために、該当するビルダーノードがMaterial Library内で利用可能になっています。
Tip
Karma XPUはMantraとKarma XPUで使用されている従来のVEXベースのシェーダにまったく対応する予定はないので、おそらくMaterialXがKarmaレンダラーのマテリアルを構築するための有望株になります。
Houdiniで使用されている公式のMaterialXの仕様書とドキュメントは、以下のドキュメントにあります:
Tip
HoudiniのMaterialXサポートには、Principled Shaderと同様の物理ベースな万能シェーダであるMtlX Standard Surfaceノードが含まれています。 独自のシェーダを定義しなくても、たいていはこのノードで賄うことができます。
制限事項 ¶
-
現在のところ、KarmaはMaterialXのライトシェーダに対応していません。
-
MaterialXノードにはColor Spaceパラメータが備わっていますが、これは実際にはメタデータで、現在のところ、USDのHydraインターフェースはこのメタデータをレンダーデリゲートへ渡しません。
-
MaterialXではファイルパスに使用できるトークン(例えば、時間に関しては
{frame}
)がいくつか定義されていますが、現在のところ、これらのトークンはKarmaでもHoudiniでも使用されていません。ただし、<UDIM>
トークンは使用可能です。 -
Karmaはボリュームプリミティブ(VDBs)に対してVolumeマテリアルにしか対応していません。
-
現在のところ、Karmaは同一プリミティブ上でのSurfaceマテリアルとVolumeマテリアルに対応していません。
-
Compositing系ノードがKarmaで対応していません。
-
文字列入力は許可されていません。マテリアルのパブリックインターフェースからの単純なパラメータ入力接続さえも許可されていません。
マテリアルタイプ ¶
MaterialXで作成されるマテリアルタイプは、主にSurfaceマテリアルとVolumeマテリアルの2つです。
マテリアルには異なるシェーダタイプを含めることができます:
BSDF
表面が光をどのように吸収、反射、屈折させるのかを表現します。これはSurfaceマテリアルで使用されます。
VDF
ボリュームに特化したシェーディングを表現します。これはVolumeマテリアルで使用されます。
EDF
発光/照明の特性を追加します。これは、SurfaceマテリアルとVolumeマテリアルの両方で使用可能です。
Surfaceマテリアル ¶
-
MtlX Surface Material VOPはSurfaceマテリアルを定義します。MaterialXサーフェスシェーディングノードのネットワークをこの
surfaceshader
入力に接続することでSurfaceシェーダを定義することができます。また、そのネットワークでディスプレイスメントを適用したいのであれば、そのネットワークをdisplacementshader
入力に接続すれば良いです。これは、Houdiniネイティブマテリアルで言うCollect VOPと同様で、実際にネットワークを構築する時にMtlX Surface Material VOPの代わりにCollect VOPを使用することができます。(Houdiniネイティブマテリアルと同様に、ほとんどのMaterialXサーフェスシェーディング系ノードをスタンドアローンマテリアルとして使用可能です。ただし、サーフェスシェーダにディスプレイスメントシェーダを追加したい場合となれば、MtlX Surface Material VOPまたはCollect VOPを使用して、ディスプレイスメントネットワークをそこに接続する必要があります。)
-
BSDF/EDF/OpacityノードをMtlX Surface VOPに接続してサーフェスシェーディングを定義します。
MtlX Thin Surface VOPを使用すれば、表面と裏面で異なるBSDFやEDFが定義された薄い両面ジオメトリのルックを作成することができます。
-
MtlX Layer、MtlX Add、MtlX Multiply、MtlX Mixを使用してBSDFsを合成することができます。
-
MtlX Displacement VOPを使用してディスプレイスメントを定義します。
-
Uniform EDF VOPを使用すれば、MtlX Surfaceに発光特性を追加することができます。
Volumeマテリアル ¶
-
MtlX Volume VOPを使用してボリュームの散乱、吸収、発光を定義します。
-
MtlX Geometry Property Value VOPを使えば、名前によってボリュームフィールドをバインドすることができます。
テクスチャとパターン ¶
MaterialXには、テクスチャを扱うノードがたくさん含まれています。
-
MtlX Image、MtlX Tiled Image、MtlX Triplanerは、テクスチャ画像を取り込みます。テクスチャファイル名に
<UDIM>
トークンを使用することができます(上記の制限事項を参照)。 -
MtlX Normalmap VOPは、法線マップテクスチャをMtlX Standard Surface VOPの
normal
入力の入力として使用できるようにワールド空間の法線に変換することができます。MtlX Normalmap VOPの
in
入力には、0
から1
までの範囲の(つまり、0.5
を基準とした)接線空間の法線ベクトルが入った典型的な法線マップが必要です。 このノードのnormal
入力とtangent
入力は、0
から1
の範囲のベクトルでなければなりません。Note
MaterialXノードを使用して 法線マップ を読み込む時は、カラー空間が入力データに適用されないように必ず Signature を Vector3 に設定してください。
-
現在のところ、MaterialXの仕様には、たくさんの既製のプロシージャルパターンが含まれていません。とはいえ、ローレベルの数学系ノードは非常に充実しています。それらのノードを使用してプロシージャルパターンを作成する方法の例は、以下のHow Toセクションを参照してください。
Primvarsとジオメトリアトリビュート ¶
MaterialXシェーダは、USD Primsから任意のPrimvarを読み込むことができます。 その際には、そのノードの Signature をそのPrimvarのデータタイプに設定してください。 そのノードは自動的にそのPrimvarの補間を検知します。
-
MtlX Geometry Property Value VOPは任意のPrimvarを読み込むことができます(ここには
primvars:
接頭辞を含める必要はありません)。-
このノードは、USD Primvar Readerノードと非常に似ているものの、現在のところMaterialXは文字列入力に対応していないので、そのPrimvar名をマテリアルのパブリックインターフェースに接続することができません。KarmaではUSD PreviewノードとMaterialXノードを混在させることができるので、MaterialXが文字列入力に対応するまでは、それが現在の解決策です。
-
Karma CPU限定になりますが、MtlX Geometry Property Value VOPを使用してグローバルのVEX変数を取り込むこともできます。
-
-
MtlX Geometry Colorは、
primvars:displayColor
Primvarを読み込みます。 -
MtlX Normalは、
normals
(vector3
)を読み込みます。 -
MtlX Texcoordは、
primvars:st
またはprimvars:uv
(vector2
またはvector3
)を読み込みます。
色と色補正 ¶
MtlX Color Correctは、テクスチャマップや他の色信号を調整できるように1つにまとまったツールになっています。 色を調整するための他の関連ノードは以下のとおりです:
-
MtlX Contrastは、色の対比を増減させます。
-
MtlX HSV Adjustは、Hue(色相)、Saturation(彩度)、Value(明度)を使用してRGBカラーを調整することができます。このノードは、内部ではHSVとRGBの双方向変換の処理をしています。
-
MtlX Rangeは、色範囲をリマップしたり、ガンマを適用します。
-
MtlX Saturateは、色の彩度を増減させます。
さらに、MtlX RGB to HSVとMtlX HSV to RGBを使用して、RGBとHSVの色表現を変換することができます。
How To ¶
To... | Do this |
---|---|
簡単にKarmaでマテリアルを作成してそれを割り当てる |
Note Karma Material Builder の中に入ると、⇥ TabメニューはKarma、Preview Surface、MaterialXと互換のあるシェーダのみが表示されるようにフィルタリングされます。
|
外部 |
Tip MaterialX定義ファイルから特定のマテリアルをリファレンスすることで、シーンがすっきりして、シーン内の操作がしやすくなります。
一般的には、
Houdiniは、 |
基本的なStandard Surfaceマテリアルを作成する |
MtlX Standard Surface VOPは、Principled Shaderと同様の物理ベースの万能シェーダです。 独自のシェーダを定義しなくても、たいていはこのVOPで賄うことができます。
Note 純粋なUSD MaterialXグラフが必要であれば、このビルダーを使用してください。 しかし、Karmaだけを使用してレンダリングする場合、通常では Karma Material Builder を使用する方が良いでしょう。
|
Standard Surfaceマテリアルでテクスチャを使用する |
|
BSDFを使用してゼロからサーフェスシェーダを作成する |
|
プロシージャルパターンを作成する |
MaterialXには、数値を制御するための非常にローレベルなVOPが用意されています。 あなたに十分な忍耐力があれば、それらのVOPを使用して、縞々やチェック柄といったプロシージャルパターンを構築することができます。 以下の例では、数学系VOPを使用してプロシージャルな縞々テクスチャを作成する方法について説明しています。
|
ビューアまたはScene Graph Treeペインからマテリアルインターフェースを編集する |
|
ビューアまたはScene Graph TreeペインからShader Primを編集する |
|