Some questions about 3D reverb from a newbie

Here is my code

// Setup 3DReverb object
Reverb3D *reverb
system.createReverb3D(&reverb);
      
FMOD_REVERB_PROPERTIES fmodReverbProperties = FMOD_PRESET_GENERIC;
reverb.setProperties(&fmodReverbProperties);
      
FMOD_VECTOR reverbPos = {[desired position for reverb]};
reverb.set3DAttributes(&reverbPos, 10.0f, 30.0f);

// Play a 3d sound somewhere in my program
system.playSound(sound, 0, true, &channel);
FMOD_VECTOR pos = {[position of my 3d sound]};
FMOD_VECTOR vel = {0,0,0};
channel.set3DAttributes(&pos,&vel);
channel.setPaused(false);

// Update position of Listner as normal
system.set3DListenerAttributes(.....);

As my understanding, when the Listener is located inside 3DReverb’s sphere (below max distance) and a 3D sound is played inside 3DReverb’s sphere too. I should hear the sound with reverse effect.

But infact, even both Listener and 3Dsound are inside 3DReverb’s sphere, I can only get the reverb effect when I play 3D sound close to Listener’s position. Reverb effect is negated when 3D sound moves farther

Take a look at this image

Is this correct working mechanic of reverb 3D in FMOD ? Or my code has problem or I understand it wrong?

Here is the video to demonstrate: Listner position is camera, 3Dsound is from my character, and the box is for 3D Reverb object’s center.

Hi,

Please correct me if I’m misunderstanding your issue.

I understand realistically it should produce a reverb sound more noticeable when the listener is far away from the 3D sound’s position, but the current system does not support that as the reverb sound’s feedback is primarily based on the listener’s position.

One potential workaround could be to calculate the distance between the 3D sound and listener, then use this distance squared as a parameter to modify reverb properties, which should increase the reverb effect when 3D sound moves farther.

Could you please try calling ChannelControl::setReverbProperties FMOD Engine | 7. Core API Reference | ChannelControl | ChannelControl::setReverbProperties to dynamically adjust the wet level of the reverb properties based on the distance?

Here is how you might do it:
float distanceSquaredToListener = pow(pos.x - reverbPos.x, 2) + pow(pos.y - reverbPos.y, 2) + pow(pos.z - reverbPos.z, 2);

channel.setReverbProperties(0, distanceSquaredToListener);

Hope it helps, please don’t hesitate to ask more questions.