Reverb CPU usage

I have 10+ reverbs (convolutional mostly) for my game. I have some questions about it:

  • Are they consuming CPU all the time even their volume is turned down while not in snapshot activation?
  • When does it load in memory the Impulse Responses, can I preload IRs in a bank or something like this?
  • What are the best practices to manage a huge ton of different reverbs for different ambiences in a big project with FMOD?

Thank you!

I can try to answer, (other people can correct me if I’m wrong) :


A muted bus (-infinity through a snapshot for instance) will cost pretty much nothing on the CPU time.


IRs are built in the banks. Which makes impossible to swap them. The ideal setup is to have specific returns and driving which one is active through snapshots. Which what I do most of the time. If you are using IRs on events, this is not recommended (the engine will have to compute the reverb for every single instance of the event). So, having them on buses, will obviously automatically preload them at runtime.


The best practice is to aim for the best performances possible. Which in the case of extremely expensive reverbs like the ones using IRs, having the less possible reverbs active at the same time.

  • Just like above, specific returns for your reverbs
  • Judge which ones are important and contribute a lot to your ambience and would need a convolution. Switch to the SFX reverb (non convolution one) on the ones that do not require a really specific feeling which could only be obtained by IRs.

It is pretty much out of the question to run with dozens of convolutions at the moment. It’s sad, but we have to make sacrifices until we get a proper raytracing solution in the middleware :frowning:

No. They are subject to FMOD’s virtualization system, which will cause them to become inactive when they are no longer producing an output and receiving an input. You can verify this yourself by connecting the Core API profiler (FMOD Profiler.exe in the FMOD engine installer) to your game and observing the flow of the mixer’s DSP graph.

IRs are stored in bank metadata, which means that they should not need to be preloaded like sample data. They are stored in the appropriate bank in the same way regular sample data is - for example, an IR that is used in the mixer will be built to the master bank, while an IR that is used in an event will be built to the bank containing that event.

What @_MaX has outlined is generally good advice - specific sends/returns in the mixer instead of having the effect on events, and evaluating when it would be better to use SFX reverb. It’s entirely possible to have a extremely large range of different Convolution reverbs, so long as you’re only actually using a few at once.

This is technically not true, as it’s possible to assign a different IR to a Convolution Reverb DSP in the mixer at run time. However, doing so requires interacting with the Core API to navigate the mixer’s DSP graph and find the DSP in question. This is a more complex coding task and goes against the general design pattern that is intended by Studio i.e. setting up your audio behavior at design time as opposed to run time.

If you have any further questions, please feel free to ask.

2 Likes

Oh! This has changed then? I was still on that behavior based on something I read on this forum from someone of the team, nice to see it’s possible now.

EDIT: this was the post from Joseph I’m refering to Change Convolution Reverb's IR via script - #2 by Matze_K