FMOD and UE4, performances and implementation questions

Hello everyone,

We are currently working on game on UE4 and have decided to use FMOD. I’ve already worked with this software, but only on the dynamic music part. And on this project I’m dealing with the full spectrum of the audio, meaning sound design and music.

There are a few questions that we need to answer, because at the moment, the code / optimisation team feels more comfortable with using the native UE4 audio implementation than FMOD because of a few interrogations we have.

I’m french, so I’m gonna try to be as clear as possible. If some stuffs are not clear enough, don’t hesitate to ask for more details or tell me what part you don’t understand.

So here are the questions :

How is handle banks loading in UE4 ?
I’ve read the documentation and made some tests by creating the Master Bank, and a few additionnal banks ( first person, third person, ambiant, dialogs, environment ). The test map I have made is pretty simple : FMOD Ambiant sounds starting when the map is loaded.

And no matter what sound I choose everything is loaded correctly and plays fine in the test map. So our interrogation is : does that mean that every single bank is loaded by default. Or FMOD is clever enough to load the needed banks when the level loads ? Or do we need code our own loading system to optimize loading performances ?

If it is automatic, and FMOD knows how to deal with the events… one example I have in mind is : if I create an audio event and assign it to two different banks ( let’s say level1.bank and level2.bank ), if the same sound / event is assigned to each bank, is FMOD able to load only the level1.bank if I start level1.map ?

How much cost IR ?

Impulse reverbs are gorgeous. And as a sound designer I want to give tools that are easy to use for coders and level designers. So, for testing purposes, I’ve created at the moment 5 returns with 5 different IRs ; and I’m using snapshots to control what reverb is used. I think it’s way more easier to say to coders “trigger this snapshot” than “get this return, load this sample and activate the return on this channels”… also it allows the LD to trigger reverbs whenever they want.

So my interrogation is, is it viable ? Is it something you’d recommend ? At what point is it too much returns (because we could have at least 10 different reverbs) ? How does it impact performances to have that much returns with impulses loaded ?

Is there a “cheatsheet” about performances for a multiplateform game ?
I’ve checked a lot the profiler while I’m creating different tests cases. And there is something that is actually difficult for me to anticipate : what is the average / optimal numbers for the different important parts of the FMOD engine ( CPU usage, CPU mixer, CPU update, memory, file IO, voices, instances ).

For instance, let’s say we are on PC ( some kind of big gamer PC that can handle the most heavy games ), how much instances, voices, cpu usage, memory is best ? And what about a tiny PC ?

Also, I haven’t seen “per plateform” setup for “max instances” for example. So for me, besides the audio compression setup, I need to configure and setup my FMOD project for the lowest capable plateform… is it ?

Thank you in advance for you answers,

And also thank you very much for this kind of middleware that fits perfectly my needs and allows me to create some really cool sounds and music. Keep up the good work.

1 Like

How is handle banks loading in UE4 ?

By default, the integration will load all the banks when the system is initialized.
You can disable this in the integration settings if you want to handle the bank loading manually.
https://fmod.com/resources/documentation-ue4?version=2.0&page=user-guide.html#studio-bank-output-directory

is FMOD able to load only the level1.bank if I start level1.map ?

You would have to manually handle this type of bank loading yourself.
Internally FMOD will load the data for an event from the first bank that it is found in, if you load another bank containing the same Event it will increase the ref count of the Event. This means that if you want to unload the first bank you will have to do that before loading the second bank, otherwise the first bank will not actually be unloaded due to an Event in it having a ref count above zero.

How much cost IR ?

Convolution Reverb can be more expensive on some platforms than others.
It is recommended to only implement 1 or a limited number of these effects and place them on a sub-mix/group bus (a ChannelGroup), as this is an expensive effect to process. Convolution Reverb (and DSPs in general) shouldn’t cause any CPU load when idle, so you could have a system that changes between the different reverbs.
https://fmod.com/resources/documentation-api?version=2.0&page=core-guide.html#convolution-reverb

Is there a “cheatsheet” about performances for a multiplateform game ?

It can be difficult to determine the best numbers for each platform, as it depends on a wide variety of factors. We have some performance reference information for different platforms in the docs:

https://fmod.com/resources/documentation-api?version=2.0&page=platforms-windows.html#performance-reference

https://fmod.com/resources/documentation-api?version=2.0&page=white-papers-cpu-performance.html#cpu-performance

Also, I haven’t seen “per platform” setup for “max instances” for example.

Currently the integration doesn’t have this option built in, I will add a task to investigate the best way we could add this.

In the meantime, you can create different config files for the different platforms and set the values in those. For example, in the Config folder create a new folder for the platform required. In that folder create a file named {Platform}Engine.ini, see the UE4 docs on config files, in that file you can specify the setting name and value. Currently the FMOD Settings are written to Config/DefaultEngine.ini, you can use those a guide.

[/Script/FMODStudio.FMODSettings]
RealChannelCount=64
TotalChannelCount=512

Hopefully that answers most of your questions, let me know if I missed anything or you would like to know more.