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 |
|
VEX |
sourceCode |
|
2 |
|
MaterialX |
UsdShadeプリミティブ |
|
3 |
|
karma_xpu |
UsdShadeプリミティブ |
|
4 |
|
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 Strength は Weaker 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シェーダの
displayColors
とdisplayOpacity
を使用して色を付けると良いでしょう。 -
マテリアルの構築時に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はいくつかの方法でソースのカラー空間を判断します:
-
カラー空間入力が“raw”、または、タイプが
vector
の場合、Karmaは画像カラーを変換しません。 -
Readerノードが“Auto”に設定されている場合、Karmaはソースのカラー空間を検出する処理を実行します。
-
diffuse_map.rec709.exr
など、ファイル名に埋め込まれたロール文字列をチェックします。 -
画像ファイル内のメタデータからカラー空間の仕様をチェックします。
-
8ビット画像ではsRGBを想定し、他のフォーマット/ビット深度ではリニアを想定します。
-
Hydraはパラメータメタデータを渡さないため、color3
またはcolor4
のシグネチャを持つMtlX Imageノードは常に“Auto”モードになります。
MtlX Imageノードで画像を強制的に(変換なしで)リニアで読み込ませるには、パラメータのシグネチャを非カラー値(float
、vector3
、vector4
など)に設定します。
発光マテリアル ¶
非ライトプリミティブを発光させることで、レンダリング時にそれをライトとして機能させることができます。次のシェーダは発光に対応しています:
|
MaterialX |
|
|
USD Preview |
|
|
VEX |
|
発光シェーダの作成はたいてい、最初の一歩にすぎません。 発光ジオメトリのサンプリングは、実際のライトプリミティブのサンプリングほど効率的ではありません。 Karmaには、発光ジオメトリのサンプリングを改善できる特別なPrimvarがあります。 Render Geometry Settingsノードを使用すると、Karmaに特定のジオメトリプリミティブを光源として処理するよう指示することができます。 発光ジオメトリのルックと品質を制御する追加パラメータもいくつか利用可能です。
Emissive Geometry Render Properties
Treat As Light Source
発光マテリアルを持ったオブジェクトは、シーン内に光を生成します。 そのオブジェクトの影響力が大きい場合(例えば、サイズ、輝度など)、 Karmaにそのオブジェクトを(通常のライトと同様に)明示的な光源として扱わせることができます。 つまり、この発光ライトが非常に効率的に扱われるようになります。 しかし、そうすることで、システム内の他の部分で余計なオーバーヘッドが発生してしまいます(例えば、メモリ使用量が増えたり、更新時間が遅くなったりします)。
オプションが3つあります。 “No”は、オブジェクトを光源にしないように設定します。 “Yes”は、オブジェクトを光源に設定します。 “Auto”(デフォルト)は、Karmaが内部の経験則に基づいて、そのオブジェクトを光源として扱うかどうかを決めます。
Light Sampling Quality
オブジェクトをジオメトリ光源として使用する時、ここには、ライト単位のサンプリング品質を設定します。 この品質を上げると、この光源にサンプルがさらに追加されるので、他の光源と比べてこの光源のサンプリング品質が良くなります。
Note
これは、オブジェクトが受け取る光の品質ではありません。
Light Source Diffuse Multiplier
マテリアルのディフューズ、SSS、ボリュームの反応に対するこの発光オブジェクトの効果の乗数。
Light Source Specular Multiplier
マテリアルの反射と屈折の反応に対するこの発光オブジェクトの効果の乗数。
次のステップ ¶
Karma向けのシェーダとマテリアルの構築の詳細については、KarmaでのMaterialXの使い方を参照してください。
How to ¶
To... | Do this |
---|---|
Karmaマテリアルを素早く作成する |
Note Karma MaterialX Subnet内では、⇥ Tabメニューがフィルタリングされ、互換性のあるKarma、Preview Surface、MaterialX互換のシェーダのみが表示されます。
|