絶対に挫折しないHoudini入門 9 - マテリアル

マテリアル

 マテリアルはジオメトリに質感を与えます。Houdiniにはあらかじめ様々なマテリアルがインストールされています。それらはMaterial Paletteで見ることが出来ます。

画像1

 これらのマテリアルを使用するには一旦右のペインにドラッグ&ドロップしなければいけません。絵具箱から絵具を選んでパレットの上に置くイメージです。

画像2

 Material Paletteにマテリアルをセットすると、mat以下にノードが配置されます。マテリアルの実体はVOPノードなのです。mat以下でTAB > princ...などとタイプしてPrincipled Shaderノードを置いても同様のことが出来ます。

画像4

 Material Paletteにセットしたマテリアルは、ジオメトリに割り当てることが出来ます。以下の2つが基本的な割り当て方です。

1. OBJ内でオブジェクトに割り当てる。
2. SOP内でMaterialノードを使用して割り当てる。

1. OBJでオブジェクトに割り当てる

  ネットワークビューからobjを表示して、配置されているオブジェクトを選択します。オブジェクトにはRenderタブがあります。その中のMaterialフィールドの右のアイコンをクリックするとダイアログが表示さるので、mat内の任意のマテリアルを選択します。

画像3

 この方法でマテリアルをセットすると、オブジェクト内にある全てのジオメトリに選択したマテリアルが反映されます

2. SOP内でMaterialノードを使用して割り当てる

 objに配置したオブジェクトをダブルクリックしてSOPに入ります。ジオメトリ(Sphere)が3つ配置されているとします。この内1つのジオメトリだけにマテリアルを割り当てるにはMaterialノードを使います。(Material Paletteでglassというマテリアルを選択しておきました。)

画像5

画像6

 マテリアルノードにはGroupを指定できるのでもっと細かくマテリアルを設定することも可能です。Sphereの半分だけ選択してみました。(ジオメトリの半分だけ選択するために、SphereのタイプをPolygonに変更しています。)

画像7

マテリアルを作成する

 自分でマテリアルを作成することが出来ます。作成できる場所は/mat以下、またはMaterial Networkノードを配置してその中で作成することもできます。これらはVOPネットワークになります。VOPネットワークの概要/UIに関してはこちらのヘルプを参照してください。

画像8

 /matまたはMaterial Network以下に直接ノードを組むこともできますが、Material Shader Builderノードを使用してその中でノードを組む方が、一つのマテリアルとして綺麗にまとまります。

 Material Shader Builderノードを配置し、その中に入るとデフォルトでこのようになっています。あらかじめ、入力と出力のノードが用意されているので、この間にノードを組んでいきます。

画像9

 VOPネットワークのノードの各インプット/アウトプットは型で色が分かれています。型はインプット/アウトプットをマウスオーバーすると画面下部に表示されます。または、ノードを右クリック>Type Properties>Input/Outputで確認できます。

 違う型のInput/Outputでも繋ぐことが出来ます。その場合、値はいい感じに整形されます。例えばfloatをvectorに繋ぐとvectorの3つの値は全て同じ値になります。
 型の違うもの同士を接続した場合は、点線になります。

 また、PやNなどジオメトリアトリビュートと同じ名前のパラメーターは線を繋げなくても自動で受け取ります。(線をつないでも良いです。)

マテリアルの入力/出力

 自分でマテリアルを作成するにあたって、マテリアルがどのようなデータを受け取り、処理し、出力するのか理解しておく必要があります。

グローバル入出力
 Material Shader Builderノードを作成するとあらかじめ配置されていますが、基本となる(グローバルな)入力はGlobal Variablesノード、出力はOutput Variables and Parametersノードです。Output Variables and ParametersノードはCollectノードにまとめることもできます。

 Global Variablesノード/Output Variables and ParametersノードはそれぞれContext Typeがあります。SurfaceやDisplacementなどを選ぶことが出来ます。
 それぞれの出力の意味はこちらのヘルプを参照してください。
