Houdini 19.5 Solaris Karmaユーザガイド

Karmaユーザガイド マテリアル

On this page

概要

この章では、Karmaのマテリアルについて、さらには、すぐにでも使えるようになるためのヒントをご紹介します。 この章の最後では、マテリアルをセットアップする実際の手順を載せています。

Karmaのマテリアル構築は考え方としては簡単で、これまでHoudiniからMantraまたはその他のレンダラーを使ってレンダリングしたことがあるなら特にそうです。 マテリアルを作成するには、Material Library LOP内でVOPネットワークを接続します。 Houdiniは、VOPノードをUSD Material Primに変換し、それらをジオメトリに割り当てます。 レンダリング時に、HydraはそれらのプリミティブとマテリアルをKarmaに送信します。

Tip

すぐに始めたいのであれば、Karmaマテリアルクイックスタートを参照してください。

USDマテリアル

USDのマテリアルは異なるレンダラーをターゲットにすることができます。 プリミティブが持つことができるマテリアルバインドは1つだけですが、その1つのマテリアルが様々なレンダーコンテキストに対応することができます。 そのレンダリングコンテキストは、異なるレンダラーのシェーダだったりシェーディング言語に該当します。

Karmaはいくつかのコンテキストに対応しています。 マテリアルがそれらの対応しているコンテキストを複数持っている場合、Karmaは次の優先順位を使用します:

優先順位

レンダーコンテキスト

シェーダ

実装

サンプルのノード

1

outputs:karma

VEX

sourceCode

2

outputs:mtlx

MaterialX

UsdShadeプリミティブ

3

outputs:karma_xpu

karma_xpu

UsdShadeプリミティブ

4

outputs

USD Preview

UsdShadeプリミティブ

Karmaは、Karma CPUとKarma XPUの2つのレンダリングエンジンを持っています。 Karma CPUだけが、VEXベースのシェーダ(例えば、Principled Shader)に対応しています。 VEXシェーダはVEXソースコードにコンパイルされるため、他のシェーディングノードと混在させて使うことはできません。 ただし、Karma XPUとKarma CPUは、MaterialX(outputs:mtlx)、Karma(outputs:karma_xpu)、USD Previewノード(outputs)の混在に対応しています。 これは他のレンダリングエンジンでは対応していません。

マテリアルバインド

Solarisでマテリアルをプリミティブに割り当てるのは簡単です。 Material LibraryまたはAssign Materialノードを使用して、マテリアルをPrimまたはGeomSubsetにバインドすることができます。

デフォルトでは、 Material Binding StrengthWeaker Than Descendents です。 これは、子Prim自体にマテリアルバインドがない限り、すべての子Primにバインドが適用されることを意味します。 マテリアルを親Primに割り当て、Strengthを Stronger than Descendents に設定すると、シーン全体のマテリアルを上書きすることができます。

Warning

Hydraは、期待した通りにインスタンス上の“弱い”マテリアルを上書きしてくれません。 この挙動は、今後のバージョンのUSDおよびSolarisで改善される予定です。 それまでの間は、継承されたクラスPrimを使用してマテリアルの上書き範囲を広げることで、インスタンスのマテリアルを上書きしてください。

USDマテリアルバインドは特定のPurposeのみに適用できます(USD Render Purposeは、プレビュー、マップ生成、最終レンダリングなど、様々なタイプのレンダリングを指します)。 デフォルトでは、マテリアルはどのPurposeにも適用されますが、例えばマテリアルを最終レンダリングだけにバインドするよう設定することも可能です。

USDはCollectionベースのマテリアルバインドに対応していますが、現時点では、その方法を強くお勧めするほどのワークフロー/パフォーマンスのメリットはありません(USD Collectionをパターンとして定義でき、および/またはHydraがCollectionベースの割り当てを介したインスタンスの上書きに対応している場合、これは非常に強力なワークフローとなります)。

シェーダ構築

  • Karma向けのシェーダ構築は、HoudiniのMantraや他のレンダラーの場合と同じで、VOPを使用します。

  • Material Libraryは、マテリアルから自動的にUSD Preview Surfaceの生成を試みます。これは、Principled ShaderおよびMtlX Standard Surfaceで最も上手く機能します。場合によっては、USD Previewマテリアルの自動生成を避けた方が望ましいです。Material Libraryノードのトグルを使用することで、そのプレビュー生成を無効にすることができます。

  • テクスチャが原因で、GLビューア、特にStorm(PixarのOpenGL Hydraデリゲート)が低速になる場合があります。スケーラビリティが心配な場合は、中景から後景までのオブジェクトに対してテクスチャを使用するのではなく、USD PreviewシェーダのdisplayColorsdisplayOpacityを使用して色を付けると良いでしょう。

  • マテリアルの構築時にCollect VOPを最終ノードとして使用すると、ディスプレイスメントシェーダが追加しやすくなり、さらには、手動でUSD Preview Surfaceやその他のシェーダもマテリアルに追加しやすくなります。

  • Parameter VOPを使用することで、“パブリックな(外部からアクセス可能な)”マテリアルインターフェースを作成することができます。これにより、下流のLOPでマテリアルを編集しやすくなるうえ、大元のシェーダグラフを編集する必要がなくなります。(テクスチャマップのパスなど)同じパラメータで異なるシェーダを駆動することも可能です。

MaterialX

  • Karma MaterialX Subnetツールは、MaterialXをベースとしたKarmaマテリアルの作成を簡略化します。このサブネット内では、⇥ Tabメニューがフィルタリングされて、互換性のあるKarma、USD Preview、MaterialXノードのみが表示されます。これにより、シェーダネットワーク内で誤ってVEX VOPノードを使用してしまうのを防ぐことができます。

  • MaterialXノードを使用して、Karma Hairまたはその他のKarma固有のシェーダのパターンを駆動させることができます。

  • HoudiniのPrincipled Shaderと異なり、MtlX Standard Surfaceノードはパラメータをジオメトリアトリビュートに自動バインドしません。

