This is the documentation for Enlighten.

7.11.1.7. 方向性とベイク

鏡面反射などのビュー依存の効果をサポートするため、Enlighten はベイク API で方向性をサポートしています。使用できる方法は 3 つあります。

  1. ディレクショナル ライトマップ - 基礎となるジオメトリによって決定づけられる法線方向から既定のピクセルの直接光と間接光を取得するだけでなく、他のライティングの法線を指定して、法線マップなどによって生成される軸外のサーフェス ジオメトリをモデリングすることができます。そのような追加のライティングの法線について、Enlighten は直接および間接ライトマップをシェーディングします。これにより、任意の方向を複数指定して、Half-Life 2 基底 (PDF へのリンク) などの手法を使用できます。
  2. ベイクされたディレクショナル イラディアンス - Enlighten は、実行時のディレクショナル イラディアンス メソッドと同じ方法で、主要なライトの方向を格納する追加のテクスチャも生成します。ベイク用として、このテクスチャは間接および直接光の両方について計算されます。
  3. 強度出力テクスチャ - Enlighten は、出力ライトマップにイラディアンスを格納する代わりに、主要なライトの方向のライト強度を格納することもできます。ディレクショナル ライト テクスチャと組み合わせて使用することにより、あらゆる BRDF を使用したリライトが可能になります。IBakeInputPropertiesSetOutputIsIntensity() メソッドを呼び出すか、HLBS を使用する際にベイク パラメーターで outputIsIntensity を設定することにより実現できます。

低周波の法線テクスチャのみで鏡面反射が使用されない場合、ライトマップへの法線マップの結果のベイクは、実行時にコストのかからないオプションになります。Enlighten は、マテリアル ファイルで法線テクスチャの useForBaking 属性を true にして有効化した場合にのみ、ライトマップをベイクします。低レベル API の場合、Enlighten::IBakeInputSystem::AddGeometry に渡されるマテリアルで設定されていれば法線テクスチャが使用されます。

ディレクショナル ライトマップ

ディレクショナル ライトマップ (Half-Life 2 基底のように他のライティング法線を使用するライトマップ) は、他のベイク ソリューションやゲーム エンジンで広く使用され、サポートされています。そのため、この手法は一時的な代替として使用できます。

低レベル プリコンピュート API

追加のライティング法線を提供するため、 Enlighten::IBakeInputGeometryLightingNormals オブジェクトが Enlighten::IBakeInputSystem::AddGeometry に提供されます。オブジェクトには、ジオメトリの各メッシュに対応するライティング法線オブジェクト Enlighten::IBakeInputMeshLightingNormals が含まれます。

Half-Life 2 基底

前述の説明に基づき、任意のサーフェスを 3 次元でモデリングするには、ピクセルあたり最低 3 つのベクトルが必要です。3 つの相互に正規直交したベクトルを選択することで最小基底系、つまり、この最小数のベクトルを使用した最も効率の良い方向のセットが得られます (http://www2.ati.com/developer/gdc/D3DTutorial10_Half-Life2_Shading.pdf、10 ページをご覧ください)。さらに方向を指定することにより、軸外のジオメトリについて高い忠実度を得られますが、High Level Build System を使用した場合、Half-Life 2 基底が適用されます。

HLBS

enableDirectionality 属性が設定されると、High Level Build System はジオメトリに格納された法線と接線を自動的に使用して、それぞれの頂点の Half-Life 2 基底を作成します。HLBS は、直接および間接光のケースでそれぞれ 4 つのベイクされた出力を作成します。1 つは法線方向のもの、残りの 3 つは基底の Half-Life 2 ベクトルのものです。

ベイクされたディレクショナル イラディアンス

イラディアンス ライトマップに加え、主要なライティング方向を格納することは、ディレクショナル ライトマップよりもメモリを節約できる方法です。また、ランタイムとベイクされたソリューション間をシームレスに切り替えることも可能です。一方で、ベイクされたディレクショナル イラディアンスは、異なる方向からの異なるカラーによるライトのモデリングについては、ディレクショナル ライトマップよりも効果はありません。

低レベル プリコンピュート API

ディレクショナル イラディアンス テクスチャは、 Enlighten::IBakeOutputSystemIndirect::GetDirectionalIrradianceTexture および Enlighten::IBakeOutputSystemDirect::GetDirectionalIrradianceTexture メソッドを使用して、Enlighten::IBakeOutputSystemIndirect および Enlighten::IBakeOutputSystemDirect から取得できます。

HLBS

方向の情報は常に追加で作成され、イラディアンス テクスチャと同じ場所に出力されます。テクスチャのファイル名はライトマップ名とサフィックス _Dir からなります。