Created By: Game Audio Resource Ltd Date: 27/08/2019 Version: 2.00
In this guide we will look at a few ways to reduce in game audio usage costs and optimise how audio is used.
The aim is to reduce the audio foot print with run-time loaded memory content and Voices played.
Without setting up content limits and watching your audio run-time size will have a detrimental effect on the game’s global performance. (e.g. FPS could be affected) & various audio content not being played.
This is quite a complicated process and A long guide!
The Wwise new 251 course is hugely helpful and offers lots more information that is not covered in this Chapters guide.
(please visit the link below)
- STEP 01: Test Voice Count
- STEP 02: Priority System
- STEP 03: Performance Monitoring
- STEP 04: Global Voice Cap
- STEP 05: Conversion Settings
- STEP 06: Test & Integrity Report
Task Time Needed: 1 > 2 (days depending on project content size)
Chapter 16 B – Step 01
Test Voice Count
Before we begin, boot up the game and connect Wwise to the game.
Change to the Wwise Layout: Profiler.
Expand the Performance Monitor window. You will notice as events are called various stat values will change as you play the game.
We are going to check how many audio voices (or channels) we are currently using in game.
Load a single player map.
While playing the map, keep an eye on the Profiler > Performance Monitor values.
Get used to how the values changed as you play the game.
Play a map to completion.
As you play a map. write down the values for the following entries listed in the Wwise Profiler > Performance Monitor
* CPU – Total – Min / Max values (e.g. 5% > 12%)
* Loaded Banks (Memory) – One value should be displayed from booting up the game till the game is closed
* Number of Voices (Physical) – Min / Max values (e.g. 20 > 40)
You may need to play the same map multiple times to get a good set of min/max numbers.
Our stats before Optimisation was implemented were:
* CPU – Total = 1 > 4%
* Loaded Banks (Memory) = 422.6MB
* Number of Voices (Physical) = 10 > 65 (peak at 80)
If we look at the Cube project size in the MS Windows > Properties we can see the game base size is currently 2.78GB.
With this we can Estimate the Loaded Banks (Memory) needs to be sitting around 272MB (10%) So we are currently150MB over the limit we should be aiming for.
We can see that CPU usage is quite low, so we can up the CPU usage to reduce the Loaded Banks Size.
The Number of voices currently playing are over the projects default capped limit of 40. So, we will need to either limit content further or increase the voice cap value.
Chapter 16 B – Step 02
This step is crucial to reducing the number of audio voices that can play at one time and ensure the highest priority content is played over lower priority content.
Example, you wouldn’t want a UI HUD sound to be stopped or not played, due to a generic small dog footstep asset being triggered.
- TIP: Some PC games can allow up to a max of e.g. 256 audio channels to play at once. Most PC games normally aim for e.g. 128 (Console games normally aim smaller e.g. 64)
256 may sound like a huge amount of content that can be played, however on larger projects without settings voice limits you could be looking at 1000’s of psychical voices playing at once if not limited correctly. You literally will be looking at the game freezing due to the amount of audio related content being triggered.
BEFORE YOU BEGIN
You will need to assess your audio content areas and create a priority system of what can be played and what should be dropped if the channel count audio limit is reached.
This is a rough example of what we used:
- Music = 100 (Basically always plays)
- UI = 100
- Adviser = 100
- Environments Loops = 90
- Elements = 80
- Weapons = 70
- Magic = 60
- Player Character (Footstep, Body, Armour, Vocalisation, Dialogue) = 55
- Vocalisations Large = 50
- Foot Large = 40
- Body Large = 30
- Vocalisation Small & Medium = 35
- Foot Medium & Small = 25
- Armour = 20 (could potentially not play)
- Body Medium & Small = 15
- Environment One Shot wildlife & nature = 10 (these content types will be killed first)
For player Character content, we set higher priorities e.g. vocalisations, footsteps, armour, etc… as the camera/listener position focus is always with the Player Character.
Let us implement a small part of the priority system to the armour work unit.
- Navigate to the Project Explorer > Audio tab > Actor-Mixer Hierarchy > Default Work Unit > Armour Work Unit.
- Select the Armour_Leather_Player Actor Mixer, then in the Property Editor > Advanced Settings tab, under Playback Priority, assign the value to 20
You have now set the child content to be a low priority.
You could also set an offset priority by distance.
If you tick Offset Priority by e.g. -10.
It will mean at the emitters max distance away from the player characters listener position the Priority is actually 10 not 20.
- TIP: You could also offset priority by, so the further you are away from the triggering event, the lower the priority is. These we believe are based off the attenuation max distance of the played sound.
For an example: if you were up close to the event being triggered the priority is then set to the default value of 20.
If you were at the events attenuation max distance range e.g. 100, you could set the priority to be a further -10. So, the actual priority at max distance would become 10 not the default 20.
In the same location, we can limit the amount of a content area can trigger, via playback limits.
- Tick the Limit sound Instances to: tick box.
Change the Value to 10 and the drop-down menu to Globally.
- TIP: What this means is all child content under the actor mixer is now only allowed to play 10 assets/associated events at one time, no matter how many calls from the game engine are made.
This is obviously not the best approach to globalise all child content. A more granular control would be added on larger projects.
- We can also affect the content further.
If we leave When limit is reached to Kill Voice, the voices over 10 will be killed.
With When priority is equal currently set to Discard oldest instance this means when 10 voices are reached with associated content/events. The oldest voice will be killed / stopped. This allows a new voice to trigger.
However, if we change the drop drown to Discard newest instance. No new voices will play until the 10-voice limit currently playing either finish or stop, freeing up a new voice e.g. 9/10)
– TIP: This process can help manage when a bug appears e.g. If were to click a UI button and 2 voices/events are called from clicking the UI button. (2 audio assets are played)
To limit only one asset to be heard you could apply the following:
You could set the limit sound instances to 1 Globally.
When limit is reached Kill voice
Then When Priority is equal to Discard newest instance.
The result would be: even through Wwise is being informed by the games code to play 2 voices/events, only 1 voice is played at one time.
This kind of hack fix should try to be avoided where ever possible as other issues can arise from such a hack fix. But if your project is at the eleventh hour, this kind of process could be virtual to a clean soundscape.
Chapter 16 B – Step 03
As lightly mentioned at the start of this guide, we will now look at how memory is used and how to reduce memory for certain types of audio playback.
Virtual Voice also offers further ways to reduce audio channel counts and what to do with virtual voices.
For a quick example, try sending any looping long environment asset to send to Virtual Voice & Play from elapsed time.
When the associated content is triggered, it is removed from Physical voices and loaded into memory.
This is where you will need to know how much of the game run-time memory global audio can use.
Generally, 10>20% is assigned to audio. (smaller games may only have 5%)
On smaller projects, the team may not know how much run time memory audio can use as they may not be tracking all game area content Individually.
However, Wwise gives us a target we can aim for.
In the Profiler Layout > Performance monitor Lists via Loaded Banks (Memory) Value. E.g. 200MB.
This is the total amount of audio content sent to memory when the game loads.
If the total game project size you are working on is 2GB (2000MB)
You can roughly estimate the audio memory size needs to be around 200MB.
In the Performance Monitor list is another handy value to keep an eye on, called: CPU – Total. This shows you how much audio memory is being used on the assigned CPU thread.
If you are aiming for 10% in game audio memory budget, it good practice to keep value around 10% or below when the game is running.
Numbers of Voices (Physical):
Another value in the Performance Monitor to keep an eye on is the Number of Voices (Physical).
As you play the game it will display how many voices are being triggered at one time.
If you have set your project PC Platform to e.g.128 voices and 150 voices are being triggered, then Wwise will start to kill new event calls that have a low priority value. (if no priority system is setup, any new event called will then not play! This means a gunshot may not be played, but a footstep would.
If the voice count drops back down under 128, the killed voices will then start to trigger again.
Chapter 16 B – Step 04
Global Voice Cap
This is probably one of the biggest degrading issue heard in most show-reel of the cube demo.
Let us adjust the amount of audio voices that can be played at one time.
- In the Wwise project tool bar select Project > Project Settings.
- In the Project Settings window > General tab, change the Max Voice Instances to 128 for Mac & PC.
This enables the game to play up to 128 individual voices at any given time.
- TIP: For this size game 128 channels should be plenty to get a full sounding soundscape of all content we have added. With proper optimisation you could get the channel count down to 60>80, but you may lose some detail on distance.
Now Apply all the above settings globally across your project content.
- Once you have implemented a priority system across the entire project, save the Wwise Project updates and Generate the Sound Banks.
Chapter 16 B – Step 05
Wwise allows us to play any audio asset at different conversion quality settings. This allows use to reduce our run time memory cost or increase CPU audio thread usage at the cost of the asset playback quality.
Which audio format you use also affects if audio CPU thread % & Loaded Bank (Memory) is increased/decreased.
Setting up Conversions correctly and well balanced across the Wwise project will hugely help global game FPS at run-time. Also, it will help audio to stay with-in global project Audio usage values.
The following steps will set up 3 Conversion settings so that we can assign them Globally across the Wwise project’s audio content.
- TIP: With a larger scaled project you may need to implement various conversion settings for multiple types of content.
Based on the content tested, you will be able to evaluate quality settings that can be best set for each content area. E.g. footsteps PCM low quality, gunshots Vorbis high quality
- Navigate to the Project Explorer > ShareSets tab > Conversion Settings.
Under the Default Work Unit, copy and paste the Default Conversion Settings 3 times, so you have 3 new conversions.
Name each of the 3 Conversion Settings individually the following:
- Double click the CNV_1_Vorbis_High Conversion to open the Conversion Settings Editor. Then in the Conversion Settings Editor window add the following settings for Mac and Windows:
> Sample rate change to 48000
> Change the Format to Vorbis
> Change the Quality setting to 5
- Double click the CNV_2_Vorbis_Low Conversion to open the Conversion Settings Editor window add the following settings for Mac and Windows:
> Sample rate change to 44100
> Change the Format to Vorbis
> Change the Quality setting to 1
- Double click the CNV_3_PCM_Low Conversion to open the Conversion Settings Editor window add the following settings for Mac and Windows:
> Sample rate change to 32000
> Change the Format to PCM
> NOTE: PCM format does not allow for quality settings, so it is based on the sample rate
- Close the Conversion Settings Editor Window.
- Navigate to the Audio tab > Actor-Mixer Hierarchy > Default Work Unit > Armour Work Unit.
Select the Armour_Leather_Player_Movement Switch container (Under theArmour_leather_Player Actor Mixer) Play the assets so you can hear the detail of the assets.
- Then in the Property Editor > Conversion tab > Conversion Settings
Tick override parent
Then assign the CNV_3_PCM_Low Conversion Settings.
- Save your Wwise Project updates and Generate the Sound Banks (so that the conversion can be added)
- Now play the assets again. If you do not notice an audible different. Then leave the assigned conversion settings. If you notice that the audio quality has degraded & that you feel will be noticed in the game’s soundscape, try assigning a different conversion setting.
Once you are happy with the conversion settings added, Go through all Actor Mixers (and in some cases child containers) adding a conversion setting most fitting for the content type.
Reminder: To test how the new conversion setting sounds on the new content, Apply the Conversion settings, then generate the sound Banks. this allows you test how the content sounds with the conversion settings assigned.
Ensure you have the Transport Control Original button turned off.
Ensure you have completed all the above steps in this guide before progressing to the final step, testing the in-game audio content.
(don’t forget to generate the sound banks!)
Chapter 16 B – Step 06
Test & Integrity Report
Finally, we test our updates in game.
- Boot up the game and connect Wwise to the game
- Change to the Wwise Layout: Profiler
- Change to a single player map, as you play the map, keep an eye on Number of Physical voices used, the % of the CPU – Total and the Loaded Banks (Memory stats)
Also, listen to the overall sound scape. Are there any stand out moments where audio may be cut off, not playing or an asset’s set sounding low quality?
If so, use this guide to address any issues heard.
- Once you are happy with your overall sound scape, save your Wwise project updates and generate the sound banks.
- Finally run a Wwise Integrity Report to validate your Wwise Hierarchy structure.
Use this chapters guide Chapter 16 A & B) to balance and optimise your soundscape.
Play test as much as possible as you make balancing updates.
NOTE: If you plan to add music to the game, global balancing will need adjustment. When music is playing you will find certain content will not stand out as well, compared to when music is not playing.