Dynamic Reverb 2
- Jonas Knohl
- Jan 23, 2024
- 2 min read
For some applications it is not feasible to have a vast amount of different reverbs to choose from. Thus we developed a solution where one reverb could potentially cover all spatial settings that can appear. Since we want to make the reverb believeable and realistic, we need to gather more data of our environment than just the reverb time. Early reflections do play a big role in how we percieve our environment.
Data
How do we gather the necessary data? Its pretty much the same as in our previous Dynamic Reverb post.
The system shoots three rays(0°, 120°, 240°) around the player and checks for the height. In total that are currently 4 rays per frame. Each frame they rotate by 40 degrees.

The main difference in this module is that we established a Terrain Data. This can be attached to every GameObject inside of Unity. Once done, we can select what kind of material it should possess via a dropdown menu. During calculation, there is a lookup table that takes in the name of the material and yields the absorption value of that.
The gathered values will all be smoothed over 4 frames in order to prevent sharp jumps.
FMOD Setup
The FMOD setup is rather quick and easy. Connect the parameters for Reverb Time and Early Delay to the standard reverb plugin to drive their values. Adjust the curves to mirror the values that are incoming, and there you go.
There is also the option to do some more calculations to drive more values of that reverb. For example, we know the average absorption rate of our surroundings, thus we could drive the HF Decay. With our gathered data we could drive most of these values in a realistic way that mirrors the environment.

Calculation
With the data that was gathered, the system is able to calculate various variables that are needed to approximate the reverb of the environment.

We are relying on the sabinsche formula, with a slight variation made by our side in order to calculate the reverb time. T = 0,163 x V/A x O
V is the Volume of the room, and A is the equivalent absorption area.
The time for early reflection can be calculated with ERT = width/343
A can be calculated depending on the average height and width of you environment as follows
AFloor = 2 x width x width x absorption
AWall = 4 x width x height x absorption
A = AFloor + AWall;
We also added a factor for the openness of the environment. It is a percentage and is determined by the amount of non-hitting rays
O = NoHitRays / RayAmount
So if there are 3 rays not hitting out of 6, we have an openness of 50%. That would cut the reverbtime in half.
Future Work
Currently we are only driving the reverb time and the early reflection time with parameters, but by adding additional data to the terraindata we could approximate more than just that.
We are also just using 4 rays per frame. By increasing that we would be able to get a finer picture of our environment. A big step would be moving this system to be emitter centric, as that would reflect the real world much more than the listener centric representation that we have right now.
留言