RenderMan for Houdini

「RenderMan for Houdini」に関する備忘録

RenderMan(レンダーマン)とはPixar社のレンダラー。
https://renderman.pixar.com/product

RenderMan Showreel 2020 from Pixar’s RenderMan on Vimeo.

Pixarのアニメーション作品は全てRenderManでレンダリングされており
MPCを筆頭とする海外の大手VFXプロダクションにおいても様々な映画で使用実績がある。
Houdini上でRenderManを使用するためにはHoudini Indieの購入が必要だが
RenderMan自体は非商用に限り無料で使用できる。

今回は先日Houdiniで作成したロボットのシーンをRenderManでレンダリングしてみた。

RenderManには様々な質感表現に対応しているモノリシックシェーダの
Pixar Shaderがあるが、今回はサブスタンスペインターで作成したPBRテクスチャ
(basecolor-metal-roughnessワークフロー)を使用するためDisney Shaderを使用した。
これはHoudiniのPrincipled Shaderに相当するシェーダになる。
(というか、HoudiniのPrincipled ShaderはDisney Shaderがベースになっている)

HoudiniのPrincipled Shaderのアイコンはシンデレラ城だが、
本家のDisney Shaderのアイコンはミッキー。

ちなみにPixar ShaderはLuxoボール。

今回作成したシェーディングネットワークは以下の通り。
Disney Shaderにサブスタンスペインターで作成したテクスチャー(basecolor,metal,roughness,normal)を接続している。(SeExprノードについては後述)

basecolorテクスチャーのみリニア空間へ変換しておく。

先日やったような腐食箇所以外のロボットのペイントカラーを変更するために
SeExprノードを使用した。
SeExprはウォルトディズニー・アニメーションスタジオが開発したエクスプレッション言語。
https://wdas.github.io/SeExpr/overview.html

SeExprノードはRenderManシェーダ内でInline Codeノードの代わりに使用できる。
(あたりまえだがRenderManコンテキスト内ではVEXは使用できない)

そしてSeExprノードには以下のコードを記述。
このプログラムによって腐食箇所以外のロボットのペイントカラーを変更している。
SeExpr自体は少々クセがある言語で、最後の行にはセミコロンを付けずに
return値だけを書いておくなど様々な決まりごとがある。

col = colorInput1;# ベーステクスチャ
col = rgbtohsl(col);# HSV空間へ変換
a = floatInput1;# 錆のalphaテクスチャ
a = a < 0.1 ? 1 : 0;
b = hash(floatInput2+100);# 乱数を発生(floatInput2はロボットID)
b *= a;# 錆がない箇所は0に設定
h = col[0]+b;# 色相を変調
s = col[1];# 彩度
v = col[2];# 明度
h = h < 0 ? 1+h : (h > 1 ? h-1 : h);# 0から1に制限
s = s < 0 ? 1+s : (s > 1 ? s-1 : s);
v = v < 0 ? 1+v : (v > 1 ? v-1 : v);
col = hsltorgb([h,s,v]);# RGB空間へ戻す
col

RenderManのPrimVarノードを使用するとHoudiniのジオメトリアトリビュートを
読み込むことができるが、Primitiveアトリビュートを読み込むとRenderManがクラッシュするためRenderMan側で使用するアトリビュートはPointに対して持たせておいた。
(今回はロボットごとのid)

RenderManのレンダリング結果(4Kサイズ)

albedoを見るとシェーダ(SeExpr)によってロボットの腐食部分の色は変えずに
ペイント部分の色だけが変化していることが確認できる。

以下、RenderMan for Houdiniを使用して感じたメリット。

・Houdiniとの密なインテグレート
・It(Pixar製のビューワ)の使いやすさ
・2種類のサーフェイスシェーダ(シンプルな”Disney”と多機能な”Pixar”)
・マテリアルプリセットの豊富さ
・GI計算の収束スピードの速さ
・チェックポイント機能(GI計算の途中結果を繰り返し回数や時間間隔を基準にして保存)
・学習リソースの豊富さ(https://renderman.pixar.com/learn
・シーンに応じたGIアルゴリズムを選択可能

RenderMan for Houdiniのマテリアルプリセット画面