いやー、どうも薬局で悪いものを貰ったらしくて、久々に寝込んでしまった。今年の風邪は熱に来るね。お腹にも来るらしいけどね。みんなも気をつけてね。気温も目茶苦茶だしね。
というわけで大事をとっていたので、前回から少し間が開いてしまったわけだけども。
では早速Superflyのレンダリング設定をざざっと確認してみよう。横着して画像を端折った部分もあるけど、そこはご容赦を。
Superflyは設定項目が多くてなにやら複雑そうに見えるけども、実際にはそんなに難しくない。ざっくりと分類するとこんな感じだ。
つまり大項目の中に、材質ごとに細分化された項目が含まれているから数が多く見えるんである。分類してしまえば、むしろFireflyより少ない。そしてここからわかるのは、Superflyのレンダリングはマテリアルと密接に関係している、ということだ。
Pixel Samples(ピクセルサンプル)
ピクセルサンプルはSuperflyがいろん・2で説明したように、1ピクセルを決定するために何回そのピクセルを計算するか、という回数を設定する。実際に計算される回数は設定の2乗なので、計算時間は指数関数的に増大する。というわけで図は再掲。
そして本質的に、ザラっとノイズを軽減するにはピクセルサンプルを上げるしかない。つまりSuperflyではレンダリング品質=ピクセルサンプルである。しかしまた逆に言えば、ピクセルサンプルを上げて改善されるのはザラっとノイズだけである。なんかのっぺりしてるとか、妙に浮いてるとか、変に嘘っぽいとか、そういうのはいくら数値を増やしても改善されない。ライティングやマテリアル、あるいはポージングなどなどの問題である。まあそれはFireflyだって変わらないわけだけども。
Branched Path Tracing(分岐パストレーシング)
しかし実際のところ、ノイズの現れ方は原理的にマテリアルごとに異なる。そこでSuperflyでは、カメラから出発したレイがオブジェクトにぶつかって二次レイを飛ばすとき、衝突したオブジェクトの材質によって二次レイの本数を変化させることができる。
レイが枝分かれするので分岐パストレーシングという。つまり1ピクセルを決定するためにピクセルサンプル3なら3×3=9回計算するわけだけども、その1回ごとに計算を2倍にしたり3倍にしたりできるわけだ。
分岐パストレーシングのチェックが入っていない状態で、こういうオブジェクトがあったとする。

