Demo

鍛冶屋の大気散乱

TORBJORN LAEDRE / UNITY TECHNOLOGIESContributor
May 28, 2015
散布ヘッダー
このウェブページは、お客様の便宜のために機械翻訳されたものです。翻訳されたコンテンツの正確性や信頼性は保証いたしかねます。翻訳されたコンテンツの正確性について疑問をお持ちの場合は、ウェブページの公式な英語版をご覧ください。

The Blacksmith』の企画段階の初期に、内蔵のフォグオプションよりももう少し詳細でコントロールできる大気散乱ソリューションが欲しいと考えていました。特に、映画の中のより広大なショットでは、空中からのパース効果を強調したかった。

大気散乱イメージ

プロジェクトの散乱ソリューションに向けて作業を開始するにあたり、当初は西田智之氏[1]のいくつかの論文で紹介されているシミュレーションモデルを実装し、遊んでみました。様々なショットの実験と試作を繰り返した結果、最終的には、ショートフィルムの各ショットでアーティスティックなコントロールが可能なモデルを目指した方がいいと判断した。私たちは、物理的なモデルの主要な要素に近づくことができ、かつ必要なときにはあらゆるルールを破ることができるソリューションを求めていた。また、短編映画のランタイム・パフォーマンスに大きな影響を与えないソリューションが必要で、ピクセル単位ではなく、頂点単位でほとんどの計算ができることを目標とした。

我々は、物理モデルからレイリー散乱とミー散乱の複合効果をエミュレートするという目標を設定した。また、さまざまな種類の低高度散乱効果を表す第3の要素も追加した。物理ベースのモデルからのもうひとつの重要な分岐点は、空と雲をプロシージャル生成するのではなく、HDRスカイテクスチャを使い続けることにしたことだ。これの明らかな欠点は、ダイナミックタイム・オブ・デイ(『鍛冶屋』では必要なかった)のような設定が少し複雑になることだ。

レイリー散乱


大気中の太陽光のレイリー散乱は、日中の空の明るい青色や、日の出や日没時に太陽や水平線が赤くなる理由である。

私たちのエミュレーションでは、太陽そのものを省き、太陽光の入射と散乱によって生成される色と消光のモデリングだけに集中する。太陽の視覚的表現は、空のテクスチャ、三重散乱の一部、太陽フレアのスプライト、またはこれらの組み合わせのいずれかで追加できます。その最も単純な核心は、レイリー散乱の密度は、レイリー位相関数によって変調された美化された指数関数に集約される。しかし、我々はその中に入れられるデータと、そこから抽出されるデータについて、さらなるコントロールができる。大気中を伝わるさまざまな波長の光をモデル化していないので、私たちが計算する密度はスカラー値である。HDRカラーランプを使用して、水平線と天頂方向で散乱光の色相が異なるようにし、最終的な色相を構成するために距離を認識する関数を使用する。

レイリー散乱の例
異なる散乱配置におけるレイリー寄与。

三重散乱

大気中の太陽光の三重散乱は、太陽の周りの明るい後光、雲の灰白色、汚染された都市に見られるもやの原因となっている。光をほぼ一様に散乱させるレイリーとは対照的に、ミー散乱は強い前方指向性を持つ。

私たちのエミュレーションでは、ミー散乱を主に太陽の周りのヘイズとハローを表現させている。そのため、レイリーエミュレーションが太陽を無視していることを補うために、ほとんどの場合、色合いを変えている。技術的には、レイリー関数とMie関数は非常によく似ていますが、大きな違いは出力に適用される位相関数です。他の多くの実装と同様に、我々はミー散乱の異方性(前方指向性)を制御するためにHenyey-Greenstein散乱関数を使用しています。

散布ミエの例
異なる散乱配置におけるMieの寄与。

研究論文を読んだ人は、私たちがそれぞれのエミュレーションに何を含めるかについて、ある種の "自由 "をとっていることを考えると、私たちの名前の選択に嘲笑するかもしれない。そのため、実装モデルを物理モデルから簡略化した後も、これらの名称を使い続けることにした。

高さ散乱

高さ方向の散乱要素は、放射霧、地上ヘイズ、低層雲など、さまざまな低高度散乱効果の寄せ集めを表している。

高さ散乱の実装は非常に簡単で、定義された海面と高さフォールオフから高さ密度が計算される。そして、距離ベースの指数密度をスケーリングし、全体を希望の色に染める。

散布高のイメージ
異なる散乱配置における高さの寄与。

スキャッターオクルージョン

私たちの散乱の寄与は、主に太陽光が観測者に向かって散乱したり、観測者から離れたり、あるいは観測者に向かう途中で粒子に吸収されたりすることによって引き起こされる。

このようなケースを処理するために、指向性ライトのカスケードされたシャドウ・マップを通してレイ・マーチを行い、レイに沿ったオクルージョンの量を、ダウンスケールされた画面外のバッファに蓄積する。出力ピクセルに散乱を適用する際、このオクルージョンマップをエッジ認識フィルターでアップサンプリングし、ピクセルの最終的な色の構成に使用します。私たちのソリューションは単一散乱のみなので、すべての散乱光をマスクするわけにはいかない。また、より複雑で高価な多重散乱を扱うためにソリューションを拡張したくなかった。結局、私たちの解決策は「間接ファクター」を考案することで、ある一定の割合の散乱を、直接ではなく間接的に扱うように明示的に指定することだった。

飛散オクルージョン
異なる散乱構成における不偏オクルージョン。

各要素を組み合わせる

あとは、さまざまな要素を組み合わせて最終的なイメージを構成するだけだ。レイリー、ミー、ハイトの各要素を加えることで、異なる散乱色の見事な構図ができあがる。

散布図
レイリー散乱、ミー散乱、ハイト散乱の組み合わせ。

次に、オクルージョンバッファを有効に使う必要がある。直接散乱、間接散乱、雲散乱、空散乱に適用されるオクルージョンの量を微調整するために、異なる強度パラメータを使用します。

オクルード散乱
複合散乱とオクルード散乱。

最後に残るのは、散乱をレンダリング画像とミックスすることだけだ。透過像は、積算消光量分だけ暗くし、積算散乱量分だけ明るくする。これで、例のシーンの最終的な構図ができあがる。

最終的な構成を散らす
最終的な構成。

大気の散乱を別プロジェクトに抽出しましたので、アセットストアから入手できます。このプロジェクトには、ソリューションを構成するすべてのコードとシェーダーに加えて、この投稿で画像を生成するために使用したすべての設定プリセットも含まれています。各設定オプションの意味については、付属のReadmeをチェックすることをお忘れなく。

参考文献
[1]:大気散乱を考慮した地球の表示
https://nishitalab.org/user/nis/cdrom/sig93_nis.pdf

[1]:多重散乱を考慮した空の色の表示方法
https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.75.5595&rep=rep1&type=pdf

[1]:多重異方性散乱とスカイライトを考慮した雲の表示
https://www.researchgate.net/publication/220720838_Display_of_Clouds_Taking_into_Account_Multiple_Anisotropic_Scattering_and_Sky_Light

パッケージのHDRスカイはNoEmotionHDRs (Peter Sanitra) / CC BY-ND 4.0より。 そのまま使用。