Houdini 19.5 マテリアル

シェーダのレイヤー化

2つ以上のマテリアルをミックスしたりレイヤー化して結合したマテリアルを作成する方法。

On this page

概要

シェーダVOPの出力をレイヤー化して、2つ以上のシェーダの結果をミックスさせたり、テクスチャマップでそのミックスを制御することができます。

ハイレベルシェーダの“layer”出力をレイヤー化したりミックスすることで、新しいレイヤーマテリアルを作成することができます。ShaderLayer構造体は、次の出力を結合します:

  • BSDFや不透明度などのSurfaceコンポーネント。

  • 変位ポジションや法線などのDisplacementコンポーネント。

  • diffuse color, normals, occlusion, roughness, specularなどのExportマップ。Layer Mix VOPは、SurfaceシェーダやDisplacementsシェーダに加えて、これらのExportマップもミックスさせます。

DisplacementコンポーネントとExportマップはレイヤーの一部なので、シェーダをレイヤー化またはミックスさせると、そのDisplacementとExportマップもミックスされ、簡単に一回の処理でレイヤー化することができます。

レイヤーに寄与しているシェーダは、通常ではキャッシュ化され、それらのシェーダが情報(BSDFなど)に寄与しますが、ライトループ自体を実行しないので、レイヤー化にはあまり負荷がかかりません。

レイヤーを結合するには、Layer Mixノードを使用します(他にはLayer Compositeがあります)。

  • テクスチャをalpha入力に接続することで、レイヤー間のアルファブレンドを変更することができます。

  • SurfaceとDisplacementをミックスさせるかどうかを選択することができます。

Note

Layer Mixの出力はRender Viewでのみ表示され、ビューポートには表示されません。

レイヤーマテリアルを構築する方法

  1. ネットワークエディタ内で Go ▸ Materials を選択して、マテリアルネットワークに切り替えます。

  2. 混在させたいマテリアルノードを作成します。

    マテリアルを混在させるには、そのマテリアルにLayer出力がなければなりません。Houdiniに同梱されているすべての既製マテリアルには、Layer出力が用意されています。 あなた独自のマテリアルにLayer出力を追加することができます。

  3. Layer Mix VOPを作成し、混在させたいマテリアルのLayer出力をそのLayer Mix VOPのAとBの入力に接続します。

    Layer Mixノードのパラメータを使って、それら2つのマテリアルを混在させる方法を選択することができます。

    Layer Mixの出力と別のマテリアルを他のLayer Mixに接続することで、3つ以上のマテリアルを混在させることができます。

/matレベルで既に緩いノードを作成している場合、そのチェーンの最後にLayer Mixノードをマテリアルとして割り当てたり、その混在したチェーンを選んでから Edit ▸ Collapse into material を選択することで、そのチェーンからマテリアルビルダーを作成することができます。 これが、混在マテリアルを作成する最も簡単な方法です。

既にマテリアルビルダーネットワーク内にマテリアルを構築している場合、Surface Exports VOPDisplace Exports VOP(マテリアルにディスプレイスメントが含まれている場合)を使用して、Outputノードで必要な値をレイヤー構造体から引っ張り出す必要があります。

レイヤーとシェーダとの関係性に関する詳細は、シェーダ出力を理解するを参照してください。

BSDFを結合する方法

すべてのライティングコードとBSDFを自身で記述する事なく少しだけカスタマイズした何かを構築したい場合、diffuse, reflective, glassなどの便利な基本BSDF/レイヤーを生成するノードを使用することができます。 これらのノードは、⇥ Tabメニューの Shading (BSDFs) カテゴリにあります。

  • Diffuse

  • SSS

  • Reflection

  • Metallic

  • Emission

  • Glass

これらのノードはbaseレイヤー入力を受け取ります。この入力は(それが意味をなせば)他のレイヤー/BSDFと簡単に結合することができます。これらのノードは、それらのルックを結合した時の物理的問題(フレネルコンポーネント、エネルギー保存)を自動的に処理します。

Metallic

Reflect

Metallic + Reflect

便利なノード

Shading Layers のサブメニューで以下のノードを使用して、レイヤーを結合することができます:

Layer Mix

レイヤー間でブレンドを行なうアルファマップ入力を使用して、“B”入力の上に“A”入力を表示します。 これは、レイヤーを結合する最も一般的で便利な方法です。

Layer Composite

これは、Layer Mixよりは複雑ですが、2つのレイヤーの結合方法に関するオプションが多くあります。 レイヤー毎に別々のアルファマップがあり、2つのレイヤーを合成する方法を選ぶことができます。

レイヤーのパックとアンパック

ShaderLayer構造体のコンポーネントを修正したい場合は、以下の方法があります:

  • Surface ExportsまたはDisplacement Exportsを使って、すべてのコンポーネントを分解します。

  • Layer Packを使って、コンポーネントから新しいShaderLayer構造体を構築します。

  • Get Layer Exportを使って、単一コンポーネントを抽出します。

  • Set Layer Component(変更するコンポーネントが事前に分かっている場合)またはSet Layer Export(置換するコンポーネントの名前が文字列値から派生する場合)を使って、単一コンポーネントを設定します。

例えば、BSDF(F)入力を持ったローレベルノードを使用する必要があった時に、もしlayerしかない場合は、Surface Exportsを使用して、そのレイヤーからFを分解して、それを修正し、Set Layer Componentを使って、そのレイヤーに戻すことができます。

マテリアルプロパティをレイヤー化する方法

現在のところ、レイヤーマテリアルにレンダープロパティがある場合には、Houdiniはプロパティ値をブレンドしません。 その理由は、コード側でそれらのプロパティ値を合成(プロパティに応じて、それらのプロパティ値を加算、乗算、最大値の取得、特定量でブレンド、他にもなにかの方法を使用)する方法を知ることができないからです。

現在のところ、レイヤーマテリアル上のプロパティを取得する唯一の方法は、他のマテリアルと同様に明示的に最終レイヤーマテリアルにプロパティを追加することです。

将来のバージョンのHoudiniでは、レイヤーシェーダ内のプロパティ値をブレンドする方法を設定するための答えを出すことができることでしょう。

マテリアル

マテリアルの使い方

テクスチャとUV

マテリアルの作成

導師レベル

他のレンダラー