リアルタイムグラフィックスはさまざまな近似を展開して、間接照明のシミュレーションの計算コストに対処し、実行時のパフォーマンスと照明の忠実度をトレードオフします。これは活発な研究分野であり、新しい技術が毎年登場しています。
アンビエント照明
範囲の最も単純な端では、アンビエント照明を使用できます。これは、実際の光源やローカルの可視性に関係なく、シーン内のすべてのオブジェクトに適用されるグローバルな全方向光源です。これはまったく正確ではありませんが、非常に安価で、アーティストが簡単に調整でき、シーンや目的の視覚スタイルに応じて大丈夫に見える場合があります。
基本的なアンビエント照明の一般的な拡張には次のものがあります。
焼き付け間接照明
いわば、技術が伴うの次の「レベル」、ベーキング(オフラインプリコンピューティング)シーンにおける間接照明のいくつかの表現を。ベイク処理の利点は、すべての難しい部分がベイク処理で行われるため、リアルタイムの計算コストをほとんどかけずに、非常に高品質の結果を得ることができることです。トレードオフは、焼き付けプロセスに必要な時間がレベル設計者の反復率を損なうことです。事前計算されたデータを保存するには、より多くのメモリとディスク容量が必要です。照明をリアルタイムで変更する機能は非常に限られています。また、ベイク処理では静的レベルジオメトリからの情報のみを使用できるため、キャラクターなどの動的オブジェクトからの間接照明効果は失われます。それでも、ベイクドライティングは、今日のAAAゲームで非常に広く使用されています。
ベイク処理では、パストレース、ラジオシティ、ゲームエンジン自体を使用したキューブマップ(またはヘミキューブ)のレンダリングなど、任意のレンダリングアルゴリズムを使用できます。
結果は、レベルの静的ジオメトリに適用されるテクスチャ(ライトマップ)に保存できます。また、SHに変換し、放射量ボリューム(各テクセルがSHプローブを保存するボリュームテクスチャ)などのボリュームデータ構造に保存することもできます。または四面体メッシュ。その後、シェーダーを使用して、そのデータ構造から色を検索および補間し、レンダリングされたジオメトリに適用できます。ボリュメトリックアプローチにより、ベイクドライティングを静的オブジェクトだけでなく動的オブジェクトにも適用できます。
ライトマップなどの空間解像度は、メモリやその他の実用的な制約によって制限されるため、ベイク処理されたライティングにいくつかのAOテクニックを追加して、ベイク処理されたライティングでは提供できない高周波の詳細を追加し、動的オブジェクトに応答することができます(動くキャラクターや乗り物の下で間接照明を暗くするなど)。
事前計算放射輝度転送(PRT)と呼ばれる手法もあります。これは、より動的な照明条件を処理するためにベイク処理を拡張します。PRTでは、間接照明自体をベイク処理する代わりに、ある光源(通常は空)からシーン内の間接照明に伝達関数をベイク処理します。伝達関数は、各ベイクサンプルポイントでソースからデスティネーションのSH係数に変換する行列として表されます。これにより、照明環境を変更でき、シーン内の間接照明がもっともらしい反応を示します。Far Cry 3および4は、この手法を使用して、昼夜の連続サイクルを可能にし、間接照明は1日の各時間の空の色に基づいて変化します。
ベイク処理についてのもう1つのポイント:拡散反射光と鏡面反射光に別々のベイク処理データがあると便利です。キューブマップは、鏡面反射光に対してSHよりもはるかに機能します(キューブマップはより多くの角度の詳細を持つことができるため)が、より多くのメモリを消費するため、SHサンプルほど密に配置する余裕はありません。視差補正を使用すると、キューブマップをヒューリスティックにワープして、その反射が周囲のジオメトリによりしっかりと固定されているように感じさせることで、それをいくらか補うことができます。
完全にリアルタイムのテクニック
最後に、GPUで完全に動的な間接照明を計算することができます。照明またはジオメトリの任意の変更にリアルタイムで応答できます。ただし、実行時のパフォーマンス、照明の忠実度、シーンサイズの間にはトレードオフがあります。これらの手法の中には、機能するために強力なGPUを必要とするものがあり、限られたシーンサイズでのみ実現可能です。また、通常、間接光の単一バウンスのみをサポートします。
- 選択されたポイントの周囲にクラスター化された6台のカメラを使用して各フレームをキューブマップの面が再レンダリングされる動的環境キューブマップは、1つのオブジェクトに適切な周囲反射を提供できます。これは、たとえば、レーシングゲームのプレイヤーカーによく使用されます。
- スクリーンスペースグローバルイルミネーション。後処理パスで画面上の近くのピクセルからバウンス照明を収集するSSAOの拡張機能。
- スクリーン空間レイトレース反射は、ポストパスの深度バッファーをレイマーチングすることで機能します。反射オブジェクトが画面上にある限り、非常に高品質の反射を提供できます。
- インスタントラジオシティは、CPUを使用して光線をシーンにトレースし、各光線ヒットポイントにポイントライトを配置することで機能します。仮想ポイントライト(VPL)と呼ばれるこれらの多くのライトは、GPUによって通常の方法でレンダリングされます。
- 反射シャドウマップ(RSM)はインスタントラジオシティに似ていますが、ライトの視点(シーンシャドウマップなど)からシーンをレンダリングし、このマップの各ピクセルにVPLを配置することにより、VPLが生成されます。
- 光伝播ボリュームは、シーン全体に配置されたSHプローブの3Dグリッドで構成されます。RSMは、反射面に最も近いSHプローブにバウンス光を「注入」するためにレンダリングおよび使用されます。次に、塗りつぶしのようなプロセスが各SHプローブからグリッド内の周囲のポイントに光を伝播し、その結果を使用してシーンに照明を適用します。この手法は、体積光散乱にも拡張されています。
- ボクセルコーントレースは、シーンジオメトリをボクセル化し(さまざまなボクセル解像度を使用し、カメラの近くでより細かく、遠くでより粗く)、RSMからボクセルグリッドに光を入射することで機能します。メインシーンをレンダリングするとき、ピクセルシェーダーは、ボクセルグリッドを通して「コーントレース」(徐々に増加する半径を持つレイマーチ)を実行し、拡散シェーディングまたはスペキュラシェーディングのいずれかの入射光を収集します。
これらのテクニックのほとんどは、現実的なシーンサイズへのスケールアップの問題やその他の制限のため、今日のゲームでは広く使用されていません。例外はスクリーンスペースリフレクションであり、これは非常に人気があります(通常、スクリーンスペース部分が失敗する領域のフォールバックとしてキューブマップで使用されます)。
ご覧のとおり、リアルタイムの間接照明は大きなトピックであり、この(かなり長い!)答えでさえ、10,000フィートの概要と詳細なコンテキストを提供するだけです。どのアプローチが最適であるかは、特定のアプリケーションの詳細、どのような制約を受け入れたいか、どのくらいの時間をかける必要があるかに大きく依存します。