Daan van de Ven

Spellbound Spire

96 Days – 25 Members – Audio Programmer - Unity 2019

Project Info

Project Summary


Made with Unity 2019.2.6f1

The project focused on giving a full range of different parts of development, Concepting, Pre-Production, Production and Release.

This project was the longest I had been on at the time lasting over the course of a whole academic year.

Released on Steam

Team Composition

5 Programmers
8 Artists
10 Designers
3 Outsource Artists

 

Duration

4 Blocks – 32 Weeks – 96 Project Days

2nd September 2019 – 26th June 2020

Project Goals


For this project we set out to create an immersive room scale VR game based upon previous projects like Shattered Lights.

The project set out to use non-euclidean techniques to make the most of the limited play space we would have to work with.

My Contributions

Role: Audio Programmer

Working with Tim Wondergem and integrating Wwise into the project

Working with Wwise and creating audio hook-ups, in-engine as well as working on the technical side of Wwise to aid with design.

I worked with Wwise to use real-time parameter control to adjust the sounds that get played in real time, such as the scraping sound when scraping an object along a table, where I added a low-pass filter and volume adjust depending upon the speed of the object being scraped.

Role: Gameplay Programmer

Working on interactable objects to be used within levels.

I created the breakable objects logic, spawning of the broken object upon breaking and respawning to its original location some time after breaking.

Scraping (C# & Wwise)

For the interactions we wanted to have the ability for the player to get more immersed within the game, as one of our stretch goals we wanted to have scraping of objects when being held by the player.

I started out working with Tim Wondergem (Audio Designer) to plot out how we wanted to sound to function, for the base we wanted to pass the speed value to Wwise and then use that to apply affects to the scraping asset.

I made a basic plan and made it so that audio would play once the object was colliding with an object while the player was holding it. After this I added the basic effect outlines we wanted in Wwise with RTPC.

RTPC controls Wwise
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class ScrapingSound : MonoBehaviour
{
    [Header("Audio")]
    public AK.Wwise.Event scrapingAudioEvent;

    private bool audioPlaying = false;
    private AudioManager audioManager;

    private void Awake()
    {
        audioManager = (AudioManager)FindObjectOfType(typeof(AudioManager));
        if (audioManager == null)
        {
            Debug.LogError($"Cannot find Audio Manager within scene," +
                           $"audio will not play on {this.gameObject.name}" +
                           $"at {this.transform.position}");
        }
    }

    private void OnCollisionStay(Collision collision)
    {
        if ((transform.parent.GetComponent<Hand>() != null) && !audioPlaying)
        {
            AkSoundEngine.SetRTPCValue("Speed",
                this.gameObject.GetComponent<Rigidbody>().velocity.magnitude);
            audioManager.PlayAudio(scrapingAudioEvent, this.gameObject);
            audioPlaying = true;
        }
        else
        {
            audioManager.StopAudio(scrapingAudioEvent, this.gameObject);
        }
    }

    private void OnCollisionExit(Collision collision)
    {
        if (audioPlaying)
        {
            audioManager.StopAudio(scrapingAudioEvent, this.gameObject);
        }
    }
}

Obstruction (C# & Wwise)

For our environmental audio at times we had scenarios where some of them came from behind walls, these still playing in the same was as lamps not obstructed was quite jarring for the player. We decided to work on adding an obstruction systems.

Quill Verhoeven (Audio Designer) to see what we could do for a custom obstruction system, we started looking into ways we could use Wwise to adjust the audio. We ended up going with RTPC, due to it being specific per game object.

After setting up the basics of Wwise I went to work on a system to detect obstruction and send it over to Wwise. I started with using Unity linecast as I wanted a trace between two specific points. Due to some issues with the collisions of the linecast hitting the collider of the lamp before being able to reach the target. I switched the target of the linecast to the nearest point on the collider, but this would still collide with the collider, I had to add a slight offset to fix this issue.

Obstruction RTPC Wwise