KarmaでMaterialXからAOVを設定し、チャンネルのレンダリングとレンズシェーダーによるテクスチャベイク
概要
Karmaでマテリアル内から参照可能な任意の値をレンダリングする方法とレンズシェーダーを利用してUV位置に合わせたレンダリングを行う方法です。
実行結果
各チャンネルのレンダリング結果
レンズシェーダーを利用してUV位置に合わせたレンダリングした結果
AOVを作成する
AOV (“Arbitrary Output Variable:任意の出力変数”)
AOVを設定することでレンダリング時に出力される画像チャンネルを追加することができます。
AOVのプレビュー
RenderSetting でAOVを作成する
KarmaRenderSettingには設定でいくつかのAOVを追加する機能があります。
AO、AlbedoなどはKarmaRenderSettingsから追加されたものも使えるので必要なチャンネルがあればRenderSettingだけで有効化できます。
- Karma Render Settings/ AOVs(Render Vars)/ Component Level Output / Ambient Occulusion を有効
KarmaRenderSettingにより追加したAmbientOcculusionのAOV
MaterialX でAOVを作成する
メッシュにアサインするMaterialX内でKarmaAOVというノードを作成することで任意のパラメータからAOVを作成することができます。
MaterialBuilder内でKarmaMaterialBuiderを作成します。
KarmaMaterialBuilderの作成
出力したい値を入力し、KarmaAOVの出力をMaterialXの出力に接続するとAOVが作成できます。
AOVの名前はノードの名前になるので指定したい名称をKarmaAOVノードにつけます。(ノードの設定で変更もできる)
KarmaAOVの接続
このマテリアルがKarmaRenderSettingsに接続されるとAOVのプレビューが可能になります。
各チャンネル用のKarmaAOVを接続
AOVのプレビューができるようになる
RenderProductでAOVをレンダリングする
AOVを追加した場合、exrやpicなどのマルチチャンネルをサポートしている画像形式であればそれらを含めてレンダリングができますが、tgaなどはレンダリングするAOVを指定する必要があります。
AOVを複数追加した状態、そのままだとtgaではBeutyのみが出力される
RenderProductを編集する
タブメニューからRenderProductEditを選択し、RenderProductノードを作成します。RenderProductノードの「Ordered Render Vars」の項目からレンダリングしたいAOVを選択できます。
また、その下のProductNameを指定すると保存ファイルの名前の設定も可能です。
RenderProductでレンダリングするAOVと出力ファイル名を指定できる
RenderProductからUSDRenderROPに接続し、レンダリングすると指定のAOVをレンダリングできます。
tgaで出力できたAOV
テクスチャベイクする
以下で紹介しているカメラやRenderSettingの設定値はCGWikiの方で紹介してくれている内容を参考にしています。
ベイクと書きましたが厳密には機能としてはUV形状にレンダリングを行う方法です。ベイクとして用意されている機能ではないのでレンダリング時の設定などに注意し、カスタマイズして利用する必要があります。
LensShaderを作成
Material Libraryを作成し、中に入って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を設定
ここまで設定項目がうまくできているとビューで各面がUV位置に表示されてレンダリングされているのを確認できます。
UVに合わせてレンダリングできる
指定のチャンネルをレンダリング
前述のようにAOVをレンダリングするためにKarmaRenderSettingsを接続します。
併せて解像度も指定します。
AOVを有効にするためKarmaRenderSettingsを接続し、合わせて解像度を設定
RenderProductも作成することでMaterialXで指定した値をUVの形状にレンダリングすることができます。
RenderProductで指定のAOVを出力
頂点カラーをテクスチャ位置にベイク
このままだとテクスチャをUV形状に合わせただけなので用途はあまり思いつく無いですが、例えばMaterialXでMaterialXGeometryColorノードを使えば頂点カラーの参照ができます。マスクや持たせたい色調など、頂点カラーに持たせることができるものなら何でもベイク可能になります。
メッシュに作成したいマスクの頂点カラーを持たせる
MaterialXGeometryColorで頂点カラーを参照し、AOVとしてレンダリング
もちろん、MaterialXで参照、構成可能な値ならレンダリングができます。
Karmaは非常に拡張性が高いレンダラーなので画像や映像の出力目的だけではなくパイプライン構築においても色々用途が考えられそうでした。
よいKarmaライフを!
Discussion