This is the documentation for Enlighten.

6.5.2. 間接光のレンダリング


描画する各メッシュで、ライトマップまたはプローブから間接光をサンプリングするか、まったくサンプリングしないことを選択できます。近似のローカル反射の場合、キューブマップから間接光をサンプリングします。

間接光データ

Enlighten は、全方向から受ける光の量を意味するイラディアンスという形で間接光を提供します。

ピクセル シェーダーで、テクスチャまたはバッファからこのライティング データを取得し、ピクセル法線の最終的なイラディアンスを評価するために使用します。

遅延レンダラーの場合、通常は別のライティング パスではなく G バッファ パスで間接光を適用する方が簡単です。

従来のハーフ ランバートおよび SH 評価手法におけるいくつかの制限に対処するため、Enlighten ライティング モデルの使用をお勧めします。推奨するライトマップ ライティング モデルでは、Enlighten ランタイム データの一部である各ラジオシティ システムに対して追加のラジオシティ法線テクスチャが必要です。

ライトマップ

Enlighten ライトマップから間接光を受けるメッシュを描画するには、Enlighten ライトマップ UV 座標を使用して Enlighten ライトマップ テクスチャをサンプリングします。

概念上は各ラジオシティ システムに対して 1 つのライトマップがあります。インスタンスの Enlighten ライトマップ UV 座標は、インスタンスを含むラジオシティ システムのライトマップ内の位置にマッピングします。

すぐに使用するには、システムごとに個別のライトマップ テクスチャ リソースを作成し、メッシュをレンダリングする前にそのテクスチャをバインドします。 

数千のシステムを含む大きなワールドでは、各システムに対して個別にライトマップ テクスチャ リソースを作成することが効率的でない場合があります。その場合、すべてのシステムのライトマップを単一のテクスチャ アトラスに統合し、各システムについて UV トランスフォームを計算して、そのシステムに含まれるインスタンスを描画する際に適用することをお勧めします。

異なるライティング モデルが複数ある場合、ライトマップ テクスチャに複数のレイヤーが必要になります。すべてのライティング モデルでイラディアンスレイヤーが必要です。同じくディレクショナルおよびラジオシティ法線レイヤーを必要とするディレクショナル イラディアンス ライティング モデルの使用をお勧めします。

シェーダーで Enlighten ライトマップ UV を有効にするには、Enlighten ライトマップ UV 頂点ストリームを含めます。以下をお勧めします。

  • Enlighten ライトマップ UV には、16 ビット整数 UNORM 形式を使用します。
  • Enlighten ライトマップ UV を、メッシュの他の頂点属性とは別の頂点バッファに格納します。
  • この頂点バッファを、永続ランタイム データとともに格納します。

単一のメッシュに 2 つのインスタンスがある場合、同じ Enlighten ライトマップ UV 頂点バッファを共有できます。

Enlighten ライトマップ UV データをデバッグするには、GeoRadiosity のチャート レンダラーと似た視覚化の実施をお勧めします。IMeshSimpOutput インターフェイスを使用すると、各ライトマップ ピクセルのチャート別カラー コーディング、テクスチャ フィルタリングの無効化、シェーダーでのチェッカーボードの描画ができます。

プローブ

Enlighten プローブから間接光を受けるメッシュを描画するには、Enlighten SH 係数を取得し、ピクセル シェーダーで SH 関数を評価します。

L1 SH を使用してコストを最小化しつつ、Enlighten の改善された L1 リコンストラクションを使用して強い HDR 光源によるライティング アーティファクトを防ぐことをお勧めします。

ピクセルごとのプローブ ライティングを使用する場合、各メッシュに追加のデータは必要ありません。ピクセル シェーダーで3D 仮想テクスチャをサンプリングするだけです。

メッシュごとのプローブ ライティングを使用する場合、ピクセル シェーダーの読み取り先である GPU バッファ オブジェクトに各メッシュの補間結果を保存します。

キューブマップ

サーフェスにローカル反射を適用するには、ピクセル シェーダーで近接した Enlighten キューブマップ からサンプリングします。各キューブマップ テクセルは、キューブマップの中心が受ける全方向からの光を表しています。デフォルトでは、高レベル ランタイムでボックス フィルターにより各キューブマップのミップチェーンが生成されます。

最善の結果を得るには、一般的に使用されているイメージ ベースド ライティング手法をお勧めします。すでにこれが静的キューブマップ用としてエンジンに実装されている場合、Enlighten キューブマップを簡単に置き換えられます。

アート スタイルがフォトリアリスティックでない場合、キューブマップをまったく使わないという選択肢もあります。ディレクショナル イラディアンスによる間接スペキュラーは、低いスペキュラー強度に対する低コストの代替手段を提供します。