Setting up multiple ambient areas for open world


#1

Hey folks,

I have a large map with different environments (forest, mountains, grassland etc.) that need different ambiences. When they player travels through the world I want the ambience to change smoothly, depending on the location. It looks like this:

How do I set this up in Unreal? There are some things I already tried out:

  • Just throwing in an ambience will play it all across the map
  • Adding attenuation to the ambience via the “Distance” parameter in FMOD and placing a lot of spheres across the map will cause phasing issues and blind spots
  • Nesting an ambience within an “Audio Volume” in Unreal using its “Ambient Zone” settings works great for one zone, but leaves me without an attenuation option. As soon as I leave the box the audio will stop. There is no smooth transition.
  • Using ADHSR modulation or interpolation time will give me a smooth transition, but it is time based. When the player just stops moving forward during a transition from one zone to another, the audio transition will still go on. It should be location based like with attenuation.

How do all the big RPG games handle their different ambient zones?


#2

You could offline generate a map of the voronoi regions for the ambiences at a relatively low resolution then bilinear interpolate the intensity of neighbouring ambiences based on the listener position.
Imagine that the image is a generated texture and you just sample it based on the listener position.

You may also like to ask about this on the FMOD FaceBook group.


#3

Thanks Cameron for tuning in. Even though I’m able to follow your approach, it is way above my skill level to actually pull it off. But I didn’t know about the Facebook group. Will definitely check it out and ask there.


#4

If anyone is trying to set up a similar ambient zone system, I found a solution using the method described in this blog post. It is a Wwise tutorial, but the Unreal side of things is the same for working with FMOD:

https://blog.audiokinetic.com/volumetric_audio_emitter_for_custom_shapes_in_ue4/

The idea is to use a closed spline loop and let the audio emitter follow the player. If the player is within the spline, the audio emitter gets attached to the player and moves with him. If the player is outside of the spline, the audio emitter is following the player along the spline on the closest position to the player.