poniedziałek, 20 marca 2017

[DSP2017] 7# Holowizja - mroczne dźwięki z horroru w przestrzeni 3D

Dźwięk przestrzenny jest niezbędny, by wizja w HoloLens wydawała się realna. I to będzie nasz temat na dziś.

Weźmy ostatni projekt HoloVision5. Dodamy do niego dźwięk skojarzony z sześcianem oraz dźwięk następujący po upadku sześcianu lub kuli na płaszczyznę.

Jak włączyć dźwięk przestrzenny? Po pierwsze w Edit –> Project Settings –> Audio ustawiamy Spatializer Plugin na MS HRTF Spatializer.

image

Darmowe pliki audio można pobrać np. z Unity Store. Czasami przypadek rodzi inspirację. Tak też było teraz, natrafiłem na pakiety z muzyką z horroru i stąd projekt oraz tytuł posta taki, a nie inny. Z pakietu Horror Ambient Sounds Pack wziąłem dwa pliki:  Horror Ambient Sounds Pack/Ambient Sounds/Horror Atmosphere/Ambience Mid.wav (demoniczne tło) oraz Horror Ambient Sounds Pack/Other/Scare.wav (echoistyczne uderzenie). Zaimportowałem je w Unity do nowo utworzonego folderu Resources w Assets.

Niech sześcian będzie nawiedzony. W tym celu na Cube przeciągam  Ambience Mid z Assets/Resources. W inspektorze dla Cube pojawił się nowy element o nazwie Audio Source. Dokonujemy jego konfiguracji:

1. Zaznaczamy opcje Spatialize oraz Loop

2. Spatial Blend ustawiamy na 1 (lub suwakiem przesuwamy do pozycji 3D)

3. W 3D Sound Settings zmniejszam Doppler Level (efekt Dopplera to zjawisko z lekcji fizyki by odbiór dźwięku przez nas był taki jak w realu, przy pomocy HoloLens możnaby je demonstrować uczniom, co może kiedyś nastąpi jak ceny spadną?) na 0.1 oraz Max Distance na 20.

Końcowe ustawienia można zobaczyć poniżej.

Win1

Teraz pora na wzbogacenie zderzenia upadającego sześcianu czy kuli z “trawą”. Aby to osiągnąć w Assets/Scripts tworzę nowy skrypt o nazwie ItemSounds i przeciągam go do inspektorów Cube i Sphere. Jego zadanie polega na odnalezieniu w Resources drugiego audio o nazwie Scare oraz odpalenie w momencie kolizji. Realizuje to poniższy prosty kod:

using UnityEngine;

public class ItemSounds : MonoBehaviour
{

    AudioSource audioSource = null;   
   
    void Start()
    {       
        audioSource = gameObject.AddComponent<AudioSource>();
        audioSource.playOnAwake = false;
        audioSource.spatialize = true;
        audioSource.spatialBlend = 1.0f;
        audioSource.dopplerLevel = 0.0f;
        audioSource.rolloffMode = AudioRolloffMode.Logarithmic;
        audioSource.maxDistance = 20f;
        audioSource.clip = Resources.Load<AudioClip>("Scare");       
    }

    void OnCollisionEnter(Collision collision)
    {       
        if (collision.relativeVelocity.magnitude >= 0.1f)
        {           
            audioSource.Play();
        }
    }
}

Eksportujemy do Visual Studio jak zawsze. Odpalamy. Zakładamy na uszy słuchawki. Chociaż scena wygląda tak samo jak ostatnio,

image

to już nasz odbiór całości jest inny z powodu dźwięku, który wywołuje uczucia jakbyśmy się znajdowali na cmentarzu o północy (potraktujmy to jako luźną interpretację częstej scenerii ostatnio dość znanego vloga).

db937ba25f71878ac570e9650737539c_full

Zacznijmy się przemieszczać. Jak się cofniemy to dźwięk stanie się cichszy. Jak się zbliżymy ponownie do “nawiedzonego sześcianu” to dźwięki ulegną wzmocnieniu. Jeśli sześcian nam zniknie z pola widzenia, a będzie z naszej prawej strony, to usłyszymy dźwięki w prawym uchu. Nasz umysł umiejscowi go po prawej stronie nawet jeśli go nie widzimy. Oczywiście analogicznie jest z lewej. W miarę przesuwania dźwięk może się nam przelać z prawego ucha, przez centrum głowy (przód lub tył), do ucha lewego…

Nakierujmy teraz kursor na sześcian lub kulę. Powiedzmy “Shoot down”. W momencie uderzenia o “trawę” usłyszymy pewien łoskot podbudowany echem niczym we śnie…

Całość tradycyjnie już dostępna jako HoloVision6 na github. Zapraszam do odsłuchu, przy czym na własne ryzyko. Jest naprawdę mrocznie…

Czy to wszystkie możliwości przestrzennego dźwięku w HoloLens? Nie!  Tradycyjnie już wspomnę o Holograms 101E: Introduction with Emulator oraz Holograms 220: Spatial sound z Holo akademii. O ile w pierwszym jest niewiele więcej niż dziś pokazałem, o tyle drugi pokazuje jak tworzyć interakcje dźwięku z rzeczywistym światem (którego efektem jest np. zanikanie) czy dodawać efekty do własnego głosu. W Holo toolkicie możemy znaleźć z kolei przydatne skrypty w folderze SpatialSound oraz przykładową scenę AudioOcclusionTest, gdzie zmienia się słyszany przez nas dźwięk w zależności od tego, czy od źródła oddziela nas ściana.

Do następnego razu. Cześć.

Brak komentarzy: