Redshiftで効率よくノイズを低減する

1.1 Redshiftのノイズ

レンダリングではノイズを効率よく減らしながら,レンダリング時間を長くさせないための試行錯誤が必要不可欠です.まず何が原因でノイズが発生しているのか,”ノイズの発生理由”を理解する事が重要です.また,そのためにはレンダラをどのモードで使用しているのか,どの機能を使っているのかといったことにも着目して,レンダラをより深く理解することが重要となります.と,大袈裟に書いていておきながらRedshiftではノイズに関する設定はかなり簡単なわけですが,一応シェアしておこうかと思った次第です.

基本的にノイズはサンプル数を上げることで無くなっていきます.Redshiftでは〈Unified Sampling〉の項目を調整すればシーン全体のノイズをコントロールできます.

〈レンダリング設定〉の〈Basic〉→〈Unified Sampling〉の
〈Samples Min〉
〈Samples Max〉
〈Adaptive Error Threshold〉

で全体のサンプル数を調整できます.

〈Unified Sampling〉でははじめに各ピクセルに最小サンプル数のレイを使用してサンプリングを行います.その後,周囲のピクセルとを比べてノイズが多いと判断した場合,追加のサンプルが使用され累積されていきます.もし最大サンプル数に達したら計算を終了する仕組みになっています.したがって,必ずしも最大サンプル数が各ピクセルに使用される訳ではありません.この時,ノイズ検知の判断を〈Adaptive Error Threshold〉で行っています.〈Adaptive Error Threshold〉が小さい値であれば,より積極的にノイズ検知を行い,より多くのサンプル数を使用して計算していきます.たとえ〈Samples Max〉が「2048」といった大きな値であっても,〈Adaptive Error Threshold〉が「5」などと大きな値であれば計算を早く切り上げるのでノイズの多い画像が生成されます.

GI設定は
〈Primary GI Engine〉…「Brute Force」
〈Secondary GI Engine〉…「Irradiance Point Cloud」

を使用しています.〈Unified Sampling〉はデフォルト設定です.シンプルなシーンとはいえ,閉じた空間で窓からしか光が入ってこないのでノイズはかなり多いですね.ここではポータルライトは未使用です.

画像1

画像2

続いて〈Samples Max〉を「1024」へ上げます.かなり綺麗になりましたが,壁にはややノイズが残っています.これはGIのノイズです.

画像3

この状態はサンプル数を「1024」まで使い切る前に計算を終了している可能性がありますので,〈Adaptive Error Threshold〉をより小さくしてより積極的にノイズ検知してみましょう.「0.003」とします.マニュアルには最終品質としては0.003あたりが妥当であると記載されているためです.レンダリング時間は少し長くなりますが,サンプル数をしっかり使っているようで,かなり綺麗になっています.

画像4

画像5

Redshiftのサンプル数は〈Unified Sampling〉の〈Samples Max〉と〈Adaptive Error Threshold〉の設定だけでシーン全体のサンプル数をコントロールできるため,簡単に綺麗な画像は生成できるようになっています.ただしGIに〈Irradiance Cache〉や〈Photon Map〉を使う場合は他のパラメータも必要であり,この限りではありません.

さらにRedshiftではサンプル数をより詳細にコントロールできるようにもなっています.ノイズはGIノイズ,反射ノイズ,影ノイズ,AOノイズなど様々なタイプが存在します.〈Unified Sampling〉ではそれらを一括でコントロールしているため,設定が簡単ではありますが必要以上にサンプル数を使ってしまうケースも考えられます.

続いて,それぞれのノイズ成分にフォーカスしてより細かな設定方法を見ていきます.

1.2 GIノイズの低減

ここでのGIは先と同じ
〈Primary GI Engine〉…「Brute Force」
〈Secondary GI Engine〉…「Irradiance Point Cloud」

を使用します.

また,〈Unified Sampling〉はデフォルト値に戻してあります.

GIノイズを減らすためにはGIサンプルを上げますが,使用するGIエンジンによって設定するパラメータが異なります.ここでは〈Primary GI Engine〉に「Brute Force」を使用した場合で解説します.〈Brute Force〉は全ピクセルに対してレイのサンプリングを行っていくため,精度の高いGI結果を描画できますが,サンプル数が低いとピクセルごとに輝度のバラつきが発生します.これがBrute Force特有のノイズとなって現れます.

次の画像は〈Brute Force GI〉の〈Number of Rays〉は「16」です.

画像6

画像7

非常にノイズの多い画像になります.

続いて,〈Brute Force GI〉の〈Number of Rays〉は「1024」です.上の画像に比べて随分ノイズが減りました.

画像8

インテリアシーンではほとんどの場合GIを使用することが多いと思いますので,ここは重要なパラメータとなります.ここで注目したいのは,GIノイズは綺麗になりましたが,窓枠や右球体にノイズが見られることです.実はこれらはGIによるノイズではありません.〈Unified Sampling〉を「1024」にしたときにはこれらのノイズも綺麗にしてくれましたが,ここではGIノイズしか綺麗にしていないためです.結論から言うと反射のノイズなのですが,〈Unified Sampling〉の〈Samples Max〉はデフォルトの「16」なのでGI以外のサンプルはかなり低い状態ですので,このような結果となります.

