AOVを使ってKarmaでBaseColor、Normalなどのチャンネルを表示してレンダリングする
プロシージャルモデリングのバリエーションを一つのシートにまとめるにあたり、好きなパラメータ(特にtangent)をレンダリングするための方法を知りたかった

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

チェックを入れると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を作成

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

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

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

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

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

fish_ball
プロシージャル魚類