Surface コンテキスト
Displace コンテキスト

 一旦出力について確認してみます。よく見るとOutput Variables and Parametersノードの出力はshaderとなっていますが、一つ上の階層に戻ってMaterialノードの出力を見てみるとsurface、displacementとなっています。

画像10

 これは、2つのOutput Variables and ParametersノードのContext TypeがそれぞれSurfaceとDisplacementで、Collectノードでまとめられているためです。shaderとsurface、displacementで名前は違いますが色は同じ、つまり同じ型を表しています。

 この様にVOPでは同じ型でも違う名前がついていることがありますので混乱しないようにします。どうしても名前を変えたい場合はNullノードを使う方法があります。

画像11

レイヤー
 shader(surfaceやdisplacementなど)の他にlayerという出力があります。Material Networkに戻って以下の様にノードを組んでみます。
・Principle Shaderノードを2つ、Layer Mixノードを1つです。
・Principle ShaderノードはそれぞれBase Colorを違う色にしておきます。
・Principle Shaderノードを2つのマテリアルフラグ(オレンジ色)はOFFにします。
・Layer MixノードのマテリアルフラグをONにします。

画像12

 次にSOPに戻って、適当なジオメトリに今作ったシェーダーを割り当てます。

画像13

 そして、Renderビューで(Sceneビューでは表示されません)結果を確認してみます。Layer MixノードのAlphaを変えると2つのPrinciple Shaderノードの出力がAlphaによってミックスされているのが分かります。この様にレイヤーを使うとマテリアルを簡単にミックスできるようになります。

画像14

 レイヤーは自分で作成したマテリアルにもつけることが出来ます。こちらのヘルプを参照してください。ただし、以下の文がちょっと入門者には分かりづらいです。

マテリアルネットワーク内で、Layer Struct(レイヤー構造体)を生成します。

 これはつまり、layerを出力にもつノードを作ってください、という意味です。ヘルプを参照しながら、ここではPrinciple Shaderノードを使ってこの様に組んでみました。ただし、ヘルプの通りだとエラーになるため以下の点だけ変えています。
・Type: Struct に加えてその横のセレクトでShaderLayerを選択する。

画像17

 一つ上の階層に戻ってMaterial Shader Builderノードを見るとlayer出力が追加されています。

画像17

 さて、何やら黄色い見知らぬノードが登場しました。これはParameterノードと言って、グローバル入出力以外にマテリアルに入出力を作ることが出来るノードです。設定値によって入力にも出力にもなります。

 試しに新しくParameterノードを配置して以下のように設定してみます。

画像18

 そして上の階層に戻るとbase_colorが入力に追加されています。パラメータービューにもフォームが出来るのでここで色を変えることが出来ます。

画像19


 Parameterノードの様に自由に入出力を作ることできるノードは他にもあります。Subnet ConnectorノードBindノードです。ここでは長くなってしまうので説明は省略します。

プロモート
 さらにさらに、Parameterノードを使用しないで入力を追加する方法があります。プロモートと呼ばれる機能です。

 先ほど追加したbase_colorのParamterノードを削除して、Principle Shaderノードのbasecolor入力でマウスの中ボタンを押し、Promote Paramterを選択します。すると入力が以下の様な見た目になります。

画像19

 一つ上の階層に戻ると、Parameterノードで作った時と同じように色を設定する入力が追加されています。
 なお、プロモートは出力には対応していません。

まとめ
 このようにVOPでは入出力を設定する方法が多数存在するので、初めの頃は混乱するかもしれません。整理して考えられるように以下にまとめてみます。

1. グローバル入出力(Global Variablesノード、Output Variables and Parametersノード)。
2. Paramterノードなど入出力用のノードによる入出力(Parameterノード以外にもSubnet Input Connectorなど色々ある)。
3. プロモート(入力のみ)。

 どの方法が一番良いのかというのはケースバイケースになるためここでは説明できません。

 入出力に関してさらに詳しく理解するにはヘルプを参照してください。
出力の生成
シェーダーのレイヤー化
レイヤー出力を独自マテリアルに追加する方法
シェーダー出力を理解する

もしこの記事があなたのお役に立てたなら幸いです。 よろしければサポートをお願いします。今後の制作資金にさせていただきます!