みなさんこんにちは。
武田です。
何の写真かわかりますか?
先日、奇麗なウロコ雲が出ていた時に、ほぼ真上を向けてとった写真です。
実際の雲は、とても複雑な形状をしていますね。
このような雲を作るのはとても大変そうですが…
まずは一歩一歩もくもくとした雲を作っていきます。
前回は、雲の粒子に太陽の光が当たるとミー散乱によって散乱するところまでやってきました。
ミー散乱は前方散乱の傾向が強い、つまり光が雲に当たるとその方向にそのまま抜けて、ちょっとだけ曲げられる場合が多い…ということが分かりました。
しかしそれだけでは、雲に太陽の光を当ててもその多くが反対側にスカスカ抜けていってしまい、
雲がとても暗く見えてしまう…(Eeveeのレンダリング)という事になります。
どうやら重要なのは、光がさらに何度も曲がったり跳ね返ったりする多重散乱のようです。
Eeveeでは多重散乱は計算ができないので、Cycles で計算してみます!
なんとなくリアルな雰囲気になりましたが、もっと暗い!
どうやらパラメータを確認してみると、デフォルト状態ではEeveeと同じで1回分の散乱しか計算をしないようです。
という事で、ボリュームの最大バウンス数を上げてみます。
4回、
12回!
多重散乱が重要であるという予想は見事に当たりました。
雲の中で光が何度も反射して、順光側に戻ってくる現象が見事に再現されたようです。
しかし、それにつれて描画時間も順調に増えていっています。
Eeveeで一瞬で表示されていた雲が、1分半、3分、4分半と順調に伸びてきました!
雲の計算には必要なさそうなパラメータをできるだけ下げて、
どうにか計算速度を稼ぐようにして、24回まで実験してみます。
3分ほどで、最大24回の散乱、乱反射をする雲を表示することができました!
ボリュームに必要のないパラメータを下げることで、計算速度も多少はアップするようです。
しかし、だいぶ時間をかけて計算した割には、ちょっと画面がノイジーですね。
Cyclesのようなレイトレーシングでは、光の計算をすべて計算するととても計算が追いつかないので、
そのほんの一部だけを計算しているからです。
光が反射する場合、反射しないで反対側に抜ける場合…
無数の光の振舞いを全て計算すれば、平均化すれば現実の世界の見え方に近づくはずなのですが、
その一部だけの計算しかしていないので、ノイズになってしまうのですね。
ではもっとサンプル数を増やせば滑らかになるのでしょうか?
なるにはなるのですが、計算時間もどんどん増えていってしまう…ので、
ここはデノイズ機能を使ってノイズ除去をしてみます。
すると、効果はテキメンで、
ノイズがほとんどなくなりました!
しかしその分輪郭がぼんやりして、眠たい雰囲気の画像になってしまいましたが…
それは後でどうにかすることにして、画像をじーっと観察してみます。
これを見て分かったことは。
1.大きな雲が明るい。
2.小さな雲が暗い。
ということが起きているようです。
どうやら、大きな雲では内部で光が充分乱反射して、順光側にもたくさん跳ね返って来るようですが、
小さな雲では、その前に反対側に光が抜けてしまって、順光側に戻って来る光が少なくなって、暗くなってしまうようです。
反対側からのカメラで見てみて確認をしてみると…
確かに、大きな雲には濃い陰ができています。つまり、こちら側にはあまり光が来ていないわけですから、多くの光が順光側に反射しているようです。
逆に、小さい雲は陰がほとんどないので光が多く通り抜けていて、順光側に反射している量は少ない。
つじつまはあっていますね!
では、実際の写真で本当にそうなっているのか見てみると…
確かに、白い雲の手前で暗く見える千切れ雲は、比較的小さな雲ばかりですね
大きくなるほど明るく見える、(反対側から見ると影が濃く見える)
というのは、どうやら傾向としては正しいようです!
これでリアルな雲の表現の秘密が1つ分かったようです!
しかし、デノイズでノイズを消した画像は、副作用でなんだかのっぺりしすぎているように見えます。
かといってデノイズ無しで充分な画質を得ようとすると、とんでもなく時間がかかりそうです。
どうにかうまい方法は無いものか…
と悩むところで、次回に続きます!