An Intro To Reverb Zones
Wwise 23.1 adds a new tool to Wwise Spatial Audio called Reverb Zones. A Reverb Zone is a region inside of a Room that doesn’t connect to other Rooms via Portals, but instead uses geometry to define where transitions happen. As an extension of Rooms and Portals, these zones allow you to carve out spaces, with their own reverbs and room-like properties that might not be well served by bespoke Rooms, or that run up against the constraints involved in placing Portals.
This article will run through some hypothetical game-dev scenarios to show where Reverb Zones might be the right tool to solve some design challenges, and point out some common pitfalls that might net unexpected results. I’m using Unreal, where you can easily place a Reverb Zone the same way you’d place a Spatial Audio Volume, but will try to speak generally, since the same principles apply to any game engine. These examples are a general overview, but aren’t going into much technical detail.
Good Morning, Hero
Let's say we’re making an adventure game. Your Adventure Protagonist wakes up in a cabin in the woods somewhere. This is a straightforward Rooms and Portals setup: The outside is a bespoke Room that I’ve called SAV_Forest. The cabin is another Room. The two are connected via Portal. An event is posted to the SAV_Forest to start an outdoor ambient sound, and that room tone can be heard inside the cabin, coming through the portal. Simple enough.
Since there’s more adventure to be had outside than inside, of course our Professional Quest Doer is going to wander outside and follow a path through the woods until reaching a clearing.
Something Hides in the Clearing
This clearing presents a different challenge than the cabin does, because the clearing is not really a “room”. There are no clear entrances or exits, no intuitive places to put a portal, but it would be reasonable to expect this space to sound different. You could think of it as a wall-less Room. In this case, the goal is to have the ambience of the forest fall away as you enter the clearing. The result should be like a cut-out of the forest ambience.
The clearing is represented by a Reverb Zone, the same way a Room would normally be used, but without any portals. Giving this zone a parent, the SAV_Forest, means that the forest and the clearing continue to operate as a single space for sound propagation purposes. In the clearing, there is a giant tree, which has geometry. As part of this Grand Adventure Of Some Kind, there’s a Suspicious Creature hidden behind the giant tree, represented as an emitter. Since the sound of this Sneaky Adversary can diffract around the geometry of the tree and through the boundaries of the Reverb Zone (because there are no “walls”), the Miniature Monster can be heard before being seen - before even entering the Reverb Zone. Otherwise, it might be able to sneak up on our Principal Game Person.
The Reverb Zone has a Transition Region Width of 150 cm. This width is comparable to the depth of a Portal, and influences some of the more subtle details of transitions into and out of the zone - such as the balance of aux sends between rooms, or interpolating Room Transmission Loss (which we’re not using in this example - see the note below).
It’s important to note that the floor of a Reverb Zone is also a transparent surface by default, which would mean that the ambient sound of the forest would be able to propagate through the ground and be louder than intended. A transparent surface is one that has a Transmission Loss of 0, and the Transition Region of a Reverb Zone only occurs around these transparent surfaces. So, to prevent the unwanted propagation through the floor, this surface needs to have geometric Transmission Loss. In Unreal, I’ve done this by checking “Enable Surface” under “Surface Properties” in the details panel, while the floor surface is selected. If “Enable Surface Reflector Set” is unchecked (it’s unchecked by default), then an enabled surface will get a Transmission Loss of 1, and a disabled surface gets a Transmission Loss of 0 (making it transparent). If “Enable Surface Reflector Set” is checked, there will be an extra property available to specify exactly the Transmission Loss you want per-surface. In the SDK, this would be specified by the AkAcousticSurface::transmissionLoss used for each surface when using AK::SpatialAudio::SetGeometry. Each surface behaves this same way, so the same might apply to the “ceiling” of the Reverb Zone. In this case, the volume used for the clearing is big enough, and the ceiling is far enough away that it’s not a concern.
Note: I’ve mentioned two distincts kinds of Transmission Loss. There’s an important difference between “Room Transmission Loss” and geometric Transmission Loss. The transmission loss that belongs to the geometry is what is used in Reverb Zones to decide which surfaces are transparent. AK::SpatialAudio::SetRoom also lets you specify a Transmission Loss that belongs to the room itself, independent of geometry. When using geometry, Room Transmission Loss only applies to room tones (sounds posted directly to a Room), and to the wet path (the chain of room aux busses/reverbs from both room tones and normal emitters). In these examples, the Room Transmission Loss is always 0. It’s also the default value when adding an AkReverbZone actor in Unreal.
The screenshot below shows what a Reverb Zone looks like in the Game Object 3D Viewer. The emitter can be seen on the opposite side of the giant tree (for simplicity, the geometry for the tree is just a capsule). A transmission path is blocked by the tree, and a diffraction path goes around the tree, but through the perimeter of the Reverb Zone (where the “walls” would be). There is a checkbox in the Game Object 3D Viewer Options to “Show Transition Regions”. When enabled, the Transition Regions are represented by the blue boxes seen here. Note that these boxes are an approximation - in practice, just like a portal, the actual area of influence would be rounded since it’s based on distance to each surface.
When the listener moves into the Reverb Zone, the ambient sound posted to the SAV_Forest parent Room is attenuated by the distance from the listener to the “walls” of the Reverb Zone (according to the curves in that sound’s Attenuation ShareSet). The farther you get into the zone, the more the forest ambience falls away. Another tone could be posted to the Reverb Zone, which would also be attenuated by distance in the same way, outside of the zone.
Onward to the Town
Since our Expert Experience Seeker is extremely talented, and the player demonstrates great skill, the Woodland Critter is easily dispatched (or reasoned with?) and we can move on from this clearing. Continuing down the path, there’s an even larger clearing, and in the center of that clearing is a small town. Here, we can set up a more elaborate version of what we saw in the clearing.
This whole area is already encapsulated inside of the outer SAV_Forest, but this time there are more layers. The clearing that the town sits in can be carved out like we’ve already seen. I called this one RZ_Meadow. Then the town itself is a Reverb Zone of its own, which I’ve called RZ_Town. For both of the Reverb Zones, I’ve made sure there’s an appropriate parent Room and Transition Region Width, and made sure to set up each surface according to whether or not I want sound to propagate through that surface (mostly making sure the floor is not transparent). The SAV_Forest is now the parent of RZ_Meadow, which is the parent for RZ_Town.
This is a good time to remember to set an appropriate Room Priority for each Room and Reverb Zone, to make sure that game objects end up contained in the right room. I have the SAV_Forest at the lowest priority, then the RZ_Meadow, and the highest priority is the RZ_Town. The actual numbers are arbitrary, as long as they’re in the right order.
In this arrangement, sounds can propagate through all of the layers of this hierarchy and each Reverb Zone can have its own sound posted to it. The RZ_Meadow has the same cut-out effect on the SAV_Forest as we previously saw, and the RZ_Town is cut out of both. By the time our Principal Participant has reached the town, the forest ambience is heavily attenuated, or gone entirely. Instead, you hear the RZ_Town as you approach, emanating from the direction of the buildings in the center of the clearing, again attenuated by distance outside of the RZ_Town. The town can be approached from any direction, without needing to carefully place portals at bespoke entrances.
A sound posted to a GameObject inside the town propagates outside to the listener as if the “walls” of the Reverb Zone weren’t there at all. If you look at this sound in the Voice Inspector, you’ll see that the reverbs from all of the layers in this Room hierarchy are all applying on the wet path for this sound. All of the involved Room busses are chained together. (For more detail, I’d recommend taking a look at the recent blog post about the Revised Aux Send Model.)
Quest Giver on the Patio
Our Hero With Several Names So Far talks to everyone in town, and maybe breaks into their houses to smash their pottery, as is tradition, and is inevitably told For Plot Reasons, to talk to someone at a nearby bar to get Secret Quest Information. This NPC, however, is sitting outside the bar in a covered patio area. This patio area is another good use-case for a Reverb Zone, since it might be expected to have its own subtle but distinct reverb effect, while still being outside of the Room that makes up the bar. I’ve called it RZ_Patio.
This particular Reverb Zone has some significant differences compared to the previous ones we’ve looked at. What it has in common is that it has a parent Room (RZ_Town) and a Transition Region Width. Aside from how this Reverb Zone is given its own Room aux bus, which has a distinct reverb effect on it, the biggest differences are in how it’s placed, and which surfaces of the zone are transparent.
Just like before, the floor should not be transparent because it wouldn’t make sense for sound to propagate through the floor. However, this time there are two more surfaces to consider. The ceiling for this patio is covered, which means that just like the floor, it would be unexpected for anything to propagate into or out of that zone from that direction.
There is also a surface that rests against the outside wall of the bar, and has a Portal into the Room that represents the interior of the bar. This surface should also not be transparent, for two reasons. The first reason is that, well, there’s a wall there. This means that sound should not propagate through this surface and that the transition region for this Reverb Zone should not cover this area. As mentioned before, the transition region only exists around surfaces that are transparent. The second reason is that, as mentioned, there is a portal in this surface that connects the inside of the bar directly to RZ_Patio, and indirectly to the RZ_Town. A GameObject can only be in one transition between rooms at a time, whether that’s through a portal, or through a Reverb Zone transition region.
Because there can only be one transition at once, there is one more challenge to the placement of this Reverb Zone. This zone sits on the edge of town, which puts it close to the transition between the RZ_Town and RZ_Meadow. In order to avoid unexpected results, transition regions should not overlap, in the same way that the extents of portals should not overlap. In this case, there’s enough room to either move the whole bar away from the edge of the town, or expand the town’s Reverb Zone so that these two transitions don’t overlap.
With this Reverb Zone in place, The Quest Giver (by which I mean an emitter) can be placed inside that zone, and be affected by the unique reverb that applies to the patio area, while still being outside of the bar, as if it was in the RZ_Town room for the sake of propagation. Any sound that comes from inside the bar (whether that’s an ambience room tone or maybe the voice of someone shouting at you through the door) will propagate through the portal as usual. Past the portal, the hierarchy of rooms that is made up of Reverb Zones and their parents is treated as if it’s one big space for propagation purposes.
Adventuring is Hard Work, Time for a Drink
Since this is a very well thought out hypothetical line of Totally Real Quests for an Adventurous Good Time of a video game, let's say that our Wwise Quest Giver on the patio recommends that we’ve actually done quite enough adventuring for one day, and should go inside to get a drink. That’s a great idea, so clearly the protagonist is going to follow through and complete that mission. Experience points all around. Juicy UI things happen. Well done. The bar itself is just a regular room and not a Reverb Zone, though. Why is this a normal Room, and not a Reverb Zone with selectively transparent surfaces?
A Reverb Zone effectively is a Room, with some added properties. There are some key differences between the two that should influence the choice to use one or the other. I’ve deliberately picked cases where a Reverb Zone might be an easy choice, but there are other cases where it would be better to use a standard Room.
One major difference is the parent Room. When you parent Reverb Zones together, you’re creating a hierarchy of rooms that are treated as a single space for simulation / propagation purposes. In theory, you could create spaces made entirely of Reverb Zones, but by doing this, you’d forgo the benefits of Rooms and Portals which could quickly become a performance concern. Spatial Audio would typically be able to use the network of rooms and portals to avoid re-calculating the entirety of a path from an emitter to a listener whenever one of those objects moves or changes, but without that network, the whole path needs to be found every time. In the examples I’ve given here, the difference would be negligible, but on a larger map, with more complex geometry, the cost would be higher.
Another important detail that differentiates Reverb Zones is that they require geometry, which is not true for other Rooms. Since entering and exiting a Reverb Zone is dependent on transition regions instead of portals, geometry needs to exist to define where those transitions would take place.
Speaking very generally, a normal Room is preferable for most cases that you would casually describe as “a room” - an enclosed, or mostly enclosed space, or a space with a clearly defined bespoke entrance. Rooms in a house or office building. A garage. Hallways.
A Reverb Zone becomes appropriate when dividing up a larger space, or when a space isn’t entirely enclosed, or when the constraints of Portal placement make room transitions difficult. To take the examples from the SDK documentation, this could be the space under a highway overpass, or a covered balcony, or as seen earlier, cutting a space out of an outdoor area.
Thanks for Playing
Our quest is completed. We’ve checked all the boxes, spoken to all the NPCs, fought (or not) all the monsters, broken all the pottery, and hopefully learned something useful about Reverb Zones along the way.