John McKenna

Tech Art &
Sound Design

Immersive Environment


My main project during the advanced specialisation course at the Game Assembly was to create an immersive open world environment. I wanted to deep dive into Unreal Engine and learn all the processes from procedural terrain and foliage to dynamic interactions with shaders, blueprints, light and sound.

The project started initially in Houdini where I generated the terrain and texture masks but I quickly moved on to Unreal’s tools thereafter.  While generating the terrain and choosing assets for this realistic open-world, I realised I was to trying to create the fields and forests from where I grew up in Scotland.

Once I had collected the megascans assets and procedurally placed foliage I got to grips with Runtime Virtual Textures to allow for blending between foliage geometry and the landscape.

The next step was to bring life to the static environment with a global wind shader.

Wind Shader

I wanted to capture the movement of wind in a rolling wheatfield and initially started with two world-sized noise-textures panning over each other to warp the meshes, I later added a third to randomise the magnitude.
While creating the global wind shader I encountered the problem that some assets had vertex colours while others didnt, so I made the gradient by dividing the Z of the object-position which saved time finding and painting all the different assets. It also allowed me to make a material function for more global control.

Foliage Interaction

It is quite a subtle effect in the environment but one that I’m proud to have achieved. I created the render target system for capturing the character movement from a birds-eye view via an invisible vector field particle and projecting it to a render target underneath. This target always follows the player and registers the position and direction. The resulting target is used to bend the grass and foliage underneath the character based on the direction.

One problem I encountered was while setting the particles to be invisible meant they were being culled during gameplay, so I spawned the particles beneath the terrain map instead.

Interactive Campfire

The campfire started as a simple fire particle effect but eventually spread into being an interactive blueprint piece, where the fire starts and grows in intensity when the player adds logs to the fire. The fire particles are simple texture atlas spritesheets as I wasn’t satisfied with the spritesheets I created in Houdini or EmberGen. I enjoyed the learning experience while experimenting in Houdini and EmberGen, but in the end I don’t think a simulation was necessary for a realistic campfire. I think the dynamic sound adds the most realism to the illusion.

Dynamic Sound & Music

I used FMOD to create dynamic sound effects, like the fire effect where it transforms from a small fire starting to a roaring hearth with boiling soup. The sound is spatialized so it sits well in the scene, with the birdsong and ambient wind. The footsteps change depending on which surface and have a degree of randomisation so occassionally the character will step on a twig, or a particularly rocky patch. The ambient soundscape is also interspersed with randomized bird-whistles, wind generation and crickets.

The music was created specifically for the project by composer Andrew Cowan based on appalachian folk music.  We spoke some time about vertical layering and hybrid dynamic composition. In the end it is somewhat hybrid where the music becomes more gentle while the character is in the field and it transforms and loops differently while the Portal Effect is being experienced.

Portal Effect

I wanted to create contrast in the scene with a supernatural event and had a few options I was inspired by.  Specifically this portal from the most recent season of Twin Peaks:

I created a few iterations inspired by the Twin peaks warping of spacetime, but I was not satisfied with how two-dimensional it looked in the world when walking around it.

In the end I wanted interaction with the character so I changed to a spherical mesh that warps the background and pulses like it can inhale and exhale.

Once settled I started work on the atmosphere around it. While creating the dynamic sound I made a parameter for changing the ambient sound to night-time crickets and owls, which I found use for in the portal area. In the level blueprints I triggered a change from day to night-time and some slight perspective shifting for the camera.  The music loops here to create the sense of time-stopping, and there are swells of synthesizers both in FMOD and in Unreal Engine. Each stone in the stone circle triggers a point-light and a note on the internal modular synth.

The volumetric fog around the stone-circle is the latest addition and I’m glad to have a reached a point where the cinematic event is very ominous but not full-on horror.

Animal AI

I added in AI for a small deer which eats, sleeps and wanders around - it also reacts to the sight of the player and runs away.

Final Thoughts

The project has been a huge learning experience, not only the tools and techniques but learning how to push myself to make big changes, or to move on from a implementation that isn’t working out as planned. Often it was the simpler solutions that were most logical, while the more advanced solutions consumed my focus.

If I was to start the project from the beginning I would liked to have spent more time with nuances between ground textures, and it would have been very cool to implement biomes with different assets and weather.