This is the documentation for Enlighten.
7.1.2.3. バウンスのリサンプリング
Enlighten 3.00 から、バウンスを取り扱うための新しいメカニズムがあります。これはすでに廃止された「高品質バウンス」メカニズムおよび以前のランタイム バウンス メカニズムに置き換わるものです。この新しいバウンス メカニズムは、システム ソルバー ステージの終了後、次のフレームの間接入力ライティング ステージの実行前に呼び出される新しい関数 Enlighten::ResampleBounce()
を導入します。この新しいステージは解決された出力をリサンプリングし、その結果を特別な Enlighten::BounceBuffer
の内容に加えます。次に、このバウンス バッファが入力として IndirectInputLighting
ステージに渡され、フレーム間のバウンス サイクルを完成させます。
この新しいメカニズムにはいくつかの利点があります。たとえば、ライト リークの減少、実行時に構成可能な品質、FP16 だけでなくすべての出力形式のフル サポートを以前の高品質バウンス メカニズムと比べてけた違いの速度で実現します。また、品質を 0.0f (最低) に設定した際の特別な手法があり、一時的なコヒーレンス情報を活用し、バウンス バッファの更新作業を最低限に抑えます。ベイクまたは最高品質のバウンス向けに、品質を 1.0f (最高) に設定できます。これはパフォーマンスの改善により、ランタイムで実現可能になっています。
インテグレートに関する注意
RadSystemCore
に新しい RadDataBlock
セクション、Iff::ResamplingDataSection
があり、これをロードしてバウンスを有効にする必要があります。データが存在しない場合、警告が表示されます。
新しいバッファ Enlighten::BounceBuffer
を作成し、システムが存在している間存続させる必要があります。InputLightingBuffer
と IncidentLightingBuffer
のように、BounceBuffer
は完全な 32 ビット浮動小数点精度または 16 ビットの半精度をサポートします。Enlighten::CalcBounceBufferSize()
と Enlighten::CreateBounceBuffer()
をご覧ください。
ライトマップ システム
新しい関数 Enlighten::ResampleBounce()
があり、ソルバーが完了後呼び出す必要があります。Enlighten::ResampleBounce()
、クラス Enlighten::ResampleBounceParameters、▲クラス Enlighten::ResampleTextureParams
をご覧ください。▲
コード例
if (system->m_RadSystemCore) { ResampleBounceParameters bounceParams; bounceParams.m_BounceBuffer = system->m_BounceBuffer; bounceParams.m_RadSystemCore = system->m_RadSystemCore; bounceParams.m_PersistentData = system->m_PresistentDataBuffer; ResampleTextureParams hqBounce; hqBounce.m_TextureData = system->GetOutputPointer(ENLIGHTEN_OUTPUT_IRRADIANCE); hqBounce.m_TextureWidth = system->m_RadSystemCore->m_MetaData.m_OutputWidth; hqBounce.m_TextureHeight = system->m_RadSystemCore->m_MetaData.m_OutputHeight; hqBounce.m_TexturePitch = system->GetOutputPitchInBytes(ENLIGHTEN_OUTPUT_IRRADIANCE); hqBounce.m_ByteOrder = m_OutputFormatByteOrder; hqBounce.m_TextureFormat = system->m_OutputFormat; hqBounce.m_FixedPointRescale = IsFixedPointFormat(system->m_OutputFormat) ? m_GlobalState.m_FpFormatRescale : 1.0f; hqBounce.m_Quality = m_GlobalState.m_BounceQuality; bounceParams.m_ResampleTextureParams = &hqBounce; Enlighten::ResampleBounce(bounceParams, timeUs); }
プローブ ラジオシティ システム
ライトマップではなく、プローブからバウンスを更新するシステムも、新しい Enlighten::BounceBuffer
に書き込みます。これにより、IndirectInputLighting
インターフェイスと実装を簡素化します。その結果、分かりやすくするため Enlighten::ProbeBounceBuffer
を Enlighten::ProbeBounceWorkspace
に名称変更しました。関数 Enlighten::UpdateProbeBounceBuffer()
は、バウンスを書き込むための追加の入力パラメーター Enlighten::BounceBuffer
を受け取るようになりました。