Created on | Updated on

HoudiniでMaterialXを出力して再利用するパート2

まずは下記記事をご一読ください。

SolarisでMaterialXファイルを保存して、再利用する

さて、ここでなぜmtlx imageがそのままだと出力できないのか?

今回も一番下にサンプルファイルがあります。

 

MaterialXとして出力するには、Pattern shadersがノードグラフ内に配置されることを必要とします。このPattern Shadersとは、出力がプレーンなデータ型(float, vector3など)であるものです。つまり、非シェーダタイプです。

HoudiniはUSDライブラリ(ファイルフォーマットプラグイン)を使用して.mtlxファイルを読み込むため、.mtlxファイルはUSD実装の前提条件を満たしている必要があります。

例えば、パターンシェーダはノードグラフ(サブネット)にある必要があり、ターミナルシェーダ(例えば、Surface、Volume、またはDisplacementマテリアルSHADER)はmtlx surface,、ボリューム、またはdisplacement にフィードする必要があります。

 

確かにSubnetにまとめずにそのまま出力すると

<input name="base_color" type="color3" nodename="mtlximage1" value="0.8, 0.8, 0.8" />

.

<image name="mtlximage1" type="color3">
<input name="texcoord" type="vector2" nodename="mtlxtexcoord1" value="0, 0" />
<input name="file" type="filename" value="C:/temp/houdini/USD/A_Beautiful_Game_No_Cache/A Beautiful Game No Cache/Textures/King Textures/King Black Textured/DefaultMaterial_Base_color_1001.png" />
<input name="layer" type="string" value="" />
<input name="default" type="color3" value="0, 0, 0" />
<input name="uaddressmode" type="string" value="periodic" />
<input name="vaddressmode" type="string" value="periodic" />
<input name="filtertype" type="string" value="linear" />
<input name="framerange" type="string" value="" />
<input name="frameoffset" type="integer" value="0" />
<input name="frameendaction" type="string" value="constant" />
</image>

それに対し、Subnetにいれて出力すると

<input name="base_color" type="color3" nodegraph="NG_subnet1_color3_float_float_float" output="out" value="0.8, 0.8, 0.8" />

 

<nodegraph name="NG_subnet1_color3_float_float_float">
<image name="image1" type="color3">
<input name="file" type="filename" value="C:/temp/houdini/USD/A_Beautiful_Game_No_Cache/A Beautiful Game No Cache/Textures/King Textures/King White Textures/DefaultMaterial_Base_color_1001.png" />
<input name="layer" type="string" value="" />
<input name="default" type="color3" value="0, 0, 0" />
<input name="texcoord" type="vector2" value="0, 0" />
<input name="uaddressmode" type="string" value="periodic" />
<input name="vaddressmode" type="string" value="periodic" />
<input name="filtertype" type="string" value="linear" />
<input name="framerange" type="string" value="" />
<input name="frameoffset" type="integer" value="0" />
<input name="frameendaction" type="string" value="constant" />
</image>
<output name="out" type="color3" nodename="image1" />

 

とnodegraphがしっかり記述されます。
正しく読み込むにはここが必要ということになります。


次はPyroに割り当てるマテリアルをMaterialXで作成してみます。

mceclip0.png

mceclip1.png

このままmtlxvolumematerial1を右クリックからSave MaterialXを行うと下記のように出力します。先ほど同様nodenameしか出力できていません。

<volume name="MTLX_VOLUME" type="volumeshader">
<input name="vdf" type="VDF" nodename="mtlxanisotropic_vdf1" value="" />
<input name="edf" type="EDF" nodename="mtlxconical_edf1" value="" />
</volume>

 

そこで下記のようにノードグラフ(Subnet)に収納し、出力

mceclip2.png

 

この状態で出力すると

<volume name="MTLX_VOLUME" type="volumeshader">
<input name="vdf" type="VDF" nodegraph="NG_subnet1_VDF_EDF" output="out" value="" />
<input name="edf" type="EDF" nodegraph="NG_subnet1_VDF_EDF" output="out_2" value="" />
</volume>

として、nodegraphとして出力することができました。

これで出力したMaterialXファイルをリファレンスして割り当てると

mceclip3.png

やった!ちゃんと割り当てることができました。

ご参考になれば幸いです。

 

 

 

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