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.