Dec 23, 2017

Houdini | Redshift Rendering Work Flow


Houdini Advent Calendar 2017の24日目の記事です。



前置き1

Houdiniで本格的に仕事を初めてから2年半が経とうとしています。Mantra, Octane, Arnold, Redshift とそれぞれ長所・短所がありますが、ここ数ヶ月はRedshiftで仕事をする機会が増えました。段々と定着していった実践的な手法とセッティングなどを紹介していきます。これまでの皆さんの記事ほど直接的にHoudiniに触れませんが、HoudiniでRedshiftを使用して仕事できるレベルまで行きたいって方々の助けになればと思います。



インストール


https://www.redshift3d.com/demo デモバージョンのダウンロード場所
Plugin Configuration for Houdini   houdini.envなどの設定方法

まずはインストールですが非常に簡単です。インストールしてhoudini.envに指定されたPATH, HOUDINI_PATHを書き込むだけで基本的には大丈夫です。自分が使用しているHoudiniのバージョンを指定しなくてはならないので、そこだけ注意です。


     HOUDINI_DSO_ERROR = 2

     PATH = "C:/ProgramData/Redshift/bin;$PATH"
     HOUDINI_PATH = "C:/ProgramData/Redshift/Plugins/Houdini/16.5.268;&"


僕の使っているバージョンは16.5.268なので上記のようになっています。


ライセンス

有償版のRedshiftを購入しましたが、フローティングのライセンスを購入しなくてもノードロックライセンスで充分だと思っています。理由としてはLicense ToolでActivate, Deacvate が容易にできるので、違うマシンへのライセンス移動が非常に簡単です。私も家で使用しているライセンスを会社で使用したりしています。Deactivateし忘れて会社に向かってしまったりして、思い出して自宅に戻ったり・・・もしますが。


前置き2

仕事柄、実写合成モノの仕事が多いので、撮影立ち合いの際にセッティングチェンジ時などで現場の環境撮影・チャートのリファレンス撮影などを行います。リファレンスを撮影してもらう上で必要なモノを軽く紹介します。


    1. カラーチャート

会社で使用しているMacbes X-rite Color Checker Classic。アマゾンでも購入可能です。Look Devを行う上でこれがないと始まりませんが学生には少し高額なものかもしれません。使用方法としては撮影の合間でチャートを入れてリファレンス撮影をしてもらいます。その撮影素材をベースとして実写合成を開始し、Nuke上でCGからレンダリングされた画像と撮影素材のカラーチャートの色を同じにすることで実写と馴染んだCGを合成します。
  • カラーチャートを入れたリファレンス素材を撮影する
  • CG上でも現物と同じ色味のカラーチャートを作成し合成するCGと共にレンダリング
  • コンポジットでリファレンスとCGのカラーチャートの色を同じにしてゆく


銀玉・グレーボール・カラーチャートを同時にリファレンス撮りできるプレートを自作。

  2. HDRI

頻繁に使用しているPTGUIなどで生成しています。
シャッタースピード1/8, 1/30, 1/125, 1/500, 1/2000, 1/8000の6枚撮影。
1/8, 1/30, 1/125の3枚だけだと光源のルミナンス値が変わってしまうので6枚を推奨します。銀玉撮影ではなく、魚眼レンズで前後左右の4方向を撮影するのを基本としています。

シャッタースピードの違う撮影素材。AEB設定を使用。

  • 1/8, 1/30, 1/125, 1/500, 1/2000, 1/8000の6枚を撮影する
  • 前後左右4方向を撮影する
  • PTGUIなどでHDRIを作成する。

Houdiniシーン作成

1,2を使用してベースとなるシーンを作りました。
そしてHoudini上でチャートとグレーボールなどの作成。シーンファイルはこちらです。
ColorChart_Redsihft.zip 下記のようにノードを繋げて親子関係をつくる。そうすることで、どのカメラにも同じ位置にチャートのガイドを出すことができます。非常に便利なので、是非使用してみてください。


Chart_Toolの中にあるSHOPネットワークにRedshift Materialがあり、それらが割り当てられています。こういうアセットを1つ作ると社内で共有しやすいので、Houdiniは非常に便利ですね。Mantra用のシェーダーに置き換えればMantraでも使えます。


次にRedshift Dome Lightを作成し、.hdrを読み込みます。(.hdrもzipファイルの中に入っています)

レンダリングしてゆくのですが、ざっくりとRedshift ROPの設定をしたいと思います。
まずRedshift TAB>Settings>Sampling Optionです。ここは名前どおりサンプリングのクオリティーを設定する最も大切な場所となります。特に下線を引いた部分が大切です。
後で説明するので、とりあえずRandomize Pattern on Each Frameのチェックだけ外します。


