BlenderのCyclesでノイズを削減する方法をまとめてみました。
Blender 2.79
はじめに
本記事は基本的に下記のマニュアルの内容を自分なりにまとめたものとなります。
また、Cyclesでノイズが生まれる理由については下記の記事にまとめています。
こちらを一読してから本記事を読むことをお勧めします。
またそもそもパストレーシングとは?という話は下記にまとめています。
サンプリング数
基本的にサンプリング数を上げれば、ノイズは減ります。
しかしサンプリング数を上げるとレンダリング時間が跳ね上がり、効率的ではありません。
さらに、ノイズが発生しやすい状況下ではサンプリング数を上げてもなかなかノイズが消えません。
そこで次節から説明するように、いろんな状況に応じて設定を行いノイズを減らしていきます。
レイが跳ね返る回数
パストレーシングでは、物体にレイが当たるたびにそこからさらにレイを飛ばします。
このレイは毎回ランダムな方向に飛ばされるので、飛ばす回数が多いほど結果がバラつく確率が高くなります。
つまりレイが跳ね返る回数が多いほどノイズが発生しやすくなります。
Cyclesではこの跳ね返る回数の最小値と最大値を設定できます。
この値を変えてみると次のような違いが現れます。
MinとMaxを0にするとノイズは大幅に減ります。
しかし、間接光の影響がかなり不正確なものになっています。
このようにBouncesの設定は結果の正確さとノイズの少なさのトレードオフとなります。
そのため結果の正確さを失わない範囲でできるだけBouncesを低く設定する必要があります。
また、正確な結果を得るのに必要な跳ね返り回数は材質により異なります。
例えば反射率の高い物体の場合、光が吸収されないので跳ね返り回数が多くないと正確な結果が得られません。
これに対して反射率の低い物体の場合は光が多く吸収されるので、跳ね返り回数が小さくても正確な結果が得られます。
そのためCyclesでは材質ごとに跳ね返りの数を設定できるようになっています。
ちなみに、マテリアルのColorを設定する際にはRGBに0.8以上の値を設定しないことも重要です。
この値が低いほど光の波長を吸収し、高いほど吸収せず反射するという意味になります。
反射するということはすなわち跳ね返り回数が多くないと正確な結果が得られないということになります。
また、RGBが1、すなわち波長を全く吸収しない物質はあまり現実的ではありません。
明るく見える物質を作りたければライトの強さを大きく設定するべきです。
コースティクス
反射や屈折の結果として光が集まるとコースティクスと呼ばれる模様が現れます。
このように光が集まると、レンダリングしたい地点からは半球状の一部だけが非常に明るい状況が生まれます。
このような状況下では下記の記事で説明したようにノイズが生まれやすくなります。
そのため、CyclesにはコースティクスのON/OFFを切り替えられる設定項目があります。
これをOFFにするとコースティクスによるノイズは消えます。
しかしながらOFFにしている分結果は不正確なものとなり、状況によっては違和感が生じます。
どうしてもコースティクスをONにしたままノイズを和らげたい場合には、Filter Glossyを使います。
この値を大きくすると、半球状の非常に明るい一部分をぼかしてなじませます。
この結果として、サンプリング結果のブレがなくなりノイズが軽減されます。
ライトの減衰計算
ライトの減衰は1/(distance^2)
という式で計算されています。
物体にライトが非常に近い場合には、この計算結果が無限大に近づいていくのでライトが非常に強くなってしまいます。
その結果、半球状の一部だけが明るい状態が現れてノイズを引き起こします。
これはLight Falloffというノードを使うことで制御できます。
下記はライトとして使っているEmissionマテリアルに接続した図です。
このノードのSmoothの値を上げていくと、ライトが物体の付近にある場合の最大強度を丸めることができます。
これにより計算結果のブレがなくなりノイズが軽減されます。
多重重点的サンプリング
Emission系のマテリアルにはMultiple Importanceというオプションがあります。
これを有効(デフォルト)にすると、このマテリアルをアサインしたオブジェクトに
直接的に届く光の軌道が、間接的に届くものよりもパストレーシング時に選択されやすくなります。
Emissionが強い場合にはこれをONにしておいたほうがノイズは少なくなります。
しかしこのEmissionが弱くて他にもっとEmissionの強いオブジェクトがあるようなケースには、
このオプションによりEmissionが強いオブジェクトがサンプリングされづらくなるため、OFFにしておくべきです。
またこの設定項目はWorldの設定にもあります。
これは太陽のような一部分だけ明るいテクスチャをIBLのために使うときにONにするとのことです。
ライトポータル
晴れの日の窓のある部屋のように、一部だけから外の光が差し込む箱を考えます。
このような箱の中をレンダリングするときには、パストレーシングで光の入り口が見つかりづらく、
その結果ノイズが発生するという問題があります。
このようなケースでは窓を穴として作るのではなく、窓と同じ大きさのエリアライトを作ります。
さらにPortalオプションにチェックを入れます。
これで光の入り口が見つかりやすくなり、ノイズが軽減されます。
ポストプロセスによるノイズ除去
上記の設定をいろいろ試しても残るノイズに関してはポストプロセスでごまかします。
有効にするにはRender LayerのDenoisingにチェックを入れます。
下図ではかなり強めにDenoisingを掛けてみました。
確かにノイズは除去されますが、全体的に詳細がぼけてしまうためあくまで最後の調整として使うべきかと思います。
Clamp設定
さらに最終手段的なノイズ除去の方法として、Sampling設定のClampがあります。
これは各光線がピクセルに寄与する際の強さを丸めこみます。
ただしこの設定をきつくしすぎるとハイライトが消えるので、
Clamp Indirectのほうだけ設定するなどの工夫が必要そうです。