Houdini Karmaレンダラーでのマテリアル設定メモ
Blender使いがHoudini Karmaのマテリアル作成で詰まったので、備忘録を書きこ。houdini 20.5。
とりあえずKarma XPUレンダラーを使う
Houdiniのレンダラーには、従来からの「mantra」と、19.0ぐらいから追加された「karma」の2つが標準搭載されている。
karmaにはCPU版とXPU版の2種類があるが、GPU(Nvidiaのみ)によるアクセラレーションが効くのはXPU版だけなので、とりあえずコレを使う。
Karma XPUはMaterialXシェーダのみを扱うため、mantra用に組んだシェーダーは正常に描画されないことがある(重要)
(参考)https://www.sidefx.com/ja/products/karma/
(参考)https://www.sidefx.com/ja/faq/question/karma-vs-mantra/
とにかくmtlx standart surface VOPを使う
BlenderにおけるPrincipled Shaderに相当するのは、「mtlx standart surface VOP」なので、これを使う。
https://www.sidefx.com/ja/docs/houdini/nodes/vop/mtlxstandard_surface.html
チュートリアルでよく使われるPrincipled Shader VOPは、mantra用の古いシェーダーであり、KarmaGPUでは正常に描画されないことが多いため、使わない。(特にBlenderユーザーは、癖でPrincipled Shader VOPを使いがちなので注意。transmission colorなどが反映されず、めちゃくちゃ悩む羽目になった)
テクスチャの使い方
MtlX tiled image VOPでテクスチャを読み込み、MtlX standart surface VOPのbasecolorやroughnessに接続する。(MtlX image VOPでもよいが、タイリングできないので基本的には使わない)
Normalマップの場合は、Signatureをvector3に設定する必要があることに注意。(blenderのnon-color設定と理由は同じっぽい)
(参考)Intro to Karma Materials for Beginners in Houdini
※この他のノードについても、Karma用のマテリアルを作る場合は、「MtlX」という接頭語が付いているVOPを使う。(MtlXはMaterial Xの略だと思われる。)
公式では、Karma Material Builder LOPを呼び出し、その中でマテリアルを作成することが推奨されている。この内では、MtlX系のVOPしか呼び出せなくなるので安心。(つまり、mantra用のVOPが呼び出せない)
https://www.sidefx.com/ja/docs/houdini/solaris/kug/materials.html
Cdアトリビュートの読み込み方
Attribute Randamaizeなどでポイントに加えたCdアトリビュートは、MtlX Geometry Color VOPで読み込み、basecolorなどに接続して使う。
https://www.sidefx.com/ja/docs/houdini/nodes/vop/mtlxgeomcolor.html
なお、同じくアトリビュートを読み込めるMtlX Geometry Property Value VOPでは、何故かCdアトリビュートを読み込めない。ただし、事前にCdアトリビュートをAttribute Rename SOPで名前をCd以外に変更しておくと読み込める。不思議。
マテリアルの割り当て(Solaris)
Render viewのレンダリングはmantraしか扱えないため、Karmaのレンダリング結果を見るには、Solaris(もしくはStage、LOP Network内と言い換えてもよい?)で確認する。
概略的には、次の作業を行う。詳細はyoutubeのチュートリアル等を参照。
・SOP import LOPでジオメトリを読み込み、
・Material Libraly LOPでマテリアルを呼び出し、
・Assign Material LOPでジオメトリにマテリアルを割り当て、
・Dome Light LOP等でライティング、HDRIを行い、
・Karma LOPを接続し、レンダリング
Solarisの概念は、Blenderユーザーには一番慣れない部分だけど、配置やライティングに集中できるのはいいことかも。(大きなシーンになってくると、Blenderはアウトライナーがごちゃりやすい。)
その他気づき
マテリアルを作る場所は、matでなくてもよい。SOP内に作ったMaterial networkでもよいし、Solaris内(Stage、LOPと言い換えてもよい?)のMaterial Library LOPでもよいみたい。
Material Paletteに用意されているマテリアルは、基本的にPrincipled Shader VOPで組まれているので、Karmaで使う場合はMtlX standart surface VOPで設定しなおす必要がある。面倒な場合は、Material Linker LOPで呼び出せるカタログが便利。これらはMaterialXで作られているので、Karma GPUで完全に動く。
(参考)https://qiita.com/jyouryuusui/items/9b4cb03d26bfdf616b86
SOP Import LOPでSolarisにジオメトリを読み込むと、SOPネットワーク内で割り当てたマテリアルが剝がれるので、上述の方法でマテリアルを再度割り当てする必要がある。マテリアルが剥がれるのが面倒な場合は、Scene import LOP(All)で読み込むと、マテリアルも含めてSolarisにインポートできる。