■
基本概念
現実世界では、光子は光源から発生し、多数の表面から跳ね返り、これらの表面によって色が変化し、最終的に私たちの目に到達します。 コンピュータグラフィックスにおいて、グローバルイルミネーション(GI)は、それらの光子バウンス相互作用をシミュレートしようと試みます。 このシミュレーションは、照明にリアリズムを追加し、よりリアルなイメージを実現するのに役立ちます。
GIは、以下に示すように、非常に単純なシーンでも目覚しい効果を発揮します。
バウンドなしで物体表面に到達する光は、直接照明と呼ばれます。 光が1つまたは複数の表面からはじき出されると間接照明と呼ばれます。 GIが本質的に計算するのは、間接照明です。
光子が粗い表面に当たると、ランダムに散乱します。 これをDiffuse Global Illuminationと呼びます。 光子が強い反射性または屈折性の表面(ミラーまたはガラスのような)に当たると、それはより予測可能な反射方向を有する傾向がある。 このため、反射/屈折面からはね返る光子は一緒に「凝集し」、興味深い照明パターンを形成する傾向があります。 これらのパターンはコースティクスと呼ばれます。 グローバルイルミネーションは、一般的に、これらの効果の両方を指します:拡散GIとコースティクス。
上記のイメージはDiffuse GIを使用して照明を行い、下の画像はCausticsを使用しています。
Redshiftは別々に拡散GIとコースティクスを扱います。
拡散グローバルイルミネーションは、以下の技術の組み合わせで実現することができます。
- Photon mapping
- Brute-Force
- Irradiance caching
- Irradiance point cloud
一方、コースティックスは下記の技術のみで達成できます。
- Photon mapping
Redshiftでは、これらの技法はすべて「GIエンジン」と呼ばれます。 各GIエンジンには長所と短所があります。 これらは、この文書のさらに下に記載されています。
■
プライマリおよびセカンダリGIエンジン
上記の技術の中でも、実際の照明がどのように動作するか、すなわち光から光子を放つのと同様の働きをするのは、フォトンマッピングだけです。 他のすべてのテクニックは、逆の方法で動作します:カメラから光線を放ち、それらをバウンスさせて最終的に光源を当てます。
これらのカメラの光線が物体に当たったとき、主要なGIエンジンが使用されます。 GIに複数のバウンスが必要な場合は、これらのバウンスにセカンダリGIエンジンが使用されます。 下の図は、プライマリとセカンダリの両方のGIエンジンに「ブルートフォース」を有効にしたときに、これがどうなるかを示しています。
ゼロGIバウンス。 カメラが光線を放つと壁(ポイント “A”)に当たります。 プライマリGIエンジンが使用され、赤で示された別のレイが放たれます。 このようにして、床の直接照明(点「B」)は点「A」に影響を及ぼします。
1回のGIバウンス。 処理はもう少し進んでいきます。 ポイント「B」は、セカンダリGIエンジンを使用して、単一の光線(青色で表示)を放つことによって球からの照明を収集します。 このようにして、床(点「B」)および球(点「C」)の直接照明は点「A」に影響を及ぼす。
光から光子を放つこと、あるいは、私たちの目から光を放つことは、いくつかの点で同等です。 上のすべての矢印の方向を反転させると、照明が光源から来たようになり、球、床、壁を跳ね返り、カメラに到達したようになります。
なぜ独立したプライマリとセカンダリのGIエンジンを持っているのか? プライマリGI照明の結果は、カメラに直接表示されるので、可能な限り高品質である必要があります。一方、セカンダリGI照明は、最終照明の最小部分を表すことが多いため、重要な視覚的アーチファクトを導入することなく、いくらか低品質(「ぼかし」または「ノイズ」と考える)にすることができます。そのようなセカンダリGIを近似すると、パフォーマンスが大幅に向上し、時には品質面での利点があります。
上記の例では、「brute force」について何が起こっているかを示しています。 他のGIエンジンは、点A、B、Cについて異なる動作をします。これらの点については、各技法のドキュメントで詳しく説明しています。
■
主要なグローバルイルミネーション設定
GIを有効にするための出発点は、プライマリおよびセカンダリGIエンジンを選択し、GIバウンス数を指定することです。
シーンに多くのGIバウンスを導入すると、照明が明るくなり、レンダリングが遅くなることがよくあります。 また、照明を少し「白くっぽくなる」傾向があります。 これらの理由から、ユーザーは時折、バウンス数を制限することを選択します。
以下に示すシーンには垂直なタイルがいくつか含まれていますが、そのうちの1つは強いスポットライトで照らされています。 (この特定のシーンのための)最大の視覚的な違いは、0と1の間のGIバウンスです。 これらの画像は、プライマリGIエンジンにはIrradiance Caching、セカンダリGIエンジンにはIrradiance Point Cloudを使用してレンダリングされました。
プライマリおよびセカンダリGIエンジンを選択したら、それらを設定する必要があります。 詳細については、下記のトピックを参照してください。
■
推奨設定
一部のユーザーは、多数の選択肢に圧倒される可能性があります。 そして、最適な設定を要求します。
異なるシーンには異なる要件がありますが、我々は良い出発点がこれであることを発見しました:
- プライマリGIエンジンを「Brute-Force」に設定する
- セカンダリGIエンジンを「Irradiance Point Cloud」に設定する
- 「Number of GI Bounces(GIバウンスの数)」を2または3に設定します
- シーンにコースティクス(ガラスまたは鏡)が必要な場合は、フォトンマッピングのトピックのコースティクスのセクションを参照してください。
経験則として、GIの品質に関する以下のことを覚えておいてください。
- 複数の(あまりにも強くない)ライトを含むシーンは、通常、かなり低いGI設定(光線数、サンプル数など)で逃げることができます。
- 非常に少数の、非常に強力なライトが含まれているシーンは、より挑戦的な GIの設定が必要になります。たとえば、上記の「シングルライトタイル」シーンでは、ほとんど完全に間接照明となり、非常に強いライトを1つしか使用しなかったため、きれいな結果を得るには多くの光線が必要でした。
- 環境シェーダ(「物理的な空」など)で照らされた屋外のシーンは、通常、かなり低いGI設定で逃げることができます
- 上記のすべてを要約すると、多くの照明コントラストはより高品質の設定を必要とし、低いコントラストはより低い品質の設定します。
■
さまざまな技術の長所と短所
(個々のテクニックの仕組みの詳細については、それぞれのページをご覧ください)
Photon Mapping
このテクニックは、ライトが実際の生活の中でどのように動作するかと同様に機能します。 1段階では、光源からフォトンを放ち、シーン全体を跳ね返り、それらを表面に保管します。 次に、第2段階で、レンダラはこれらのフォトンを使用して最終的な画像をレンダリングします。
長所
- 非常に優れた制御を提供します
- フォトンの合理的な数に対して、高速にレンダリングします。
短所
- フォトンマッピングは時代遅れの技術です
- フォトンをGPUメモリに保存する必要があるため、あまりにも多くのフォトンはメモリ使用量の点で禁止されることがあります
- 微調整する設定が複数あり、きれいな結果を得るにはいくつかの実験が必要な場合があります
- カメラで見えなくなるフォトンについては、処理時間とストレージが無駄になることがあります
Brute-Force
Brute force はフォトンマッピングとは逆の働きをします。 光からフォトンを放つ代わりに、それは各表面から数多くの光線を放ち、光線が全体を跳ね返ります。
長所
- 非常に正確
- アニメーションでちらつきがない
- 微調整するための設定が1つしかないので簡単です(「Num Rays」)
- 最終的な画像の解像度とシーンの詳細は重要ではありませんので、任意のストレージを必要としません。
短所
- それは最も遅い技術です。 しかし、Redshiftの速度は、他のレンダラに比べて実用的です。
- 1つのピクセルにつき多くの光線が照射されない限り、それは粒子の粗いの画像を生成する可能性があります。-特に難しい照明状況で
Irradiance Caching
グローバルイルミネーションはサーフェス上でゆっくりと変化することがよくあります。 これは、隣り合った複数のピクセルが同じ値を ‘共有’できることを意味します。つまり、ピクセルごとに別々のGI値を計算する必要はありません。 Irradianceキャッシングはこの事実を利用し、Brute-Forceと同様のGIを画像全体にスプレーしたポイントで計算します。つまり、計算時間が大幅に短縮されます。
長所
- Brute forceよりも数倍速く滑らかな画像を生成することができます
- アニメーションフレームごとに結果をディスクに保存できます。したがって、アンチエイリアシング、光沢の光線数、エリアライトのサンプル数、その他の品質パラメータ(GIには関係ありません)などの調整を行う場合、GI結果をロードして素早く反復することができます。
- シーンの多くは、ほとんど平坦で大部分を持っています。 例えば、建築内装の壁。 または車の表面。 放射照度キャッシュは、これらのシーンに重大なパフォーマンス上の利点を持っています。
- 最終的な画像解像度を上げても、シーンの複雑さと放射照度キャッシュの設定によって、放射照度キャッシュの時間が直線的に増加することはありません。 すなわち 1280×720から2560×1400(4倍以上のピクセル)にしたとき、放射照度キャッシュの処理時間が4倍未満になることがあります
短所
- 放射照度キャッシュポイントは、別々のレンダリングパス中に計算されるため、インタラクティブフィードバックは不可能です。
- brute-forceで放った光線が少なすぎる場合はグレインとして表示されますが、放射照度キャッシュの光線をあまりにも少なく放出すると、アニメーションの「斑点」やちらつきとして表示されます。 これらは、グレインよりも視覚的に邪魔になるかもしれません。
- ポイント間隔のようなものを制御するいくつかのユーザーパラメータがあります。 これらの設定は、斑点がなく、ちらつきのない結果を得るために重要です。 多くの場合、これらの設定を使用する方法を学ぶことは試行錯誤を必要とします。
- シーンに詳細が多い場合(例:画面の大部分を覆う葉)、非常に多くのポイントを作成する必要があります。 これは放射照度キャッシュの利点を無効にし、ポイントを保存する必要があるため、メモリ資源に大きな負担をかけます。 こういったシーンでは、brute-forceがより良い選択かもしれません。
Irradiance Point Cloud
Irradiance Point CloudはセカンダリGIエンジンとしてのみ使用できます。 その目的は、プライマリGIエンジンに迅速かつクリーンな二次照明を提供することです。 あなたは、「インポートン」、「放射パーティクル」または「ライトキャッシュ」と呼ばれる他のレンダラー上で同様の技術を見ている可能性があります。 赤方偏移の放射照度ポイントクラウドはこれらの技術とは異なって動作しますが、それは、複数バウンスGIの品質と効率を向上させるという同じ目的を果たします。
長所
- Brute-ForceとIrradianceのキャッシングをより速くてきれいにするのに役立ちます
- ある種の非常に難しい照明のシナリオは、この手法でのみレンダリングすることができます。 (すなわち、純粋にブルートフォース技術では非常に長い時間がかかる)
短所
- いくらかのストレージが必要です(ただし、通常はそれほど多くありません)
- 微調整する設定がいくつかあるので、少しの実験が必要です。
- シーンにたくさんのライトが含まれている場合や照明条件が難しい場合、複数バウンスが必要な場合にのみ利益をもたらします
■
反射エネルギーを保存
Redshiftは現在、グローバルイルミネーション計算中の反射光サンプリングをサポートしていないため、エネルギーが失われる可能性があります。 「Conserve Reflections Energy」オプションをチェックすると、GI計算中にマテリアルの拡散色に対し、失われる反射エネルギー(すなわち反射の色合い)を追加するチープなトリックが有効になります。これはGIに寄与する反射光線の跳ね返りといった錯覚を与えます。これは強くまたは色づけされたマテリアルの反射で特に目立つことがあります。