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 を作成し、システムが存在している間存続させる必要があります。InputLightingBufferIncidentLightingBuffer のように、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::ProbeBounceBufferEnlighten::ProbeBounceWorkspace に名称変更しました。関数 Enlighten::UpdateProbeBounceBuffer() は、バウンスを書き込むための追加の入力パラメーター Enlighten::BounceBuffer を受け取るようになりました。