This is the documentation for Enlighten.

7.1.2.4. プローブ バウンスの更新

Probe Radiosity インスタンスを含むシステムは、高レベル ビルド システム内で最適化された経路をとり、ライトマップ データを生成しないようにします。結果として、このシステムには RadSystemCore がないため、ラジオシティ ソルバーは使用できません。その代わり、すべてのプローブ セットが解決された後、InputLighting が呼び出される前に新しいプローブ値で ProbeBounceBuffer を更新する必要があります。次に、この更新された ProbeBounceBuffer オブジェクトは、DoIndirectInputLighting() の呼び出しの前に、入力として IndirectInputLighting パラメーターに渡されます。

低レベル API

プリコンピュートでは、ProbeBounceBuffer を作成するために必要なデータが生成され、その後で新しいオプションの InputWorkspace RadDataBlock が利用可能になります。

class InputWorkspace
{
public:
...
/// オプションのプリコンピュートされたデータが Probe Radiosity に使用されます
RadDataBlock m_ClusterProbeSampleBounceData;
};

以下の API 呼び出しにより、ProbeBounceBuffer オブジェクトを作成できます。

Geo::u32 GEO_CALL CalcProbeBounceBufferSize(const Enlighten::InputWorkspace* inputWorkspace, Geo::s32 numInterpolants, PrecisionHint::Value precision = PrecisionHint::DEFAULT_PRECISION);
Enlighten::ProbeBounceBuffer* GEO_CALL CreateProbeBounceBuffer(void* memory, const Enlighten::InputWorkspace* inputWorkspace, Geo::s32 numInterpolants, PrecisionHint::Value precision=PrecisionHint::DEFAULT_PRECISION);

その後、以下の関数で更新されます。この関数はプローブ値が変更されるたびに呼び出す必要があります。

void GEO_CALL UpdateProbeBounceBuffer( const InputWorkspace* inputWorkspace, Enlighten::ProbeBounceBuffer *probeBounceBuffer, const InterpolationInputSet* interpolationInputs, Geo::s32 numInterpolationInputs, bool recomputeInterpolants);

注: 新しいプローブ セットが内外にストリーミングされるたびに補間箇所を再計算し、InterpolationInputSet 配列を変更する必要があります。