Emitter Gain Formula
This function converts raytracing energy values to low-pass filter gain values.
The GainFormula is invoked twice per source emitter
- Once with low-frequency energy values
- Once with high-frequency energy values
The results of these functions are stored directly on the emitter's filter and accessed via listener.GetTargetFilter(target)).
The default formula specifies that 15% of occlusion energy or 15% of permeation energy is required for an emitter to be at max volume:
target.GainFormula = (bool lowFrequency, int occlusionRayCount, int permeationRayCount, int permeationBounceCount, float occlusionEnergy, float permeationEnergy) =>
{
float gain = 0.0f;
// 15% of energy is considered enough for the emitter to be at full volume
if (occlusionRayCount > 0)
{
float rayThreshold = 0.15f * occlusionRayCount;
gain += occlusionEnergy / rayThreshold;
}
if (permeationRayCount > 0)
{
float rayThreshold = 0.15f * permeationRayCount * permeationBounceCount;
gain += permeationEnergy / rayThreshold;
}
return MathF.Min(1, gain);
}
Parameters:
lowFrequency- indicates whetherGainFormulais invoked with low-frequency energy values or high-frequency energy values (GainFormulais invoked twice)occlusionRayCountis the number of occlusion rays that were cast by the source emitterpermeationRayCountis the number of permeation rays that were cast by the source emitterpermeationBounceCountis the number of bounces per permeation rayocclusionEnergyis in the range 0.0 to 1.0, where 1.0 means all occlusion rays discovered the target emitter with maximum energy remaining (i.e. no occlusion)permeationEnergyis in the range 0.0 to 1.0, where 1.0 means all permeation rays discovered the target emitter with maximum energy remaining (i.e. all rays passed through air)