Firelight Technologies FMOD Studio API
System::createReverb3D
Creates a 'virtual reverb' object. This object reacts to 3D location and morphs the reverb environment based on how close it is to the reverb object's center.
Multiple reverb objects can be created to achieve a multi-reverb environment. 1 Physical reverb object is used for all 3D reverb objects (slot 0 by default).
C++ Syntax
FMOD_RESULT System::createReverb3D(
FMOD::Reverb3D **reverb
);
C Syntax
FMOD_RESULT FMOD_System_CreateReverb3D(
FMOD_SYSTEM *system,
FMOD_REVERB3D **reverb
);
C# Syntax
RESULT System.createReverb3D(
out Reverb3D reverb
);
JavaScript Syntax
System.createReverb3D(
reverb // writes value to reverb.val
);
Parameters
- reverb
- Address of a pointer to a Reverb object to receive the newly created virtual reverb object.
Return Values
If the function succeeds then the return value is FMOD_OK.
If the function fails then the return value will be one of the values defined in the FMOD_RESULT enumeration.
Remarks
The 3D reverb object is a sphere having 3D attributes (position, minimum distance, maximum distance) and reverb properties.
The properties and 3D attributes of all reverb objects collectively determine, along with the listener's position, the settings of and input gains into a single 3D reverb DSP.
When the listener is within the sphere of effect of one or more 3D reverbs, the listener's 3D reverb properties are a weighted combination of such 3D reverbs.
When the listener is outside all of the reverbs, no reverb is applied.
In FMOD Ex a special 'ambient' reverb setting was used when outside the influence of all reverb spheres. This function no longer exists.
In FMOD Studio System::setReverbProperties can be used to create an alternative reverb that can be used for 2D and background global reverb.
To avoid this reverb intefering with the reverb slot used by the 3D reverb, 2D reverb should use a different slot id with System::setReverbProperties, otherwise FMOD_ADVANCEDSETTINGS::reverb3Dinstance can also be used to place 3D reverb on a different physical reverb slot.
Use Channel::setReverbProperties or ChannelGroup::setReverbProperties to turn off reverb for 2D sounds (ie set wet = 0).
Creating multiple reverb objects does not impact performance. These are 'virtual reverbs'. There will still be only 1 physical reverb DSP running that just morphs between the different virtual reverbs.
Note about physical reverb DSP unit allocation. To remove the DSP unit and the associated CPU cost, first make sure all 3D reverb objects are released. Then call System::setReverbProperties with the 3D reverb's slot ID (default is 0) with a property point of 0 or NULL, to signal that the physical reverb instance should be deleted.
If a 3D reverb is still present, and System::setReverbProperties function is called to free the physical reverb, the 3D reverb system will immediately recreate it upon the next System::update call.
Note that the 3D reverb system will not affect Studio events unless it is explicitly enabled by calling Studio::EventInstance::setReverbLevel on each event instance.
See Also
- Reverb3D::release
- System::setReverbProperties
- System::getReverbProperties
- FMOD_ADVANCEDSETTINGS
- System::update
Version 1.10.03 Built on Feb 1, 2018