🍞

KarmaでMaterialXからAOVを設定し、チャンネルのレンダリングとレンズシェーダーによるテクスチャベイク

2025/03/12に公開

概要

Karmaでマテリアル内から参照可能な任意の値をレンダリングする方法とレンズシェーダーを利用してUV位置に合わせたレンダリングを行う方法です。

実行結果

各チャンネルのレンダリング結果
各チャンネルのレンダリング結果

UV位置に合わせたレンダリング
レンズシェーダーを利用してUV位置に合わせたレンダリングした結果

AOVを作成する

AOV (“Arbitrary Output Variable:任意の出力変数”)
https://www.sidefx.com/ja/docs/houdini/solaris/karma_aovs.html

AOVを設定することでレンダリング時に出力される画像チャンネルを追加することができます。

AOVのプレビュー
AOVのプレビュー

RenderSetting でAOVを作成する

KarmaRenderSettingには設定でいくつかのAOVを追加する機能があります。
AO、AlbedoなどはKarmaRenderSettingsから追加されたものも使えるので必要なチャンネルがあればRenderSettingだけで有効化できます。

  • Karma Render Settings/ AOVs(Render Vars)/ Component Level Output / Ambient Occulusion を有効

KarmaRenderSettingにより追加したAmbientOcculusionのAOV
KarmaRenderSettingにより追加したAmbientOcculusionのAOV

MaterialX でAOVを作成する

メッシュにアサインするMaterialX内でKarmaAOVというノードを作成することで任意のパラメータからAOVを作成することができます。
MaterialBuilder内でKarmaMaterialBuiderを作成します。

KarmaMaterialBuilderの作成
KarmaMaterialBuilderの作成

出力したい値を入力し、KarmaAOVの出力をMaterialXの出力に接続するとAOVが作成できます。
AOVの名前はノードの名前になるので指定したい名称をKarmaAOVノードにつけます。(ノードの設定で変更もできる)

KarmaAOVの接続
KarmaAOVの接続

このマテリアルがKarmaRenderSettingsに接続されるとAOVのプレビューが可能になります。

各チャンネル用のKarmaAOVを接続
各チャンネル用のKarmaAOVを接続

AOVのプレビューができるようになる
AOVのプレビューができるようになる

RenderProductでAOVをレンダリングする

AOVを追加した場合、exrやpicなどのマルチチャンネルをサポートしている画像形式であればそれらを含めてレンダリングができますが、tgaなどはレンダリングするAOVを指定する必要があります。

AOVを複数追加した状態
AOVを複数追加した状態、そのままだとtgaではBeutyのみが出力される

RenderProductを編集する

タブメニューからRenderProductEditを選択し、RenderProductノードを作成します。RenderProductノードの「Ordered Render Vars」の項目からレンダリングしたいAOVを選択できます。
また、その下のProductNameを指定すると保存ファイルの名前の設定も可能です。

RenderProductでレンダリングするAOVと出力ファイル名を指定できる
RenderProductでレンダリングするAOVと出力ファイル名を指定できる

RenderProductからUSDRenderROPに接続し、レンダリングすると指定のAOVをレンダリングできます。

tgaで出力できたAOV
tgaで出力できたAOV

テクスチャベイクする

以下で紹介しているカメラやRenderSettingの設定値はCGWikiの方で紹介してくれている内容を参考にしています。

https://tokeru.com/cgwiki/HoudiniLops.html#texture_baking_with_karma

ベイクと書きましたが厳密には機能としてはUV形状にレンダリングを行う方法です。ベイクとして用意されている機能ではないのでレンダリング時の設定などに注意し、カスタマイズして利用する必要があります。

LensShaderを作成

Material Libraryを作成し、中に入ってKarma UV lensを作成します。
(このあとに作成するカメラで設定する項目があります。)

Karma UV lensを作成
Karma UV lensを作成

ベイク用のカメラを作成

カメラを作成し、以下の値を設定します

  • Karma/ Use Lens Shader を有効
  • Karma/ Lens Shader VOP に先ほど作成したLens Shaderを設定

レンズシェーダーを有効化
レンズシェーダーを有効化

  • View/ Clipping Rangeを 0-2、
  • View/ Aspect Ratio を1:1、

レンダリング範囲、アスペクト比を設定
レンダリング範囲、アスペクト比を設定

Render Setting を作成

RenderSettingノード(※KarmaRenderSettingではテクスチャの設定が無いのでRenderSetting)を作成し、以下の値を設定。

  • Karma/ Global/ TextureBaking/ ObjectID を 1
  • Karma/ Global/ TextureBaking/ Tile を 1001
  • Karma/ DefaultGeometrySetting/ TextureBaking/ Low Resolution を 1

RenderSettingを設定
RenderSettingを設定

ここまで設定項目がうまくできているとビューで各面がUV位置に表示されてレンダリングされているのを確認できます。

UVに合わせてレンダリングできる
UVに合わせてレンダリングできる

指定のチャンネルをレンダリング

前述のようにAOVをレンダリングするためにKarmaRenderSettingsを接続します。
併せて解像度も指定します。

AOVを有効にするためKarmaRenderSettingsを接続し、合わせて解像度を設定
AOVを有効にするためKarmaRenderSettingsを接続し、合わせて解像度を設定

RenderProductも作成することでMaterialXで指定した値をUVの形状にレンダリングすることができます。

RenderProductで指定のAOVを出力
RenderProductで指定のAOVを出力

頂点カラーをテクスチャ位置にベイク

このままだとテクスチャをUV形状に合わせただけなので用途はあまり思いつく無いですが、例えばMaterialXでMaterialXGeometryColorノードを使えば頂点カラーの参照ができます。マスクや持たせたい色調など、頂点カラーに持たせることができるものなら何でもベイク可能になります。

メッシュに作成したいマスクの頂点カラーを持たせる
メッシュに作成したいマスクの頂点カラーを持たせる

MaterialXGeometryColorで頂点カラーを参照し、AOVとしてレンダリング
MaterialXGeometryColorで頂点カラーを参照し、AOVとしてレンダリング

もちろん、MaterialXで参照、構成可能な値ならレンダリングができます。


Karmaは非常に拡張性が高いレンダラーなので画像や映像の出力目的だけではなくパイプライン構築においても色々用途が考えられそうでした。
よいKarmaライフを!

Discussion