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; //...
, multiple selections available,