Houdini 20.5 SolarisとKarma

SolarisでのMaterialXの使い方

HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

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 LayerMtlX AddMtlX MultiplyMtlX Mixを使用してBSDFsを合成することができます。

  • MtlX Displacement VOPを使用してディスプレイスメントを定義します。

  • Uniform EDF VOPを使用すれば、MtlX Surfaceに発光特性を追加することができます。

Volumeマテリアル

  • MtlX Volume VOPを使用してボリュームの散乱、吸収、発光を定義します。

  • MtlX Geometry Property Value VOPを使えば、名前によってボリュームフィールドをバインドすることができます。

テクスチャとパターン

MaterialXには、テクスチャを扱うノードがたくさん含まれています。

  • MtlX ImageMtlX Tiled ImageMtlX Triplanerは、テクスチャ画像を取り込みます。テクスチャファイル名に<UDIM>トークンを使用することができます(上記の制限事項を参照)。

  • MtlX Normalmap VOPは、法線マップテクスチャをMtlX Standard Surface VOPnormal入力の入力として使用できるようにワールド空間の法線に変換することができます。

    MtlX Normalmap VOPのin入力には、0から1までの範囲の(つまり、0.5を基準とした)接線空間の法線ベクトルが入った典型的な法線マップが必要です。 このノードのnormal入力とtangent入力は、0から1の範囲のベクトルでなければなりません。

    Note

    MaterialXノードを使用して 法線マップ を読み込む時は、カラー空間が入力データに適用されないように必ず SignatureVector3 に設定してください。

  • 現在のところ、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 HSVMtlX HSV to RGBを使用して、RGBとHSVの色表現を変換することができます。

How To

To...Do this

簡単にKarmaでマテリアルを作成してそれを割り当てる

  1. Material Library LOPを作成します。

  2. そのノードの中に入って、 Karma Material Builder を作成します。

  3. そのサブネットの名前を“quickstart_material”に変更して、そのサブネットの中に入ります。

Note

Karma Material Builder の中に入ると、⇥ TabメニューはKarma、Preview Surface、MaterialXと互換のあるシェーダのみが表示されるようにフィルタリングされます。

  1. 親のLOPネットワークに戻ります。

  2. Assign Material LOPを追加して、その入力を先程作成したMaterial Library LOPの出力に接続します。

  3. そのAssign Material LOPで、 Primitives パラメータにいくつかのPrimを設定し、 Material Path パラメータに/materials/quickstart_materialのパスを設定して、作成したマテリアルを割り当てます。

外部.mtlxファイルからマテリアルを参照する

Tip

MaterialX定義ファイルから特定のマテリアルをリファレンスすることで、シーンがすっきりして、シーン内の操作がしやすくなります。 一般的には、.mtlxシェーダはサブレイヤ化するよりもリファレンスする方がはるかに良いです。

  1. Reference LOPを作成します。

  2. ディスク上のMaterialX .mtlxファイルのファイルパスを Reference File に設定します。

  3. Reference Primitive ポップアップメニューから Reference Specific Primitive を選択して、読み込みたい特定のマテリアルを指定します。

  4. Assign Material VOPを追加してパラメータをセットアップして、参照するマテリアルをUSD Primに割り当てます。

Houdiniは、$HFS/houdini/materialx_resources/Materials/Examples/StandardSurface/内にサンプルのマテリアルをいくつか用意しています。

基本的なStandard Surfaceマテリアルを作成する

MtlX Standard Surface VOPは、Principled Shaderと同様の物理ベースの万能シェーダです。 独自のシェーダを定義しなくても、たいていはこのVOPで賄うことができます。

  1. Material Library LOPを作成します。

  2. そのMaterial Library LOPをダブルクリックして、そのVOPネットワークの中に入ります。

  3. その中に USD MaterialX Builder を作成し、その中に入ります。

Note

純粋なUSD MaterialXグラフが必要であれば、このビルダーを使用してください。 しかし、Karmaだけを使用してレンダリングする場合、通常では Karma Material Builder を使用する方が良いでしょう。

  1. その中にMtlX Standard Surface VOPを作成します。

  2. そのVOPのパラメータをセットアップします。そのMtlX Standard Surface VOPのテクスチャ入力にはテキスチャを接続することもできます(以下参照)。

  3. そのMtlX Standard Surface VOPには、意味が分かる名前を付けます(例えば、red_car_paint)。

  4. 親のLOPネットワークに戻ります。

  5. そのMaterial Library LOPのパラメータを使用して、そのマテリアルを取り込んで、それをUSDジオメトリに割り当てます。