〈Primary GI Engine〉が〈Irradiance Cache〉の場合は〈Irradiance Caching〉の〈Num Rays〉を調整します.
次の画像は〈Irradiance Caching〉の〈Num Rays〉が「100」の場合です.Cinema 4Dのイラディアンスキャッシュを使ったことがある方,または他のレンダラのイラディアンスキャッシュを使ったことがある方にとっては馴染みのあるノイズですね.これはイラディアンスキャッシュ特有のアーティファクトと呼ばれるもので,〈Brute Force〉のノイズとは違い「もやもや」したものになります.イラディアンスキャッシュのアルゴリズムが分かっていればどのパラメータを調整すればよいかはおのずと見えてくるはずです.

画像9

〈Irradiance Caching〉の〈Num Rays〉が「2000」の場合です.綺麗になりました.

画像10

1.3 影のノイズ低減

画像のノイズはGIノイズの他にも様々なものがあり,影のノイズもその一つです.Redshiftの場合,影のノイズはライトオブジェクトのサンプル数で各ライトごとに調整できます.ここでは特にInfinit Lightからのノイズが目立ちます.Infinit Lightの〈Shadow〉タブを開くと〈Samples〉というパラメータがあります.デフォルトでは「8」です.

画像11

「256」に上げた状態です.影のノイズが低減されて綺麗になりました.

画像12

画像13

一つ一つのサンプル数を調整できるので,シーンで重要ではないライトのサンプル数は低めにしてレンダリング時間を節約することができます.ただ,ライトがたくさんある場合に一つ一つ設定するのは面倒だったり,一律で設定したい時もあると思います.その場合は〈レンダリング設定〉から〈Basic〉セクションの〈Sampling Override〉からシーン全体のライトのサンプル数を上書きできます.〈Override Samples〉を「オン」にして〈Samples〉を設定します.〈Unified Sampling〉は低めにして,ライトだけサンプル数をしっかりとる,ということができます.

画像14

1.4 反射ノイズの低減

反射にRoughnessがある場合にもノイズが現れます.このノイズは反射のサンプル数を上げることで低減できます.サッシ部分には非常に大きなRoughess値が設定されているため,デフォルトのサンプル数では全く綺麗にならないことが分かります.また,右の球体の反射もノイズが見れらます.

画像15

Roughnessのサンプルはマテリアル設定で調整できます.Shader Graphを開いてマテリアルノードにある〈Reflection〉→〈Samples〉はデフォルトで「16」になっています.大きなRoughness値を持つサッシには大きなサンプル数が必要です.各マテリアルごとにサンプル値を調整できるため,サッシのマテリアルは「1024」にして,球体のマテリアルは「128」にしてみました.

画像16

各マテリアルごとに調整できるため,シーン内で重要なマテリアルに対してのみサンプル数を上げたり,きめ細かい調整が出来ることが分かります.ただ,やはりシーン内のマテリアルごとにそのような設定をするのは面倒だったり,時間がない場合にはライトと同様に〈レンダリング設定〉から〈Reflection〉の〈Sampling Override〉でシーン全体のマテリアルに対してサンプル数を設定できます.

1.5 サンプル数の最適化

Redshiftの特徴の一つに,サンプル数を成分ごとに調整できる点が挙げられます.これはArnold Rendererにも同様の機能があります.このメリットはレンダリングしようとしているシーンにサンプル数をより最適化できる点です.

例えば,このシーンではGIサンプルは1024ほど必要で,反射用サンプルは256程度,影に128あれば十分だと判断した場合,〈Unified Sampling〉の〈Samples Max〉を「64」として他の成分は比較的サンプルを低めにしてレンダリングできます.一番最初に〈Unified Sampling〉の〈Samples Max〉を「1024」,〈Adaptive Error Threshold〉を「0.01」の時と同じレンダリング時間ですがノイズレベルは低いのが分かります.

画像17

個別にサンプル数をコントロールする時間がないような場合やGPU性能が高い場合は〈Unified Sampling〉の設定が楽で簡単ですが,レンダリング時間とクオリティをよりコントロールしたい場合にはサンプル数を個別に設定して最適化を行うことで効率よくレンダリングを回せるかと思います.

補足ですが,GIノイズや反射ノイズ,影ノイズなどの各成分はAOVを出力すればRender Viewウィンドウから確認できます.次の画像はGIノイズを確認しているところです.シーン内にどの成分のノイズが多いかを確認できるので,サンプル数を上げるべき箇所も見えてきます.

画像18

仕事でレンダリングを回しているとどうしても品質と時間のコントロールが重要になってくる局面があります.アニメーションならよりシビアにフレーム単位のレンダリング時間を管理しないと納品に間に合わないといったことになる可能性もあります.タイトな修正依頼などにも対応しなくてはなりませんので,ある程度自身でコントロールできるようになっておくと良いかと思います.Redshiftを使う上でのクオリティコントロールに役に立てば幸いです.


この記事が気に入ったらサポートをしてみませんか?