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:
```cs
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 whether `GainFormula` is invoked with low-frequency energy values or high-frequency energy values (`GainFormula` is invoked twice)
- `occlusionRayCount` is the number of occlusion rays that were cast by the source emitter
- `permeationRayCount` is the number of permeation rays that were cast by the source emitter
- `permeationBounceCount` is the number of bounces per permeation ray
- `occlusionEnergy` is 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)
- `permeationEnergy` is 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)