Soul City

Unreal & Wwise Project Breakdown

The aim of this project was to design an atmospheric environmental audio system for a third-person RPG style level. I used the ‘Soul: City’ Unreal Engine environment pack, and a character model from the ‘Paragon’ asset collection. All pre-existing audio assets were replaced with a new system built in Wwise. A particular area of focus were the transitions between the indoor and outdoor areas; a custom Blueprint system was built to detect the player’s position in the level and adjust the environmental audio accordingly. The player controls a robot exploring a ‘cyberpunk’ style environment; starting in a grimy corridor which opens up to rainy, neon-lit streets.

Footsteps


The ‘LineTraceByChannel’ blueprint function is used to constantly draw a line between the player and the floor. This function updates the ‘Get Surface Type’ function and reads the surface type the player is standing on.

The ‘LineTraceByChannel’ blueprint function is used to constantly draw a line between the player and the floor. This function updates the ‘Get Surface Type’ function and reads the surface type the player is standing on.

If the surface type the player is standing on changes, the ‘Surface Type’ variable is changed accordingly. Subsequently, the enumerator variable is converted to a string in order for the ‘Set Switch’ function to read it. The switch group ‘PM’ is the…

If the surface type the player is standing on changes, the ‘Surface Type’ variable is changed accordingly. Subsequently, the enumerator variable is converted to a string in order for the ‘Set Switch’ function to read it. The switch group ‘PM’ is then assigned to either ‘Concrete’ or ‘Concrete Wet’.

In Wwise, the footsteps are contained in a Switch Container. The footstep sound switches between ‘Dry’ and ‘Wet’, depending on the input received from the Unreal ‘Set Switch’ function.

In Wwise, the footsteps are contained in a Switch Container. The footstep sound switches between ‘Dry’ and ‘Wet’, depending on the input received from the Unreal ‘Set Switch’ function.

Each switch contains various components of the character’s movement, such as the footstep itself, the gun movement foley and the mechanical servos of the robot’s joints. These components are contained within Random Containers, which cycle through di…

Each switch contains various components of the character’s movement, such as the footstep itself, the gun movement foley and the mechanical servos of the robot’s joints. These components are contained within Random Containers, which cycle through different sounds with randomised volume and pitch.

Ambience

There are three interplaying ambience systems in the level: the background ‘2D’ ambience of the city, individual emitters and a separate ambience for the starting corridor area. The above picture shows an example of various environmental emitters pl…

There are three interplaying ambience systems in the level: the background ‘2D’ ambience of the city, individual emitters and a separate ambience for the starting corridor area. The above picture shows an example of various environmental emitters placed around the map.

The environmental emitters are set up in Random Containers, which cycle and fade between various loops.

The environmental emitters are set up in Random Containers, which cycle and fade between various loops.

Each environmental emitter has a unique attenuation curve, which means that their volume and low pass filter values are affected by the distance between the player and any given emitter. The spread is set to maximum and begins to decrease sharply wh…

Each environmental emitter has a unique attenuation curve, which means that their volume and low pass filter values are affected by the distance between the player and any given emitter. The spread is set to maximum and begins to decrease sharply when the player gets close to the emitter. This allows the sound to pan around the player, in relation to the player camera. But as the character gets closer to the sound source, the spread is lowered and the sound becomes central and envelopes the player.

The main ‘2D’ ambience of the city consists of a number of blend containers looping through a variation of sounds. The sounds are all randomised for variation.

The main ‘2D’ ambience of the city consists of a number of blend containers looping through a variation of sounds. The sounds are all randomised for variation.

In order to create a realistic effect of the sounds of the city opening up as the player exits the starting corridor area, a blueprint is used to measure the distance between the player and the corridor exit, but only when the player is in the corri…

In order to create a realistic effect of the sounds of the city opening up as the player exits the starting corridor area, a blueprint is used to measure the distance between the player and the corridor exit, but only when the player is in the corridor. The above blueprint works by determining whether the player is in the corridor area and launching a function if they are.

The function works by calculating the distance between the player and an invisible box placed at the exit of the corridor. This distance value is sent as a float to a ‘SetRTPCValue’ function, which in turn sets the ‘Distance’ RTPC value in Wwise.

The function works by calculating the distance between the player and an invisible box placed at the exit of the corridor. This distance value is sent as a float to a ‘SetRTPCValue’ function, which in turn sets the ‘Distance’ RTPC value in Wwise.

Similarly to the set up of the environmental emitters, the speaker panning, low pass filter and volume values are affected by the value of the ‘Distance’ RTPC value. As the player gets closer to the exit of the corridor, the sound of the city begins…

Similarly to the set up of the environmental emitters, the speaker panning, low pass filter and volume values are affected by the value of the ‘Distance’ RTPC value. As the player gets closer to the exit of the corridor, the sound of the city begins to open up.

The level is split into two reverb zones; one for the starting corridor area, and one for the outside area. The corridor area is represented by the green box in the above image.

The level is split into two reverb zones; one for the starting corridor area, and one for the outside area. The corridor area is represented by the green box in the above image.

In Wwise, there are two corresponding auxiliary busses. If the player is standing in the green box, sounds are routed through the ‘InsideReverb_02’ bus. Once the player leaves the green box, sounds are then routed through the ‘OutsideReverb_02’ auxi…

In Wwise, there are two corresponding auxiliary busses. If the player is standing in the green box, sounds are routed through the ‘InsideReverb_02’ bus. Once the player leaves the green box, sounds are then routed through the ‘OutsideReverb_02’ auxiliary bus. This means the reverb matches the type of area the player character is currently in.

Sidechaining

To allow the player’s gunshot sound to achieve clarity in the mix, the environmental audio is sidechained to it. This effect is enabled by putting a Wwise Meter effect on the ‘Gun’ auxiliary bus. The meter reads the volume of the gunshot and sets th…

To allow the player’s gunshot sound to achieve clarity in the mix, the environmental audio is sidechained to it. This effect is enabled by putting a Wwise Meter effect on the ‘Gun’ auxiliary bus. The meter reads the volume of the gunshot and sets the ‘GunVolume2’ RTPC in accordance.

The value of the ‘GunVolume2’ RTPC is then used to lower the volume of the ambience when the gunshot plays.

The value of the ‘GunVolume2’ RTPC is then used to lower the volume of the ambience when the gunshot plays.