| On this page |
前項 マテリアル
概要 ¶
この章はマテリアルに関する前の章の続きですが、テクスチャマップに焦点を当てています。 Karma CPUは、UVおよびPtexテクスチャマップに対応していますが、XPUはまだPtexに対応していません。 マテリアルのファミリー別に、マップを読み込むための独自のシェーダがあります。
シェーディングファミリー |
画像入力ノード |
|---|---|
MaterialX |
|
Karma |
|
USD Preview |
|
VEX |
Note
MaterialXノードの文字列入力(例えば、画像読み込みノードのファイルパス)は、オブジェクトのトポロジ全体にわたって一定であることを保証するために、 uniform 文字列になっています。 Paramater VOPなどの一部のノードでは、エラーなしで文字列入力に接続するためにはuniformトグルが必要となります。
テクスチャ座標 ¶
デフォルトで、テクスチャマップを読み込むシェーダは、デフォルトのテクスチャ座標セット(タイプtexcoord2dのprimvars:stなど)を使用します。
Karmaは、未接続のtexcoord入力を、MtlX Texcoordノードに接続されているかのように暗黙的に扱います。
任意のUV座標を作成することもできます。アセットに複数のUVセットがある場合や、非標準の名前を使用する場合は、Primvar Reader系ノードを使用して様々なテクスチャ座標を指定し、テクスチャマップを読み込むことができます。
UDIM ¶
Karma CPUとKarma XPUは、どちらもUDIMテクスチャに対応しています。
現在のところ、UDIMはMtlX Tiled Imageでは動作しません。
そのノードの実装方法が原因です。
また、Solarisには、アーティスト側でUDIMを調整できるように設計されたユーティリティノードが用意されており、Primvarを使用してテクスチャバリエーションを駆動させることができます。 これらのノードは、MtlXノードグラフとして実装されているので、理論的には、レンダリング時にUDIMタイルを変更することが許容されているどのUsdMaterialXレンダラーでも動作するはずです。
シェーディングファミリー |
画像入力ノード |
|---|---|
MaterialX |
Copernicus ¶
-
Copernicusネットワークは、テクスチャを作成または変更できます。
-
マテリアルは、ファイルパスの代わりに、
op:という接頭辞が付いたパスをCOPノードに渡すことで、COPテクスチャを読み込むことができます。-
COPノードは複数の入力を持つことができます。その入力は、名前またはインデックスで指定することができます:
インデックス
op:/stage/copnet1/null3[2]名前
op:/stage/copnet1/null3{my_color_input}
-
-
USD ROPがUSDをディスクに書き込む際、これらのテクスチャは、そのUSDファイルと一緒に自動的に書き出されます。 これらのファイルは、最適化されたテクスチャ(つまり、タイル化されmipmapされたEXR)として書き込まれます。
-
Quick Surface Materialには、COPテクスチャをセットアップするためのショートカットがあります。
フォーマット ¶
Karmaは、Houdiniが対応しているすべての画像フォーマットだけでなく、OpenImageIOを介して対応されている多くの画像フォーマットにも対応しています。 テクスチャフォーマットは、パフォーマンスとカラー空間の想定に影響を与えます。
mipmap および タイル化 されたテクスチャを使用すると、パフォーマンス(特にTime to First Pixel:いざピクセルのレンダリングを開始するまでの時間)が大幅に向上します。
通常は、.exrまたは.ratテクスチャを使用することをお勧めします。
タイル化されていないフォーマットを検出すると、Karmaは自動的に.ratに変更します(詳細は、自動変換を参照)。
imaketxコマンドラインユーティリティを使用すると、他の画像フォーマットからmipmapされた.exrおよび.ratファイルを生成することができます。
imaketxは、.exr画像に対して1枚のAOVのみをmipmapするのに対して、.ratはすべてのチャンネルのmipmapに対応している点に注意してください。
Tip
OpenImageIOから利用可能なフォーマットのリストは、コマンドライン(hoiiotool --list-formats)またはPython(OpenImageIO.get_string_attribute("extension_list"))を介して取得することができます。
自動変換 ¶
Karmaはデフォルトで、タイル化/mipmapされていないテクスチャを自動変換します。
変換されたファイルは、デフォルトでは元のファイルと同じ場所に置かれ、ファイル名の拡張子が.ratとなります。
KarmaCPUでは、最適化されたテクスチャマップが必要です。
HOUDINI_TEXTURE_DISK_CACHE環境変数を設定なしに設定することで、この挙動を無効にすることができます。
まだHoudini 19.5を使用している場合は、その環境変数を all に設定することで、この機能を有効にすることができます。
loggingパネルを追加してKarmaのログを調べれば、テクスチャが変換されているかどうかを判断できます。
または、コマンドラインからレンダリングする場合は、verbosityを3以上に設定します。
[09:02:04] Texture Disk Cache: Converting image /jobs/gramophone.usdz[Gramophone_Normal.png] to texture /tmp/houdini_temp/hfsT7MYFL [09:02:05] Texture Disk Cache: Finished writing output file /tmp/houdini_temp/hfsT7MYFL [09:04:11] Texture Disk Cache: Converting image /jobs/maps/mandril.jpg to texture /jobs/aces/maps/mandril.jpg.rat [09:04:11] Texture Disk Cache: Finished writing output file /jobs/maps/mandril.jpg.rat
フィルタリングコントロール ¶
通常、KarmaはMIPレベルの選択とテクスチャマップのフィルタリングを自動的に処理します。Karmaには追加のコントロールがいくつか用意されています。
mtlximageに入力を追加することで、MIPレベルとテクスチャマップの品質を明示的に制御できます。
-
Karma Texture Controlsのレシピは、
MtlX Imageノードにフィルタリングオプションを追加する最も簡単な方法です。
-
既存のマテリアルを編集するには、
Edit Propertiesノードを作成し、
mtlximageシェーダPrimを指定します。 Edit Properties ボタンをクリックすると、利用可能なコントロールが表示されます。 -
いくつかのコントロールは、
Karma Material Propertiesでも使用できます。
カラー空間 ¶
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など)に設定します。
タンジェントノーマルマップ ¶
法線マップノードは、入力法線を受け取って、シェーディング法線とシェーディング接線とシェーディング従接線で構成された 座標系 によってその入力法線をトランスフォームします。
ただし、MikkT接線空間法線マップを扱う場合、いくつか考慮すべきことがあります。
karma_mikktシェーダプロパティを追加するためのレシピが用意されています。
このノードをクリックして Recipes ▸ Karma MikkT Normal Map を選択することで、そのレシピを実行することができます。
このプロパティは、接線空間法線マップ入力をMikkT接線空間法線マップとして扱うように指示します。
この場合、tangentuとsignsのアトリビュート/Primvarを使用して 座標系 が適切に定義されます。
Karma MikkT Normal Map が無効な場合(または、このプロパティが存在しない場合)やtangentu Primvarが存在しない場合、
法線マップはKarma固有の接線空間法線マップとして解釈されます(signsアトリビュート/Primvarが存在しなかった場合、そのデフォルトは-1となります)。
-
Karma固有の接線空間法線マップの場合、Karmaは、デフォルトの接線シェーディングフレームを使用して、法線マップ処理を適用します。
-
Karma固有の接線空間法線マップをHoudini VKで動作させるには、
tangentuPrimvarが必ず必要です。このPrimvarは、Poly Frame SOPから作成することができます( Tangent UV Gradient スタイルを選択してください)。そして、
Geom Prop Valueを使用してそのPrimvarを読み込んで、それをサーフェスシェーダの
tangent入力またはgeometry_tangent入力に接続します。
次のステップ ¶
Karma向けのシェーダとマテリアルの構築の詳細については、SolarisでのMaterialXの使い方を参照してください。
次項 レンダリング