次にRedshift TAB>Global Illumination TAB>Setting
Primary GI Engine, Secondary GI Engine共にBrute Forceに変更します。色々試しましたが基本的にはBrute Forceがクオリティー的に一番良いと感じています。ガラスや水などをレンダリングする際はSecondaryをPhoton MapやIrradiance Point Cloudなどの設定の方がコースティクスなどが現実的なスピードに感じる事もありましたが・・・


最後にIPR TABの設定
  • Override IPR Camera Resolution : OFF (IPRレンダリング時のリサイズ機能。とりあえずOFF)
  • IPR Progressve Rendering : OFF (Progressive Renderingはほぼ使用しないので)
  • IPR Live Update Meshi Deformations/ Proxy Seaquence : ON (有効にすることでジオメトリのTransformなどを変更しても自動的にIPRレンダリングを更新する。ただ、シミュレーションなどを実行すると、各フレームごとに更新しようとするので危険です。非常にPCが固まりやすい。シミュレーション時はRender Viewの自動更新の機能を切るなどして対応しています。)

Render View でIPRと任意のカメラを指定してRenderを実行。


こんな感じのレンダリング結果がRender Viewに表示されます。


Lighting 

基本的に
環境光 : Redshift Dome Light
キーとなる光源 : Redshift Light (Distant, Point, Spot, Area)
屋外なのか室内なのかなどの実際の撮影での環境によって扱うライトの種類は変更します。Intensityの調整とサブにいくつかライトを配置して演出的なライトを入れていったり他のCGソフトでライティングしてゆくこととあまり変わりません。

Dome Lightに張り込むHDRに対して一つ注意点があります。下にあるような明確な光源があるHDRIで光源があるが故にキーライトの調整が難しい場合があります。そういった時はPhoto Shopのスタンプツールなどで光源を消した方が便利な場合があります。


  • HDRの光源を消す
  • 元々光源があった場所にキーライトを配置する
  • 演出的なサブのライトを配置する

元々の光源があるHDR
Photo Shopのスタンプで光源を消す



Render Sampling

ここからが本題です。前振りが長くてごめんなさい。先ほどレンダリングした画像を再度見てみます。Redshiftは高速ですがデフォルトの設定だとサンプリングが低い為にノイズが多く出てしまっています。




ではサンプリングを上げていきましょう。まずはSampling Option。

  • Min Samples : 16
  • Max Samples : 256
  • Adaptive Error Threshold : 0.001


次にGlobal Illumination Setting : GIのサンプリング設定

  • Brute Force GI Rays : 256


レンダリングをしてみましょう。ノイズが消え。滑らかな結果になりました。
レンダリング時間は1280*720のサイズでデフォルト設定で10秒。サンプリングを上げて17秒。仕事で使用する際はこのくらいのサンプリングの設定を基準としています。


サンプリング値はこのくらいの設定でいいのですが、レンダリング結果を良く確認すると影の落ちている部分に微かなノイズを感じます。しかし、これ以上サンプリングを上げていってもあまり変化が見られない場合が多くあります。


Light Sampling

サンプリングを上げたのに陰影の部分に僅かなノイズが気になる場合があります。大抵の場合、Light Sampsの値が問題となる場合が多い気がしています。今回のサンプルシーンの場合はRedshift Dome Lightのみでライティングしているのでその設定を見てみましょう。

Light TAB > Light Samples : 1024に設定 (デフォルト値 64)


レンダリングしてみます。影の部分のノイズが滑らかになりました。
個人的にRedshiftと向き合っていくとこのLight Samplesの設定がかなり大切だなと思う瞬間が頻繁にあり、色々検証したのですが、使用するHDRの持つピクセルサイズを最大値としてとらえた方がいいのかなと。ただ、その分レンダリング時間は変わってくるので、最大値の半分の値などを入力してクオリティー的に担保できてるかを検証する必要があるります。

ただしDome Light以外のRedshift Lightのサンプリング値に関しては別です。Redshift Lightは64~128のサンプリング値でかなりの効果が得られるので1024とか大きすぎる数値にしないように注意してください。

1024に設定してレンダリング。レンダリング時間は18秒。


  • Redshift ROPでサンプリングを調整
  • Redshift Light, Redshift Dome LightのLight Samplesの調整
  • レンダリングして確認する
  • 気になるようだったら再度サンプリングの調整


AOV


多くの場合、最終レンダリングでAOVをEXRにレイヤーとして書き出して、Shuffleノードを使用して各AOVを一時的に分割、Merge:Addノードで合成してゆきます。こうすることの利点はスペキュラーだけ、ディフューズだけ明るさを調整したいなど細かな調整を可能とする点です。この部分は任意の部分でもあるので、今後別の機会に説明できればと思います。


RSファイルの書き出し

ライティングとは少し離れますが、Mantraでいうところのifdファイルの書き出しです。このファイル形式で書き出すことでRedshiftをStand Aloneで立ち上げてHoudiniのライセンスを使用しないでレンダリングできたり、VDBなどの容量の大きいファイルをRSファイルで書き出してRedshift Proxyで読み込むことで、最終的なRSファイルの書き出し時に, Delay Load的な状態で書き出せるのでRSファイルの容量を大幅に軽減できます。非常に大切な機能です。

