HOME

AOVを使ってKarmaでBaseColor、Normalなどのチャンネルを表示してレンダリングする

プロシージャルモデリングのバリエーションを一つのシートにまとめるにあたり、好きなパラメータ(特にtangent)をレンダリングするための方法を知りたかった

環境

Houdini Indie 20.5.487

Albedoをレンダリングする

KarmaRenderSettingsでAOVを追加
ゲームでも同様に利用される一部のチャンネル(Albedo、AO等)はKarmaRenderSettingにそれぞれのチャンネルを有効化する機能が備わっている。
これらを有効にするとRenderVarとして紐づけられ、レンダリング可能になる。

Karma Render Settings/ AOVs(Render Vars)/ Component Level Output / Albedo(Ambient Occulusion)にチェック

チェックを入れるとKarmaレンダリング中のシーンビュー右下のボタンで表示するRenderVarを切り替えることができる。

補足
AOVはMaterial側の出力に依存しているようなので特殊なレンダリング形式では映らないかも。
PrincipleShader、COP Preview Material、MaterialXなどは対応しているようなので概ねこの方法でRenderVarを追加できる。

Roughness、TangentNormal (NormalMap) をレンダリングする

Roughness、Normalなどの値はレンダラー側で出力に対応していない。
Material側からAOV (Arbitrary Output Variables:任意の出力変数)でRenderVarに紐づける必要がある。

参考情報:KarmaでのCrypromatteとマテリアルAOVs
https://www.sidefx.com/ja/docs/houdini/solaris/karma_aovs.html
(マテリアルベースのAOVを紐づける方法はHoudini20.0から追加されたらしく情報が全然出てこなくて大変だった)

RenderVarを追加するMaterialを作成する

手順
1.lopnetでMaterialLibraryを作成し、その中でKarmaMaterialBuilderを作成

KarmaMaterialBuilderを作成

2.KarmaMaterailBuilder内で「MtlxImage」ノードを作成し、読み込みたいテクスチャを参照する。
3.「KarmaAOV」ノードを作成し、作成したいRenderVarの名前に設定。(ノード内で作成するRenderVarの名前がデフォルトでノード名になっている)
4.KarmaAOVの出力をもともと存在していた「MaterialOutputsAndAOV」に接続する

手順2~4のノード構成

5.Roughnessも同様にMtlxImageで読み込み、KarmaAOVを通してOutputsに接続する
※KarmaAOVを通して出力するだけでRenderVarには登録されるが、デフォルトで存在していた「mtlxstandard_surface」に接続するとマテリアル上でプレビューもされるので下記画像では合わせてそちらにも接続している。

RenderVarを追加するためのマテリアルのグラフ構成

プレビューとレンダリング

マテリアルで作成したRenderVarの登録方法
作成したマテリアルをアサインするとRenderVarとして登録される。 (render settingなどでの設定も不要)

AOVを設定したマテリアルのアサインがある場合RenderVarが追加されている

出力
pic形式などで出力すると登録したrender varが含まれた状態で出力できる。
expressionでRenderVarを参照する方法が判らなかったのでtgaなどに分割はちょっと面倒かも。

pic形式で保存し、MPlayでの確認

すごい汎用性ありそうな技術。

fish_ball

プロシージャル魚類