This is the documentation for Enlighten.

Probe bounce updates

Systems which contain Probe Radiosity instances take an optimised path within the High Level Build System ensuring it doesn't generate any lightmap data. As a consequence, there is no RadSystemCore for this system and so the radiosity solver cannot be used. Instead, after all the probesets have been solved but before the subsequent InputLighting solve is called, the ProbeBounceBuffer needs to be updated with the new probe values. This updated ProbeBounceBuffer object is then passed as input into the IndirectInputLighting parameters before the call to DoIndirectInputLighting().

Low level API

The data required to create a ProbeBounceBuffer is generated during the precompute, after which a new optional InputWorkspace RadDataBlock becomes available:

class InputWorkspace
{
public:
...
/// Optional precomputed data used for Probe Radiosity
RadDataBlock m_ClusterProbeSampleBounceData;
};

The ProbeBounceBuffer object can be created with the following API calls:

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);

It is then updated with the following function, which needs to be called any time the probe values may have changed:

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

Note: Interpolants need to be recomputed any time a new probeset is streamed in or out, changing the InterpolationInputSet array.