USD Previewシェーダ

  • USD PrimVar Readerは、KarmaではMaterialXノードと互換性があります。

  • UsdMaterialXに対応したレンダーデリゲートが増えるまでは、USD Previewシェーダがマテリアルを定義するのに最も一般的で汎用的な方法となります。

VEX

  • VEXシェーダは、Karma CPUでのみ機能します(Karma XPUでは機能しません)。

  • 直接Cdにバインドするのでなく、Surface Colorノードをシェーダで使用してください。Cdがジオメトリで見つからない場合、displayColor Primvarが代替となります。これにより、VEXシェーダはMantraからKarmaに簡単に切り替えることができます。

  • Point Cloud系シェーダや他のジオメトリルックアップ系シェーダは、Karma CPUでも機能するはずですが、ステージ上のプリミティブにアクセスすることはできません。これらのシェーダはディスク上の.bgeoジオメトリファイルにのみアクセスすることができます。

テクスチャ

Karmaは、UVおよびPtexテクスチャマップに対応しています。 マテリアルのファミリー別に、マップを読み込むための独自のシェーダがあります。

シェーディングファミリー

画像入力ノード

VEX

MaterialX

USD Preview

Warning

transmission/opacity入力にテクスチャマップを接続すると、Karmaはレンダリング中に余計な処理をするはめになります。 テクスチャマップが均一な値である場合、シェーダ入力にはその値を直接入れることを検討してください。 これによって、いくつかの場面では、パフォーマンスを大幅に向上させることができます。

フォーマット

Karmaではmipmapされた.exrまたは.ratテクスチャファイルを使用します。 Karmaは他のフォーマットも使用可能ですが、.exr.ratを使用する場合と比べて、(特にプロダクション規模で)効率性が悪かったり、予測可能なものではありません。

Karmaは、Houdiniが対応しているすべての画像フォーマットだけでなく、OpenImageIOを介して対応している多くの画像フォーマットに対応しています。 テクスチャフォーマットは、パフォーマンスとカラー空間の想定に影響を与えます。詳細については、カラー空間を参照してください。

imaketxコマンドラインユーティリティを使用すると、他の画像フォーマットからmipmapされた.exrおよび.ratファイルを生成することができます。

Tip

Houdini19.5には、テクスチャを自動的に.ratに変換する実験的な機能があります。 この機能を有効にするには、HOUDINI_TEXTURE_DISK_CACHE環境変数をallに設定します。 これにより、パフォーマンスが向上し、特に“Time to First Pixel”(いざピクセルのレンダリングを開始するまでの時間)が短縮されます。

カラー空間

Karmaは、シーンを内部的にリニアカラー空間でレンダリングするため、テクスチャマップをリニア空間に変換する必要があります。 Hydraはパラメータメタデータを渡さないため、Karmaはいくつかの方法でソースのカラー空間を判断します:

  1. カラー空間入力が“raw”、または、タイプがvectorの場合、Karmaは画像カラーを変換しません。

  2. Readerノードが“Auto”に設定されている場合、Karmaはソースのカラー空間を検出する処理を実行します。

    1. diffuse_map.rec709.exrなど、ファイル名に埋め込まれたロール文字列をチェックします。

    2. 画像ファイル内のメタデータからカラー空間の仕様をチェックします。

    3. 8ビット画像ではsRGBを想定し、他のフォーマット/ビット深度ではリニアを想定します。

Hydraはパラメータメタデータを渡さないため、color3またはcolor4のシグネチャを持つMtlX Imageノードは常に“Auto”モードになります。 MtlX Imageノードで画像を強制的に(変換なしで)リニアで読み込ませるには、パラメータのシグネチャを非カラー値(floatvector3vector4など)に設定します。

発光マテリアル

非ライトプリミティブを発光させることで、レンダリング時にそれをライトとして機能させることができます。次のシェーダは発光に対応しています:

MaterialX

  • Unlit Surface

  • Standard Surface

  • Uniform EDF (サーフェスとボリューム)

USD Preview

  • USD Preview Surface

VEX

  • Principled Surface

  • Classic Shader

発光シェーダの作成はたいてい、最初の一歩にすぎません。 発光ジオメトリのサンプリングは、実際のライトプリミティブのサンプリングほど効率的ではありません。 Karmaには、発光ジオメトリのサンプリングを改善できる特別なPrimvarがあります。 Render Geometry Settingsノードを使用すると、Karmaに特定のジオメトリプリミティブを光源として処理するよう指示することができます。 発光ジオメトリのルックと品質を制御する追加パラメータもいくつか利用可能です。

次のステップ

Karma向けのシェーダとマテリアルの構築の詳細については、KarmaでのMaterialXの使い方を参照してください。

How to

To...Do this

Karmaマテリアルを素早く作成する

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

  2. このノード内で、Karma MaterialX Subnetを作成します。

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

Note

Karma MaterialX Subnet内では、⇥ Tabメニューがフィルタリングされ、互換性のあるKarma、Preview Surface、MaterialX互換のシェーダのみが表示されます。

  1. サブネット内で、MtlX Standard Surface VOPを作成します。MtlX Surfaceシェーダを削除し、Standard Surfaceノードを surface_output に接続します。

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

  3. Assign Materialを先ほど作成したMaterial Libraryノードに接続します。

  4. Assign Materialノードで Primitives をいくつか選択し、 Material Path/materials/quickstart_materialに設定して、マテリアルを割り当てます。

Karmaユーザガイド

リファレンス