OctaneRenderのレンダリング効率化

[ 前置き ]
OctaneRender(以下、octane)のAdaptive Samplingの使い方をご存知であれば、この記事はほとんどが既知の情報かと思います。
octaneを触り始めて間もない人、よくわからなくてMax Samplesぐらいしか調整してないけどもう少し覚えたい人向けです。

[ 前書き 2 ]
Octane Render v4の設定画面なので、最新版では一部名称が異なります。

octaneに限ったことではないですが、如何に効率良く短時間・最良品質でCGをレンダリングするかはCGクリエイターの永遠の悩みです。
一旦、"良い品質のCG" を "ノイズの少ないCG" と定義し、octaneでノイズが出てこない高品質な設定を見極め、そこから時間短縮する方法をまとめます。

※ 注意 ※
「この設定値にすればどんなシーンでもノイズが出ず、秒速でレンダリングできる」という魔法のようなものではなく、ノイズをできる限り抑えつつそれなりにレンダリング時間も抑えるスイートスポットを探る方法です。
なのでシーンによっては時間もかかるので、兎に角爆速でレンダリングしたい方はGPUを増設するかレンダファームを活用してください。お金で魔法を買いましょう。

必要な品質を見極める_01

最良を目指してしまうと各設定が最小値、もしくは最大値になってしまうのでクオリティラインを自身で決めます。

まずはレンダリングの設定、Kernelsタブから。
後述するAdaptive Samplingが使えないと時間短縮できないので、PathtracingとDirectlightingで説明を進めます。

Directlighting(デフォルト設定)


画像1


Pathtracing(デフォルト設定)


画像2


では重要な項目を上からおっていきます。一部、あまり影響のないものは省きます。

・Max.samples
いきなりですがこれも後述します。ひとまず設定を探る間はsample数を高め(数千samples以上)にしてください。

・Diffuse、Specular、Glossy Depth
光の拡散、屈折、反射回数です。数値が高いほどレンダリング時間がかかります。
octaneは屈折・反射の回数が設定値を越えると黒く描画されるので、黒い描画がなくなるまでLive Viewerを見ながら調整します。あえて黒い描画を残しておきたい場合や、演出上一瞬だったり小さくしか映らない場合は数値を下げてください。あまり入り組んだシーンでなければそれぞれ10ぐらいで十分かなと思います。

画像3


・GI clamp
デフォルトで非常に高い数値になってますが、caustics(屈折して光が集中したり、反射した水面の模様が映るアレ)を計算するためになっています。反射や屈折により特定のピクセルだけ高輝度な描画になるHotPixelが発生しやすいので、causticsまで見せる必要がなければ10ぐらいにしておきます。

画像4

必要な品質を見極める_02

ここでMax.samplesの調整に戻ります。
ノイズのないサンプル数はどれぐらいなのか?と、最大値と言うより最小値を決めなければならないのですが、実際に計算してみないことにはわかりません。とは言うもののノイズが目立つ場所は限られているのでLive ViewerのRender regionを使います。

画像5

ノイズが発生しやすい箇所、例えば影、roughnessの強い反射・屈折、光の拡散などそのシーンでノイズが気になる部分だけRender regionで計算します。
Render regionはFilm regionと違い、Max.samplesに関係なく無限にサンプリングがかかります。サンプリング中に今のサンプル数がどれぐらいか数値で現れるので、目視でノイズが目立たなくなったサンプル数をMax.samplesに設定してください。若干ノイズが残るサンプル数でもdenoiseで気にならないレベルまで抑えられるかもしれないのでサンプル数を2,3段階に分けてメモしておくと調整しやすくなります。

レンダリング時間はさておき、一旦「ノイズのない最高画質の設定」ができました。

必要以上の計算をさせない

Adaptive Samplingを使うことで隣接するピクセルからノイズの量を検出し、一定以下のノイズ量になるとそのピクセルのサンプリングを停止してくれます。これがオフのままだとノイズの有無に関わらず、全てのピクセルが設定したサンプル数まで計算されてしまうわけです。
これをオンにするとLive Viewerの下部にNoiseボタンが現れ、クリックすると白黒の画面でサンプリングしている様子が表示されます。サンプリングが進んでいくと、ノイズが規定値を下回ったピクセルは緑色になりそのピクセルのサンプリングは停止します。

