This is the documentation for Enlighten.
7.11.1.1. ライト マスクのベイク
ライトマップのベイクの一環として、Enlighten はライト マスクの生成も行います。ライト マスクは同じ UV とメッシュの割り当てを使用して、ライトごと、ピクセルごとに可視性情報を格納します。可視性は実行時にシェーディング評価の一部として使用できます。可視性のみの格納には、いくつかの利点があります。通常、可視性はシェーディング法線などより低周波で変化するため、メモリ消費を低減できます。また、イラディアンスの代わりに可視性を格納することにより、スペキュラー マテリアルを直接サポートすることもできます。
ライト マスクの各ピクセルは R、G、B カラー コンポーネントの値を個別に格納し、透明な (およびカラーが適用された) サーフェスをサポートします。コンポーネントについて視認できるタプルとライト強度タプルを乗じて、サーフェス ポイントに到達するライトを得ます。
Enlighten は、ベイク コストを追加せずライト マスクを作成できますが、ライト マスクを生成する必要があるベイクで使用するライトにタグ付けする必要があります。これとは別に、ライトマップのライトにおける直接光の寄与を無効にすることができます。ライトは引き続き、間接光には影響します。これにより、選択したライトのサブセットにのみライト マスクを使用し、残りのライトを完全にベイクできます。
たとえば、以下の画像は 2 つの白のスポットライトで照らされた Cornell Box シーンです。1 つは赤い壁に、もう 1 つは緑の壁を向いています。
次の画像は Enlighten ベイクの異なる出力を示しています。左の画像は合成されたライトマップを示し、直接および間接光とアンビエント オクルージョンを含んでいます。中央の画像は直接光のみです。どちらも両方のスポットライトの直接光をはっきりと表示しています。右の画像は右のスポットライト向けに生成されたライト マスクを示しています。右のスポットライトだけが表示されているほか、中央の画像に見えるスポットライトのグラデーションはライト マスクの一部ではないことに注意してください。ライト マスクは可視性情報のみを含み、角度、距離、コサイン フォールオフを含んでいません。
次の 2 つの画像は、選択したライトに関して直接光を無効にした際の影響を示しています。左の画像は上と同じで、どちらのスポットライトでも直接光を有効にしたシーンです。右の画像は右のスポットライトに関して直接光を無効にしています。右のライトは依然として間接光を生成しており、明確な緑のバウンス ライトとして確認できることに注意してください。
HLBS によるライト マスクの生成
.Lights 構成ファイルで、disableDirect
と generateLightMask
の boolean 属性を使用して、それぞれ直接光を無効にし、ライトマスクの生成を有効にします。
各ライトと各ライトマップについて、ベイクの出力フォルダには Visibility_<light name><light map><light type>.tex
という出力ファイルが含まれます。他のベイクされた出力ファイルと同じファイル形式を使用して、可視性が浮動小数点数形式で保存されます。提供されたシリアル化手法を使って画像を必要な形式にロードおよび変換するか、 GeoConvert
を /ConvertTexToExr
コマンドで使用して、画像を標準 EXR 画像形式に変換することができます。
低レベル API によるライト マスクの生成
BakeInputLight
構造体には、m_DisableDirect
と m_GenerateLightMask
の boolean 属性が含まれています。m_GenerateLightMask
が true
に設定されているライトの場合、IBakeVisibilityBuffer
の更新 (または作成) の後で IBake::BakeSystemVisibility()
メソッドを使って取得できます。