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;
//...