7.1.1.2.6. バウンスのリサンプリング

This is the documentation for Enlighten.

7.1.1.2.6. バウンスのリサンプリング

概要

ソルバーが実行されると、ランタイムは解決された出力データを間接入力ライティング ステージにフィードバックできる形式に変換することを要求します。ここでは、バウンスを Enlighten::BounceBuffer オブジェクトに入れることが想定されています。これはバウンスのソースに応じて、2 つの方法で実施できます。

1.ライトマップ バウンス

ライトマップ バウンスのリサンプリング
if (system->m_RadSystemCore) {     // パラメーター構造体を作成します。     ResampleBounceParameters bounceParams;     // 更新する必要のある BounceBuffer にポインターを割り当てます。     bounceParams.m_BounceBuffer     = system->m_BounceBuffer;     // ポインターをシステムのラジオシティ コアに設定します。     bounceParams.m_RadSystemCore    = system->m_RadSystemCore;     // 永続データ バッファにポインターを設定します。これは品質が 0.0f に設定されている場合に一時的なコヒーレンス最適化で使用されます。     bounceParams.m_PersistentData   = system->m_PresistentDataBuffer;       // テクスチャ サンプリング パラメーターの構造体を作成します。     ResampleTextureParameters 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;     // 求められるバウンス リサンプリングの品質を設定します。0.0 が最低品質です (最高パフォーマンス)。1.0 が最高品質です (最低パフォーマンス)。     hqBounce.m_Quality              = m_GlobalState.m_BounceQuality;     // パラメーターを設定します。     bounceParams.m_ResampleTextureParams    = &hqBounce;       // 関数を呼び出し、BounceBuffer にバウンスをリサンプリングします。     Enlighten::ResampleBounce(bounceParams, timeUs); }

2.プローブ バウンス

プローブ ラジオシティ システムからのバウンスは、 Enlighten::UpdateProbeBounceBuffer() を呼び出すことによりリサンプリングできます。

プローブ バウンスのリサンプリング
if (system->IsBounceProbeSampled() &&         system->m_ProbeBounceWorkspace &&         m_InterpolationInputSets.GetSize() > 0)     {         if (m_ProbeSetManager != NULL)         {             Enlighten::UpdateProbeBounceBuffer(system->m_InputWorkspace,                 system->m_ProbeBounceWorkspace,                 system->m_BounceBuffer,                 m_ProbeSetManager,                 system->m_ProbeBounceInputSetsUsed != m_InterpolationInputSets.GetSize() || requiresProbeInterpolationUpdate);         }         else         {             Enlighten::UpdateProbeBounceBuffer(system->m_InputWorkspace,                 system->m_ProbeBounceWorkspace,                 system->m_BounceBuffer,                 m_InterpolationInputSets.GetArray(),                 m_InterpolationInputSets.GetSize(),                 system->m_ProbeBounceInputSetsUsed != m_InterpolationInputSets.GetSize() || requiresProbeInterpolationUpdate);         }          system->m_ProbeBounceInputSetsUsed = m_InterpolationInputSets.GetSize();     }

3.間接入力ライティング パラメーターの設定

BounceBuffer を更新した後、DoIndirectInputLighting() 関数を呼び出す前にこれを IndirectInputLightingParameters 構造体の入力として設定する必要があります。

間接入力ライティングのパラメーター。
Enlighten::IndirectInputLightingParameters params; //... params.m_BounceBuffer               = system->m_BounceBuffer; //...