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