「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)
albedoを見るとシェーダ(SeExpr)によってロボットの腐食部分の色は変えずに
ペイント部分の色だけが変化していることが確認できる。
以下、RenderMan for Houdiniを使用して感じたメリット。
・Houdiniとの密なインテグレート
・It(Pixar製のビューワ)の使いやすさ
・2種類のサーフェイスシェーダ(シンプルな”Disney”と多機能な”Pixar”)
・マテリアルプリセットの豊富さ
・GI計算の収束スピードの速さ
・チェックポイント機能(GI計算の途中結果を繰り返し回数や時間間隔を基準にして保存)
・学習リソースの豊富さ(https://renderman.pixar.com/learn)
・シーンに応じたGIアルゴリズムを選択可能