まずRedshift Proxyとして書き出したい場合、Redshift Proxy Outputを使用します。よくやるのが一度bgeo.scで書き出しFile SOPで読み込み、その後ろにこのノードを繋げてRSファイルを出力する場合が多いです。

空のGeometry Objectを作成し選択、Redshift Shelf > ObjParmsを実行
Redshift TAB>Proxy TAB> Enable Proxy File : ON, 先ほど書き出したRSファイルを読み込む。
Redshift ROP > Arcihve TAB > Export .rs Proxy File : ON, 任意の名前で書き出し。
Render to Diskで実行されます。
注意事項として、RSファイルはIFDファイルと同じく、出力先のパスも含まれるのでちゃんと設定してから実行すること。

書き出したRSファイルを ProgramData > Redshift > bin > redshiftCmdLine.exeにドラッグアンドドロップ。コマンドラインが立ち上がりStandaloneでRedshiftが立ち上がりレンダリングされる。


しかしこれだと1枚のRSファイルをレンダリングするだけに終わってしまいます。なので連番用の.batファイルを作りました。こちらも便利なので使用してみてください。
ren_redshift.bat


ダウンロードしたren_redshift.batをメモ帳などで開きます。


@echo off

setlocal enabledelayedexpansion

set prefix=J:\_Projects\_HoudiniBasic_2017_CutAndWiki\Redshift\RS_Standalone\rsfile\test.  //レンダリングするRSファイルのパスtest.0000.rsだったらtest.で止める
set extension=.rs
set pad=4  //$F4として出力したら4

set startf=1  //連番の開始フレーム
set endf=10  //連番の終了フレーム
set incf=1  //何フレームおきにレンダリングするか



for /l %%i in (%startf%, %incf%, %endf%) do (
set num=00000%%i
set file_path=%prefix%!num:~-%pad%!%extension%
echo redshiftCmdLine -oro !file_path!
        C:\ProgramData\Redshift\bin\redshiftCmdLine -oro !file_path!
)

pause


こんな感じになっているのですが赤い色で説明した部分だけ書き換えてもらって、上書き保存して実行、ってな感じで流用できると思います。是非つかってみてください。スタンドアロンでHoudiniラインセンス使用しないでレンダリングできるので、サブマシンでレンダリングする時などに非常に便利だと思います。


  • 処理が重いデータをRSファイルに書き出してRedshift Proxyで読み込み
  • Redshift ROPでRSファイルを書き出し
  • RSファイルをredshiftCmdLine.exeにドラッグアンドドロップでHoudiniのライセンスを使用せずレンダリングを実行
  • ren_rendshit.batを実行して連番のRSファイルにも対応



Nukeで色を合わせていく

MM Color Targetなどを使用してリファレンスとCGのチャートの色味を正確に合わせていきます。かなり頻繁に使用しています。これによって正確なLook Devを実現できます。




まとめ

仕事柄、Look Devをする場面が多く、定着しているVray - Nukeの流れを Red Shift - Nukeにできないか試行錯誤してきました。感想としてはVrayで構築してきた経験をほぼ崩さずにRedshiftに移行できた感じがします。

  • エフェクト以外でもHoudiniを使用し最終レンダリングの工程も行う。
  • Maya, 3ds maxと遜色ないクオリティーをレンダリング出力できるようにする。
  • Houdiniだけを使用して仕事ができるようにする

この3つを基本としてこの1年Houdini, Redsihftで様々な仕事をしてきました。
Houdiniを導入する際に最大のネックとなるのが、その導入に対してのコストと習得する為の時間かと思います。ただ、商品カットや実写合成モノのCGなど日々の仕事に対してHoudiniとRedshiftがあれば、Maya - Vray, 3dsMax - Vrayで作業していた感覚とあまり変わらずコンバートできるのではないかと思います。そうすることで売り上げのノルマなどを担保しつつ、Houdiniの高度な技術の習得までの時間を稼ぐ。

実際に仕事でHoudiniを使用すると、個人で勉強していた頃と比べ、各段に実践的な部分で成長できたと感じています。僕のような中小規模のスタジオを運営する人間でもHoudiniで普通に仕事ができるって事が伝えられればと思い記事を書いてみようと思いました。

ボリューム系のレンダリングやガラスや水などのレンダリングなども機会があれば紹介したいと思います。


ここが間違っているなどの指摘や、もっとここ知りたいんだけどの質問があれば是非お願い致します。


皆さまのHoudini愛がこれからも大きくなるよう願っています!




おまけですが今後期待が持てる機能がつきそうです

Denoiser 

まだ実装していませんが、NVidia AI Denoiser, Altus Denoiserが将来的に実装されそうです。非常に強力な機能なので凄く期待しています。



楽しみですねー!

No comments:

Post a Comment