Frontier Developments is a leading independent video game developer and publisher, founded in 1994 by David Braben. The company has a long history of developing best-in-class management games, starting with Roller Coaster Tycoon 3 in 2003, through to self-published titles like Planet Coaster and Jurassic World Evolution. A common thread running through these games is an emphasis on player creativity and sandbox elements.
The Jurassic World Evolution franchise allows players to design and build their own dinosaur theme parks, taking them through a fully voiced Campaign featuring actors Jeff Goldblum and Bryce Dallas Howard. The goal with the sequel was to deliver a bigger, better narrative, a more immersive sim, and the best dinosaurs. Mirroring events in the movie franchise, where dinosaurs roam the planet, the focus shifted from managing dinosaur parks to managing nature reserves. Our key goals were:
- Improve on Jurassic World Evolution
- Have the best sounding video game dinosaurs
- Create a soundscape that responds dynamically to the player’s actions
- Use authentic sounds that fit a Jurassic World product.
In this article we will describe how we used Wwise to achieve these key goals and deliver some of the new features we had planned for Jurassic World Evolution 2. We shipped the game with Wwise 2019.2.8.
When designing a Wwise structure, there is often a conflict between where shared and unique sounds live in the hierarchy. The footplant sounds in Jurassic World Evolution were a great example of this. Each dinosaur family (Ornithopod, Theropod, Sauropod etc) had a unique impact sound, along with a shared surface sweetener. Random containers were duplicated in several structures in the Actor-Mixer Hierarchy. If you wanted to turn down surface sweeteners, you had to look in 17 different places. This allowed us to be very flexible in how they were mixed, but ultimately made mixing efficiently impossible.
For Jurassic World Evolution 2 we wanted to have everything in one work unit, which was easy to maintain and less prone to human error, but that still had enough flexibility to mix the shared sweeteners depending on dinosaur size/family and other game data.
What we settled on was a blend container with impact and surface switches. When a footplant event is triggered, we use it to Set Switch to the correct family (OrnithopodHadrosaur) and set a Game Parameter to determine whether it is a front or rear leg (this parameter drives the switch highlighted in the image above). The event can also be used to Set Pitch and Set Volume if any mixing is needed.
The footplant blend is played. A switch from the audio code determines the surface type. The range of dinosaurs in this game is huge: from about the size of a small chicken right up to the largest land creature that ever lived. The surface sweetener therefore needs a lot of processing to work. We achieved this by recording long takes of various surfaces in our Foley pits, and editing long sweeteners from the recordings.
Using the Envelope function in Wwise, we can apply a shorter envelope to the sweetener, depending on context. For example, if a dinosaur is idling or moving its feet on the spot we’d use a slower attack and release, whereas when a dinosaur is running we’d use a fast attack and shorter release to emphasize this, making the overall length shorter.
Idle, walk, and run data is sent as a combined RTPC. Pitching the sweeteners up or down for smaller and larger creatures to match the shared impact sound using Set Pitch and mixing them appropriately brings everything together.
Footplants are crucial to dinosaur audio: they convey the size and weight of a creature, their speed and gait, and the surface they are moving across. Together with breathing, they form the majority of the dinosaur soundscape. Having footplant impacts and surface sweeteners in one place in the hierarchy, where they can be easily tweaked and mixed was crucial for delivering the best sounding dinosaurs.
A clear, readable bus structure
The bus structure in our games can get pretty complicated. There are a few simple things that we did in Jurassic World Evolution 2 to simplify it and make it more readable.
The image above is our ‘distance filtered’ bus – most 3D-positioned sounds end up here. We mainly use the Master-Mixer Hierarchy for dynamic mixing using States and RTPCs, as well as any reverb/effect sends that we want. Keeping the bus name as short as possible, with all the key information on the left makes the Wwise mixer view (F8) more usable, as the bus names are clearly readable.
Any text in brackets tells us the bus is sending to an effects bus or has some significant state mixing. When debugging or mixing, it’s useful to remember that any sound sent to cre_Flying will be ducked underwater (duw) and that df_Moving is affected by a Camera Focus RTPC (cam) so that is why the roar might be quieter when a Triceratops is behind the camera.
Finally, the use of colour makes a lot of sense when debugging with the Voice Monitor. I cannot overstate how useful this feature was. Being able to scrub through the lifecycle of an asset and see what effect RTPCs/states were having is invaluable.
From the colours in the image I can quickly tell what part of the structure I am looking at. Yellow is 2D ambiences, mainly continuous loops. Green is 3D positioned ambiences. The two shades of purple are dinosaurs.
The unique sounds are coloured in a different shade of purple to the shared, making the vocalisation easier to spot. We would often have volume issues with these unique sounds because they were often only used in very few animations, so mix issues could be easily missed; being able to pick out a specific problematic asset from a wash of other well-mixed shared assets is very valuable.
One of the big new features for JWE2 was the addition of flying reptiles. There were a number of constraints/assumptions that we based the technical design on.
- Reptiles are either released inside or transported in via a helicopter/drone.
- When the freely moving camera is outside the aviary, reptiles inside should be silent.
- When the camera is inside, the outside world should be silent.
- When the reptiles get uncomfortable and escape, they need to make noises outside.
- The only way a reptile can be outside is if they escape.
- Aviaries are closed systems sealed from the outside world, constructed from a solid, glass-like material. While not strictly true, when it came to technical design we treated the aviaries as closed systems in order to make the implementation easier.
We had two pieces of data. One was a Game State that reported the location of the camera/listener:
We also had a Switch set on each of the dinosaur emitters:
- insideAviary by default
- outsideAviary if they escaped
We have hundreds of different random containers of sounds for seven different flying reptiles and every single one of them uses this structure. This system works perfectly, but relies heavily on the assumptions listed above.
Setting up the system was a careful process, because missing a state or switch can cause sounds to be silent. The main flaw to this system is inflexibility: if the camera is outside, and there is a creature inside, that creature is silent. We have multiple aviary types in the game, including a temporary-style structure, built with metallic mesh, used by the Department of Fish and Wildlife. Outside the dome you should be able to hear reptiles inside. With the data we had to use, and the approaching deadline, it felt like an acceptable compromise to make.
In this project, the globalGameState was one of our most handy problem-solving systems. In Jurassic World Evolution and past games, we have a global state that reports the macro-state the game is in:
In this game it got pretty big. Our fantastic audio engine has some nice features, and a particularly useful one is to send a pair of _start and _stop events as the game switches through globalGameState. Entering the game map view sets the state to Game_ViewBuilding and sends Game_ViewBuilding_start/stop to Wwise. This is a circumstance where we’d ask audio programmers for an event, so having this functionality built in is very handy.
The thing that makes this state so useful is that it’s very macro. It’s a set of broad strokes for making big mix changes. As such, we try to confine state mixing that uses it confined to the grandparent buses of the Master-Mixer Hierarchy where it is very useful for mixing.
Switching to a riding view inside a Gyrosphere (Game_Vehicle_Gyro_1P), we can use the globalGameState to un-bypass an effect on the external ambiences, muffling them, use the event pair to start/stop some 2D internal ambiences, mute the audio of dinosaurs and do a pre-fader send to a new bus that’s audible inside the Gyrosphere which makes the dinosaur audio thin and tinny, and send it to a glassy internal reverb.
It’s another great Wwise feature that, with a small amount of audio code work, we can use to independently create a totally different mix for a space.
Meters are the best.
We use a meter bus on JWE2 because it provides flexibility: you can send a signal to the bus for metering, or you can attenuate the signal with an RTPC or state. A great example of a fun meter application is using them as an Envelope follower, and using that envelope to drive real-time parameters on other containers.
We have a gusty wind sound that uses Emitters with Automation and a random container with a random delay to pan occasional gusts around. With User-Defined Auxiliary sends, we can send this bus to our meter bus mtr_2d_windGusts.
The meter effect on the bus is set up as a pretty accurate Envelope Follower, outputting to an RTPC meter_2d_windGusts. This RTPC is then used to drive other wind ambience dynamically: when a random gust is triggered, the RTPC goes HIGH, and we can say remove some Low Pass Filter RTPC on a ‘Wind through the trees’ sound for instance, making the random gust sound seem like it is affecting a different sound.
If we decided there were situations where we didn’t want this effect while it was raining, we could use the Rain_Intensity RTPC to mute the volume of the send.
Leveraging powerful new Wwise features such as envelopes, meters, and macro states made our work and the mix much simpler. There were a host of features we haven’t covered here that we also used and loved. Special shout-outs to the Random parameter generator and the LFO.
Thanks to the whole Jurassic World Evolution team.
Further reading: https://www.asoundeffect.com/jurassic-world-evolution-sound/
The audio team
Alex Vincent (Senior Audio Producer)
Ben Hammond (Audio Test Engineer)
Dan Matarov (Graduate Audio Programmer)
Duncan MacKinnon (Audio Lead)
Dylan Vadamootoo (Senior Sound Designer, Audio Lead DLC)
Gavin Chuong (Audio Rigger)
Hakan Yurdakul (Graduate Audio Programmer)
Henry Flewitt (Sound Designer)
Ian Hawkins (Senior Audio Programmer)
Irma de Wind (Music & VO Supervisor)
Jim Croft (Head of Audio)
Janesta Boudreau (Music & VO Supervisor)
James Stant (Dialogue Manager, Senior Sound Designer)
Jamie Stuart (Senior Audio Programmer)
Luigi Platania (Graduate Audio Programmer)
Matthew Mainprize (Sound Designer)
Michael Maidment (Senior Sound Designer)
Valentin Goellner (Senior Sound Designer)
Will Augar (Principal Audio Programmer)
About Frontier Developments
Frontier is a leading independent developer and publisher of videogames founded in 1994 by David Braben, co-author of the iconic Elite game. Based in Cambridge, Frontier uses its proprietary COBRA game development technology to create innovative genre-leading games, primarily for personal computers and videogame consoles. As well as self-publishing internally developed games, Frontier also publishes games developed by carefully selected partner studios under its Frontier Foundry games label.
About Jurassic World Evolution 2
Jurassic World Evolution 2 is the critically-acclaimed sequel to Frontier’s highly successful Jurassic World Evolution, building upon the ground-breaking and immersive 2018 management simulation. It introduces a compelling, new narrative campaign, incredible new features and awe-inspiring new dinosaurs brought to life with captivating authenticity. Together with expanded construction and more customisation options, the result is an even bigger, better and authentic Jurassic World game.