(クリックで倍サイズ)
分岐パストレーシングのチェックを入れて、各材質ごとに回数を増やしてみよう。
Diffuse Samples(拡散サンプル)は拡散反射を持つマテリアルの計算回数を設定する。立方体だけでなく床部分の品質も向上していることがわかる。ちなみにこれを0にすると二次反射光の計算をまったく行わなくなる。
Glossy Sampels(光沢サンプル)は鏡面反射を持つマテリアルの計算回数を設定する。つまり反射像の品質に影響する部分である。
Transmission Sampels(透過サンプル)は透明なマテリアルの計算回数を設定する。と言っても単純に透明度を上げただけのマテリアルには関係ない。向こう側のオブジェクトのマテリアルが透けて見えるだけだからだ。ここで設定されるのは、Trancelucent(透過)やRefraction(屈折)を適用されたマテリアルの計算回数である。
Subsurface Samples(サブサーフェイスサンプル)はSSSが適用されたマテリアルの計算回数を設定する。見ての通り散乱は拡散反射よりノイズが乗りやすい(というか拡散反射ほどノイズ軽減ができない)ので、SSSを持つマテリアルが主体の場合は高めに設定する必要があるだろう。
Volume Samples(ボリュームサンプル)はボリューム(Volume)効果が適用されたマテリアルの計算回数を設定する。VolumeノードのScatter部分とCycles系のScatterVolumeノードの品質に影響する。SSSと同じく計算結果が収束しにくいのでノイズが乗りやすい。求める材質によってはがっつり上げる必要がある。
Mesh Light Samples(メッシュライトサンプル)は発光が適用されたマテリアルの計算回数を設定する……んだと思うけど、そもそも発光体は二次反射光の影響もなくノイズも乗らないので変化がない。発光体に影響を受けるオブジェクトの品質かとも思ったけどそっちも変化しないし、だいたい拡散反射なら拡散サンプルに依存してるわけで……誰か、知ってたら教えて欲しい(笑)。
あと、飛ばしたけどAOサンプルという項目もある。これは二次反射光の品質ではなく、Cycles系のAOノードの品質を設定する。なのでほとんど触ることはないだろう。
分岐パストレーシングの利点は部分的に必要なだけ品質を上げることができる点である。材質ごとのバランスを調整してから最終レンダに入る、という使い方もできるし、マテリアル調整中に部分的にテストを繰り返すような時は、そのマテリアルに必要な品質だけ確保して他を下げ、速度を上げるという使い方もできる。
Samples all light direct(すべての直接光をサンプル)
Samples all light indirect(すべての間接光をサンプル)
Superflyがいろん・2で述べたように、パストレーシングでは計算結果を収束しやすくするために様々な手法が用いられている。その中で、カメラから出発するレイだけでなく、光源から出発したレイを合算する手法が双方向パストレーシングだ。Superflyもこれを採用しているので、直接光が当たる部分はノイズをぐっと減らすことができる。
しかしこれは通常、一つの光源だけを合算するので、光源が複数存在する場合二つ目以降の光源の影響は確率次第、ということになる。つまり逆にノイズが目立つ結果になる。
Samples all light directにチェックを入れておくと、レイはオブジエクトに衝突した時点ですべての光源からの影響を計算する。Samples all light indirectにチェックを入れると、二次レイの計算について、すべての光源を考慮に入れるようになる。つまりゴールの数が増えるわけで、若干品質が向上する。
基本的にこの二つはチェックを入れっぱなしでいいだろう。ただし、光源がいくつも存在するようなシーンだと、品質改善以上に時間がかかるケースがある。そういう場合はチェックを外し、ピクセルサンプルを増やした方がいい。
Filter Glossy(光沢フィルター)
Clamp direct samples(ダイレクトサンプルをクランプ)
Clamp indirect samples(インダイレクトサンプルをクランプ)
このへんはポツンと現れる明るい点状のノイズを軽減するオプション。光沢フィルタは金属などの鏡面反射の中に現れるノイズを軽減する。値が0の場合は何も行わず、0よりも大きい値を入れると明るすぎる点をぼかすようにフィルタリングする。値を大きくするほどフィルタも強力になるが、本来必要なハイライトの明るさは失われてしまう、かもしれない。
Clamp direct samples(直接光を抑制)とClamp indirect samples(間接光を抑制)も同じように、それぞれ直接ライトが当たる部分と二次反射光に照らされる部分のノイズを軽減する。値が0の場合は機能自体がオフになり、0よりも大きい値を入れるとその値を超えるピクセルを固定値にする。
こんなシーンで試してみよう。
たとえば設定が1なら、明るさが100%を超える計算結果が出たときにはその値を100%にする、という感じで数値が大きくなるほど上限が上がる。小さめの値を入れるとノイズは軽減できるが、本来明るくなる部分も暗くなってしまう。
基本は初期値のままで十分だが、コースティクスを描画するときなどはオフにしておかないと、十分な光量が得られないことがある。
Progressive Refinement(プログレッシブリファインメント)
直訳すると漸進的な洗練、段階的描画とでも訳せばいいのかな。要するに「じわじわと綺麗になっていく」レンダリングのことだ。このオプションがオフになっているとき、レンダリング画面は設定したバケツサイズごとに青い枠のブロックに区切られ、中心付近から描画を始める。青い枠のブロックはPCのスレッド数だけ存在し、水色になって計算を終了すると次のブロックの計算に移る。
上の画像だとバケツサイズが64ピクセルで、レンダリングサイズが640x640ピクセルなのでちょうど100ブロックに分割されている。”Path Tracing Tile 32/100”は100ブロックのうち32ブロック目まで計算にかかってますよ、という意味だ。レンダリング終了までに必要な計算回数はこの場合ピクセルサンプル3なので、
Total Samples = 32 × 100 = 900
という感じ。で、このオプションをオンにすると、Superflyはレンダリング画面全体を1サンプルずつ計算して描画していく。
ピクセルサンプルが3ならこのレンダリング画面が9回更新され、その度にちょっとずつノイズが減っていく。まあ実際には描画が追いつかなくて、毎回更新されるというわけではないみたいだけど。レンダリング終了までに必要な計算回数は
Total Samples = 100 × 32 = 900
なので変わらないし、レンダリング時間もそれほど違いはない。全体的な調子を見たいならオンで、中央付近の部分的な質を確かめたいならオフで、と使い分けることもできる。あと、ピクセルサンプルをガッツリ上げて長時間PCを放置するような場合はオンにしておくといい。時間が足りなくて中断した場合でも、そこそこの画質までは描画できているからだ。まあレンダリングを中断すると微妙に不安定になるから、あまりやりたくないけど。
Min Bounces(最小バウンス←最小反射回数)
Max Bounces(最大バウンス←最大反射回数)
これは二次レイがオブジェクトに衝突して反射する回数を指定する。最小反射回数までは確実に反射し、それを超えるとレイはロシアンルーレットでランダムに中断し始める。そして最大反射回数に到達すると強制的に中断する、という感じだ。最小反射回数は初期値のままでいいが、最大反射回数は以下の項目の設定よりも優先されるので気をつけよう。
Diffuse Bounces(拡散反射)
Glossy Bounces(光沢反射)
Transmission Bounces(透過反射)
ここでも材質ごとに設定値を変化させることができる。まず拡散反射、これは間接光の明るさにがっつり影響する。FireflyのIDLにおけるレイトレースバウンスに相当するもので、この反射回数が十分でないと、二次反射光がシーン全体に行き渡らなかったりする。思ったより間接光が効いてないな、と思ったらまず反射回数を上げてみよう。
光沢反射は鏡面反射の回数。合わせ鏡のように反射が繰り返されるシーンでは、ある程度上げておかないと途中で真っ暗になってしまうので注意。透過反射はガラスのような屈折のあるものを描画するときに重要で、容赦なく上げておかないと綺麗な描画ができないので注意だ。
Min Transparent Bounces(透明反射の最小数←最小透過回数)
Max Transparent Bounces(透明反射の最大数←最大透過回数)
これは透明なオブジェクトを何回まで通過するか、という値を設定する。透明なポリゴンが多数重なった形状、つまり木の葉や髪といったオブジェクトをレンダリングするときに重要だ。最大回数を超えるとなぜかアルファマップをそのまま描画してしまうので、髪の先に黒いフリンジが現れたりする。明るい色の髪などは特に注意が必要だ。最小回数を超えるとロシアンルーレットが始まってしまうので、ノイズを減らしたいなら最小回数も上げておいた方がいいだろう。
Volume Bonces(ボリュームバウンス←ボリューム反射)
散乱を伴うボリューム効果が適用されている場合に、そのボリュームの中で光が散乱する回数を設定する。霧やホコリの中のスポットライトなどは、この反射回数を上げておかないとイマイチ効果が現れないので注意。
Bucket Size(バケットサイズ)
Baguetteではなくバケツ。つまりレンダリング時に分割される1ブロックのサイズを定義する。お好みで。
Motion Blur(モーションブラー)
素早く動くものがブレる効果を描画する。設定方法はFireflyと同じ。ちゃんと影もブレてくれるのがありがたいね。
Depth of Field(フィールドの深度←被写界深度)
被写界深度を描画する。設定方法はFireflyと以下略。
Superflyはハイライトのボケが綺麗に描画でき、なおかつ細かい設定が可能だ。各カメラに新しく追加されたパラメータでは、ボケの縦横比、ハイライトを何角形にするか(0だと円になる)、あと何度傾けるかをそれぞれ設定できる。
Refractive caustics(屈折コースティクス)
Reflective caustics(反射コースティクス)
それぞれガラスを通過した光、鏡を反射した光などを描画する。これらはライトからの経路を計算する必要があるので、パストレーシングでは通常は計算されない。品質を上げるためには、前述したノイズ軽減のオプションはなるべく使わず、ピクセルサンプルをとにかく上げる必要がある。レンダリング設定のプリセットを確認すれば、えぐい設定になっているのが見て取れるだろう。
というわけで、Superflyのことを駆け足でさらってみたけど、ひとまずここで一区切り。まだまだ知らないこともわからないこともあるので、その都度ネタにできればいいかな、と思う。Superflyはまだまだ足りないところも怪しいところもあるし、苦手なシーンや苦手なマテリアルもあったりするけど、これまで出来なかったものが実現できたり楽になった部分ももちろんあるわけで。ちゃんと向き合って付き合えばそれなりに仲良くできるんじゃないかな……なんて、今のところ思っていたりする。