Ambiverse is a plugin developed for Unreal Engine 5. It allows sound designers to create complex 3d spatialized soundscapes around the listener that can be dynamically changed in real-time to suit the environment.
Ambiverse is founded on a procedural spatial ambience system that I engineered at Auris Media for one of our projects. The original system was specifically designed for Wwise, and was constructed using a blend of C++ and Blueprint visual scripting. Recognizing the potential for broader application, I made the decision to adapt this system into a C++ version compatible with the native audio pipeline in Unreal Engine 5.
- Programmed the core functionality for the plugin.
- Created custom asset types for the Unreal Editor.
- Created a packageable plugin module.
- Implemented and tested the plugin in real-world applications.
Unreal Engine 5
Ambiverse is a structured system based on a collection of different asset types. At it's core, it works by distributing individual elements in the environment to build up a fully spatialised soundscape. This allows sound designers to create background audio that feels diegetic and responds to other environmental audio factors like reverb.
Starting at its foundational level, sound designers create assets known as 'Elements'. Each element corresponds to individual sound entities within the game world, such as a bird's chirp or a car horn. Sound designers can adjust element distribution and link them to parameters that dynamically change behavior during runtime. This enables interactions like lessening the frequency of bird calls during in-game rain.
'Layers' are collections of elements that can be dynamically integrated into the soundscape. Layers offer parametric control over the elements they contain and facilitate the assembly of larger sound groups, like a chorus of crickets and various birds in a forest scene. Layers can have managed lifetimes, useful for producing brief 'bursts' of spatialized sounds around the player - consider the sounds of birds taking flight after a sudden explosion.
'Composites' are collections of layers that can coexist or replace existing layers. This feature allows for the storage of a complete, multi-layered soundscape within a single asset.
'Parameters' allow sound designers to modify the behavior, volume, and spawn-interval of elements and layers in real time. They can be created within the editor and adjusted using Blueprints, enabling sound designers to set parameter modifiers for each element or layer as needed.
'Distributors' are specific objects that determine sound placement within the game environment. By default, Ambiverse distributes sounds around the player based on deterministic ranges set by the sound designer. For complex placements, custom distributor objects can be utilized to position elements near specific locations or objects - like bird sounds emerging from trees. Finally, distributors are Blueprintable objects, allowing sound designers to script their behavior in Blueprints without the need for C++.
'SoundSources' are the actors that play each element. These can be used to script custom behavior for a sound. This is useful to introduce conditional logic like a bird stopping to chirp if the player gets nearby, or to introduce movement to the SoundSource. The specific SoundSource class can be configured for each element.