画像6

adaptive samplingsの設定について

画像7

・Noise threshold
サンプリングを止めるノイズ量の設定。数値を上げるとサンプリングが早く止まる分、ノイズが残りやすくなります。

・Min.samples
全てのピクセルにおいてNoise thresholdを超えても最低限このサンプル数まではサンプリングされます。

・Expect Exposure
明るさに応じたノイズの検出をします。通常1で構いません。
カメラもしくはimagerの露出設定が標準的な値で、光量不足の暗いシーンや逆に明るすぎるシーンの際に調整します。

denoiserを頼る

octane v4から搭載されたdenoiserですが強力なdenoise力がある分、サンプル数を十分に取っていないとディテールがぼやけたり滲んでしまいます。特に動画だと暴れまわる靄のような描写になるので、結局はdenoiseなしでも耐えうる品質+denoiseを少しかけて画を滑らかにするぐらいが適切です。denoiserはCameraImagerタブから設定できます。

画像8

・Enable denoising
denoiseを有効にします。

・Denoise volumes
Mediumを使ったボリュームレンダリングを使用する際にonにしてください。使わない場合はoff。

・Denoise on completion
denoiseをサンプリング中の描画にも適用するか、サンプリングが終わってから適用するかの設定です。サンプリング中は品質を評価し辛いので、onにしてレンダリング後に適用します。

・Min. denoiser samples、Denoise interval
Denoise on completionがoffの時のみ有効な値なので無視します。

・blend
denoiseのかかり具合を調整する値です。1にするとdenoiseなしの結果と同じになります。
ノイズの発生具合を調整すると言うよりか、ポスト処理でdenoise前と後の画像を不透明度でなじませて調整しているようです。
目の細かいテクスチャのディテールが消えてしまう、グレインのようなわずかなノイズ感を残しておきたい場合は数値を上げておきましょう。
denoiseした画像としていない画像を保存して、PhotoshopやAfterEffectsで後から合成したりマスクを切ったりして調整した方がコントロールしやすそうです。

なお、denoiseした画像の保存はRender Passesの項目で設定が必要です。

画像9

ポスト処理のノイズ除去については、個人的には情報量の少ないシーンだとNeat Videoの方が手を加えられる範囲が広く綺麗に仕上がると思います。ただ、ノイズを検出するためにある程度無地になっている領域が必要なので、複雑なシーンではoctane独自のdenoiseがとても有効です。

まとめ

手順をざっくりとおさらいです。

1、反射、屈折、拡散回数などを必要最低限に
2、Render regionでサンプル数の見極め
3、Adaptive samplingで不要なサンプリングを省略
4、denoiseでわずかにノイズ除去

V-rayでも同様の手法で解説されたものがあったなぁと思い出し、ブックマークが残っていたのでご参考までにリンクを載せておきます。

こちらではピクセル毎のサンプル数の過多・不足を表示して調整しています。V-rayだとLight、GI、Materialごとにひとつひとつサンプル値が調整できるので手間がかかる分より最適化できる印象でした。かれこれ2年近く触れてない遠い記憶ですが...
今のGPUレンダラーはシンプルになったものだなぁと思ったり。

人間では判断し辛い部分をソフトウェアに任せてスイートスポットを探れるのは精神衛生上とても良く、その分クリエイティブな悩みに専念できます。納期などで限られた時間内に仕上げればならない場合であっても最高品質にかかる時間の指標ができるので、サンプル数や反射回数などを下げdenoiseを強めるなどして画質を妥協しつつ時間を節約するとか、足りない時間をレンダーファームや追加のGPUで補うなど判断しやすくなります。

他のレンダラーでもサンプル数を描画したりadaptive samplingのような機能があれば最適化とは言えなくとも効率化はできると思いますので同じ手法で応用が効きそうです。

(もし誤りがあればtwitterなどでご指摘頂けますと助かります。)


※追記
adaptive samplingのgroup pixelsの比較

画像10