Hi all,
I really like the way that convolution reverb sounds, and I especially like how it preserves the direction of a sound after the sound passes through. I am wondering how realistic it would be to add dynamic convolution reverb within my game. That is, I would be able to attribute different IRs to different areas, as well as have convolution reverbs fade between each other when a player is in the middle of two “IR zones”. I know that there is a way to set an impulse response within the API, but I’m not sure how speedy it will be in-game. Does anybody have any advice/warnings before I dive into implementing this?
My current plan is just to have two convolution reverb devices on the reverb return bus and swap out IRs + set their wet levels accordingly.
Hi,
Having two convolution reverbs in sequence on the same return means that the second reverb will process the reverb from the first, which probably isn’t what you want.
My recommendation would be to use multiple reverb returns with a different convolution reverb on each, blending between them as needed by adjusting the send level (i.e. via parameter, if you’re using Studio) to each return in effects/buses that you want to apply reverb to.
Using multiple parallel returns avoids the extra complexity of swapping IRs at runtime via the API, which doesn’t really provide any major advantages over just creating as many convolution reverb returns as you need. That said, are there any specific reasons you want to swap IRs?
Gotcha, that makes sense. The only reason why I wanted to swap IRs at runtime was because I thought having that many convolution reverbs running at once would effect performance. But if nothing is being sent through them I guess it wouldn’t. My current plan is to create a new parameter for each convolution reverb that I add, and set that parameter to 1 or 0 (it has seek speed) when a player enters a box in Unreal. Is there a better way to do this?
This is correct - while convolution reverb is a more computationally expensive effect, if no signal is flowing to it the reverb effect will play out the remainder of its reverb tail, and then stop processing until it receives signal to process again. The only potentially un-obvious impact of having multiple convolution reverbs is that their IRs will remain loaded in memory, but this is something that I would recommend considering dealing with only if/when memory overhead actually becomes an issue.
I would create, for example, 3 global parameters corresponding to 3 reverb return buses, and have the parameters automate the send level of any events that are sending to the reverb returns. Then, in Unreal, you can set the value of the global parameters based on the player/listener position (i.e. when they enter a box), which will all events with sends to the reverb returns to have reverb while the player is in those boxes in Unreal.
I was thinking maybe 6-8. One for each IR.
If you’d like to have multiple IR presets without having to have a return for each (which requires adding multiple return sends to events or mixer groups), another potential way to arrange the convolution reverbs is to use Transceiver as a shared reverb send (all events that send to reverb, send to a specified channel with a Transceiver).
Then the Convolution reverbs can be stored into Events, which receive the Transceiver channel, run it through the convolution, and output to a dedicated reverb mixer group.
These events can then be started and stopped (with a fade in if needed) to switch between reverbs in different spaces. This approach will keep the number of returns minimal, as you only need one shared Transceiver channel - any signals sent to the channel get mixed together.
The caveat is the same as with the multi-return approach: you may end up having more than 2 reverbs running simultaneously which can get costly on the CPU.
1 Like
This is a bit of a change in overall project structure, but can be advantageous from an project organization perspective, and also potentially allows you to do things like spatializing the output of convolution reverbs, if that’s something that’s desired.
That’s entirely possible. I would potentially be wary of the CPU usage if many of the reverbs are active at once, but whether this is too much depends on the needs of your project, the limitations or your target platforms, and how you optimize reverb usage.