Standard Surfaceマテリアルでテクスチャを使用する

  1. Standard Surfaceマテリアルの作成方法は上記を参照してください。そのMaterial Library LOPの中に入って、USD MaterialX Builderの中に入ります。

  2. MtlX Texcoord VOPを作成します。 SignatureVector2 に変更します。

  3. MtlX Image VOPを作成します。

    • SignatureColor に変更します。

    • テクスチャ画像ファイルのファイルパスを Filename に設定します。

    • そのMtlX Texcoord VOPの出力をそのMtlX Image VOPのtexcoord入力に接続します。

    • そのMtlX Image VOPの出力をStandard Surface VOPのテクスチャ入力(例えば、base_color)に接続します。

BSDFを使用してゼロからサーフェスシェーダを作成する

  1. Material Library LOPを作成します。そのMaterial Library LOPをダブルクリックして、そのVOPネットワークの中に入ります。

  2. USD MaterialX Builder(または、Karma専用マテリアルを作成する場合はKarma MaterialX Builder)を作成します。そのノードをダブルクリックして中に入ります。

  3. MtlX Surface Material VOPを作成します。

    (他にもCollect VOPをマテリアル出力として使用可能です。これは、レンダラー別に複数のシェーダを接続したい場合や手動でUSD Previewシェーダを作成したい場合に必要です。)

  4. MtlX Surface VOPを作成します。その出力をそのMtlX Surface Material VOPのsurfaceshader入力に接続します。

  5. MaterialX BSDF系VOP(例えば、MtlX Conductor BSDF VOP)を作成します。その出力をそのMtlX Surface VOPのbsdf入力に接続します。

  6. そのBSDF系VOPのパラメータをセットアップします。

  7. そのMtlX Surface VOPには、意味が分かる名前を付けます(例えば、red_metallic)。

プロシージャルパターンを作成する

MaterialXには、数値を制御するための非常にローレベルなVOPが用意されています。 あなたに十分な忍耐力があれば、それらのVOPを使用して、縞々やチェック柄といったプロシージャルパターンを構築することができます。

以下の例では、数学系VOPを使用してプロシージャルな縞々テクスチャを作成する方法について説明しています。

  1. Material Library LOPを作成します。そのMaterial Library LOPをダブルクリックして、そのVOPネットワークの中に入ります。

  2. USD MaterialX Builder(または、Karma専用マテリアルを作成する場合はKarma MaterialX Builder)を作成します。そのノードをダブルクリックして中に入ります。

  3. MtlX Standard Surface VOPを作成します。

  4. MtlX Texcoord VOPを作成します。 SignatureVector2 に変更します。

  5. そのMtlX Texcoord VOPの出力をMtlX Separate2 VOPに接続します。

    これは、テクスチャ座標のvector2出力を別個の接続に分けます。

  6. MtlX Multiply VOPを作成します。そのSeparate2 VOPのoutxをこのVOPのin1に接続します。

    このVOPの in2 パラメータは、縞々の周波数を制御します。今のところは、そのパラメータ5に設定します。

  7. MtlX Sin VOPMtlX Ceil VOPを作成します。そのMtlX Multiply VOPの出力をそのMtlX Sin VOPの入力に接続し、そのMtlX Sin VOPの出力をそのMtlX Ceil VOPの入力に接続します。

  8. MtlX Mix VOPを作成します。

    • SignatureColor に変更します。

    • fgbg のカラーには、縞々の交互のカラーを設定します。

    • そのMtlX Ceil VOPの出力をそのMtlX Mix VOPのmix入力に接続します。

    • そのMtlX Mix VOPの出力をそのStandard Surface VOPのbase_color入力に接続します。

ビューアまたはScene Graph Treeペインからマテリアルインターフェースを編集する

  1. ビューアまたはScene Graph TreeペインでMaterial Primを選択します。

  2. ビューアまたはScene Graph TreeペインでそのPrim上でクリックして、 Edit Primitive ▸ New node to edit primitive… を選択します。

  3. これによって、選択されているPrimタイプに呼応してEdit Materialノードが作成されます。

ビューアまたはScene Graph TreeペインからShader Primを編集する

  1. ビューアまたはScene Graph TreeペインでShader Primを選択します。

  2. ビューアまたはScene Graph TreeペインでそのPrim上でクリックして、 Edit Primitive ▸ New node to edit primitive… を選択します。

  3. これによって、選択されているPrimタイプに呼応してEdit PropertiesノードまたはEdit Materialノードが作成されます。

MaterialX VOPノードのリスト

SolarisとKarma

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Stage Manager

    Solarisステージを効果的に使用する方法。

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaユーザガイド

Karmaの基本とワークフロー