1
WYDZIAŁ INFORMATYKI, ELEKTRONIKI I TELEKOMUNIKACJI
KATEDRA ELEKTRONIKI
PRACA DYPLOMOWA INŻYNIERSKA
Demo gry pokazujące możliwości silnika RAYAV w środowisku
Unity3D
Autor: Marcin Misiek
Kierunek studiów: Elektronika i Telekomunikacja
Opiekun pracy: dr inż. Bartosz Ziółko
Kraków, 2016
2
Uprzedzony o odpowiedzialności karnej na podstawie art. 115 ust. 1 i 2 ustawy z dnia
4 lutego 1994 r. o prawie autorskim i prawach pokrewnych (t.j. Dz.U. z 2006 r. Nr 90, poz.
631 z późn. zm.): „ Kto przywłaszcza sobie autorstwo albo wprowadza w błąd co do
autorstwa całości lub części cudzego utworu albo artystycznego wykonania, podlega
grzywnie, karze ograniczenia wolności albo pozbawienia wolności do lat 3. Tej samej
karze podlega, kto rozpowszechnia bez podania nazwiska lub pseudonimu twórcy cudzy
utwór
w wersji oryginalnej albo w postaci opracowania, artystyczne wykonanie albo publicznie
zniekształca taki utwór, artystyczne wykonanie, fonogram, wideogram lub nadanie.”, a
także uprzedzony o odpowiedzialności dyscyplinarnej na podstawie art. 211 ust. 1 ustawy
z dnia
27 lipca 2005 r. Prawo o szkolnictwie wyższym (t.j. Dz. U. z 2012 r. poz. 572, z późn. zm.)
„Za naruszenie przepisów obowiązujących w uczelni oraz za czyny uchybiające godności
studenta student ponosi odpowiedzialność dyscyplinarną przed komisją dyscyplinarną albo
przed sądem koleżeńskim samorządu studenckiego, zwanym dalej „sądem koleżeńskim”,
oświadczam, że niniejszą pracę dyplomową wykonałem(-am) osobiście, samodzielnie i że
nie korzystałem(-am) ze źródeł innych niż wymienione w pracy.
<podpis dyplomanta>
3
Serdeczne podziękowania dla dr. Bartosza Ziółki,
Tomasza Pędzimąża oraz dla Szymona Pałki
za wsparcie, cenne uwagi
oraz za udzieloną pomoc
przy rozwoju i testowaniu projektu.
4
Spis treści
Demo gry pokazujące możliwości silnika RAYAV w środowisku Unity3D ........................................... 1
Spis treści ............................................................................................................................................ 4
1. Wprowadzenie............................................................................................................................ 5
1.1 Cele pracy ........................................................................................................................... 6
1.2 RAYAV ................................................................................................................................. 6
1.3 Unity3D ............................................................................................................................... 8
1.4 Aureal 3D ............................................................................................................................ 9
2. Świat gry ....................................................................................................................................... 10
2.1 Model graficzny ...................................................................................................................... 10
2.2 Model akustyczny ................................................................................................................... 11
2.3 Współpraca biblioteki RAYAV z Unity ..................................................................................... 12
2.4 Gracz ....................................................................................................................................... 14
2.5 Dźwięki .................................................................................................................................... 15
2.6 Elementy rozgrywki ................................................................................................................ 16
2.6.1 Ukryta jaskinia ................................................................................................................. 16
2.6.2 Wieżyczki ......................................................................................................................... 16
2.6.3 Samochód ........................................................................................................................ 17
2.6.4 Portal ............................................................................................................................... 18
3. Podsumowanie ............................................................................................................................. 19
4.Bibliografia ..................................................................................................................................... 20
5
1. Wprowadzenie
W dzisiejszych czasach gry komputerowe to nie tylko grafika, efekty wizualne czy
fabuła, ale również efekty dźwiękowe oraz podkład muzyczny, które sprawiają, że
rozgrywka staje się ciekawsza i żywsza tworząc niejako klimat całej produkcji.
Zastosowanie odpowiednich efektów dźwiękowych i muzyki jest rzeczą kluczową przy
budowaniu atmosfery gry i kształtowaniu emocji gracza, dlatego dźwięki powinny być
bardzo ściśle związane z odbywającą się sceną odpowiednio współgrając z otoczeniem.
Należy również zaznaczyć, że odpowiednio dobrana oprawa dźwiękowa gry jest w stanie
przyciągać nowych graczy w taki sam sposób jak najlepszej, jakości grafika, dlatego
muzyka jest niezwykle ważnym atutem każdej produkcji. Niestety znacząca większość
dzisiejszych producentów gier nie zwraca dużej uwagi na wysokiej, jakości realizm
dźwięku, co powoduje, że rynek związany z dobrej, jakości silnikami dźwiękowymi
praktycznie nie istnieje. Wszystko to może się zmienić, gdy zostanie spopularyzowana
wirtualna rzeczywistość, gdzie realizm odgrywa kluczową rolę.
Zastosowanie odpowiednio zaawansowanego silnika dźwiękowego pozwoli
przyspieszyć proces popularyzacji technologii wirtualnej rzeczywistości po przez
tworzenie produkcji o bardzo wysokim poziomie realizmu. Silnik dźwiękowy
wykorzystujący większość efektów falowych może umożliwić stworzenie produkcji, o
jakości dźwięku dorównującej tej znanej nam z filmów. Użycie takiego silnika wraz z
możliwością poruszania się w środowisku wirtualnej rzeczywistości po przez fizyczny
ruch, pozwoli na tworzenie interaktywnych szkoleń dla wojska służących do testowania
umiejętności żołnierza na polu walki i reakcji na zagrożenie. Oprócz zastosowań
wojskowych można by też stworzyć wirtualne samouczki, które byłby realistycznymi
symulatorami dla służb mundurowych szkolącymi ich do działania w sytuacjach
niekonwencjonalnych.
Dźwięk w grach odgrywa bardzo dużą rolę szczególnie w tych, które są nastawione na
fabułę oraz emocje gracza tak jak to ma miejsce w horrorach i grach przygodowych czy też
grach typu stealth, czyli „skradankach”. Obecnie gry komputerowe wykorzystują
ograniczone silniki dźwiękowe opierające się na stosowaniu filtrów odpowiednio
dobranych do scenerii oraz na stosowaniu tłumienia amplitudy sygnału akustycznego wraz
z oddalaniem się od źródła sygnału. Niestety silniki dźwiękowe używane przez twórców
całkowicie pomijają bardzo ważne efekty akustyczne takie jak dyfrakcja, transmisja,
odbicia oraz zmianę docierania fal dźwiękowych w zależności od położenia głowy postaci
6
w przestrzeni wirtualnej. Wszystkie te pominięcia znacząco zmniejszają realistykę
dźwięku, natomiast nie wywierają dużego wpływu na atrakcyjność rozgrywki czy też
grywalność. Zastosowanie odpowiednio zaawansowanego silnika dźwiękowego
niepomijającego tych efektów może mieć bardzo duże znaczenie przy produkcjach
kładących duży nacisk na realistykę rozgrywki oraz w tych, które będą wykorzystywać
wirtualną rzeczywistość, gdzie człowiek przenosi się do innego świata w sposób bardziej
realny.
1.1 Cele pracy
Moim głównym celem było stworzenie dema gry w programie Unity3D, w którym
gracz będzie mógł się swobodnie poruszać po małej wyspie, w której zostanie
zaimplementowana biblioteka RAYAV. Na tej wyspie chciałem zamieścić różne rodzaje
źródeł dźwiękowych takich jak odgłosy zwierząt, natury oraz mowę ludzką, które pokażą
większość ciekawych efektów związanych z silnikiem dźwiękowym RAYAV stworzonego
przez zespół DSP z Katedry Elektroniki na AGH. Kolejnym niezwykle istotnym
elementem było stworzenie dema gry, które będzie się cechowało wysoką płynnością
rozgrywki, dużą liczbą klatek na sekundę oraz szatą graficzną na poziomie
nieprzeszkadzającym w odbiorze gry. To wszystko powinno zapewnić skupienie się
odbiorcy na możliwościach silnika dźwiękowego RAYAV. Dodatkowo chciałem stworzyć
mechanikę prostej sztucznej inteligencji, która miałaby możliwość na reagowanie na
poczynania gracza, poprzez wydawanie dźwięku i przemieszczania się w sposób
swobodny po mapie gry. Demo te chciałbym umieścić w łatwo dostępnym miejscu tak, aby
każdy mógł ściągnąć grę i przetestować możliwości silnika dźwiękowego na swoim
komputerze.
1.2 RAYAV
RAYAV jest to silnik dźwiękowy wykorzystujący technikę śledzenia promieni do
tworzenia realistycznych efektów dźwiękowych w grach komputerowych. Biblioteka
RAYAV przy syntezie dźwięku symuluje zjawiska falowe takie jak załamania na
krawędziach, przenoszenie się dźwięku przez ściany oraz odbicia od powierzchni
akustycznej. Silnik ten obsługuje również HRTF (Head related Transmision function),
czyli funkcje związana z położeniem głowy postaci w przestrzenie wirtualnej, pozwalająca
na szybką lokalizację źródła dźwięku przy wykorzystaniu zmysłu słuchowego. Wszystkie
te obsługiwane efekty falowe oraz technika HRTF tworzą odczucie ciągłości dźwięku, co
7
sprawia wrażenia bycia w „środku” gry komputerowej.
Wykorzystywana przez silnik technika śledzenia promieni wymaga stworzenia
mapy akustycznej, na podstawie, której przeprowadzane są obliczenia potrzebne do
syntezy realistycznych dźwięków zależnych od położenia źródła oraz odbiornika w
przestrzeni akustycznej. Mapa ta musi być stworzona z jak najmniejszej liczby trójkątów i
punktów. Jest to konsekwencją tego, że cała mapa jest wykorzystywana do obliczania
promieni dźwiękowych, dlatego wraz ze wzrostem komplikacji topografii akustycznej
mapy wzrasta czas potrzebny na syntezę dźwięku.
Przy wykonywaniu obliczeń biblioteka RAYAV bierze pod uwagę właściwości
akustyczne materiałów, które są określone przez odpowiednie parametry akustyczne
umieszczone w bazie danych, filtrując odpowiednio promienie dźwiękowe, które odbijają
się od powierzchni danego materiału. Wszystkie te opcje powinny w znaczącym stopniu
przyspieszyć oraz uprościć proces tworzenia dobrze współgrającego audio z rozgrywaną
się aktualnie sceną, przy niskim zużyciu zasobów jednostki CPU.
Rys 1.1 Schematyczny proces syntezy ścieżki dźwiękowej przez bibliotekę RAYAV, wykorzystując technikę
śledzenia promieni.
8
1.3Unity3D
Rys 1.3 Środowisko programistyczne Unity3D
Źródło: opracowane na podstawie [6]
Jest to środowisko programistyczne do tworzenia prostych i zaawansowanych gier
komputerowych, posiadana ono bardzo rozbudowaną społeczność oraz sklep z dużą ilością
assetów, które w prosty sposób pozwalają na tworzenie prototypowych gier oraz
testowanie wszelkiego rodzaju pomysłów. Rozbudowana społeczność pozwala na
błyskawiczne rozwiązywanie problemów związanych ze środowiskiem, co znacząco
przyspiesza przebieg pracy. Zaimplementowana fizyka w łatwy sposób umożliwia
tworzenie mechaniki poruszania się postaci w świecie gry jak i dowolnego manipulowania
siłami obiektów znajdujących się w grze. Dzięki temu można tworzyć większość zjawisk
fizycznych związanych z oddziaływaniem sił np. przyciąganie, odpychanie czy też
przyspieszanie obiektów. Tworzenie zjawisk fizycznych, zachowania sztucznej inteligencji,
interfejsu użytkownika oraz innej mechaniki gry polega na pisaniu skryptów w języku C#,
korzystając z wbudowanych klas środowiska Unity.
Ogromnym atutem Unity3D jest możliwość przenoszenia projektów między
wieloma platformami przy minimalnych zmianach skryptów wykorzystywanych do
interakcji gracza ze światem gry oraz optymalizacji gry pod kątem danej platformy.
Kolejną zaletą tego środowiska jego kompatybilność z większością programów
graficznych na rynku, co pozwala na szybkie importowanie stworzonych modeli z
wybranego programu do modelowania w 3D.
9
1.4 Aureal 3D
Pod koniec lat 90 XX wieku firma Aureal Semiconductor wprowadziła na rynek gier
komputerowych rewolucyjny silnik dźwiękowy oparty o technologię HRTF oraz obsługę
odbić dźwięku od przeszkód, co pozwalało na łatwe określenie pozycji źródła
dźwiękowego używając tylko zmysłu słuchowego. Niestety konkurencyjna firma Creative,
która również tworzyła silnik dźwiękowy o nazwie EAX pozwała firmę Aureal za
naruszenie ich prawa patentowego. Sprawa ta została przegrana przez Creative, niestety
koszty poniesione na tą rozprawę były tak duże dla firmy Aureal, że firma była zmuszona
ogłosić bankrupcję i sprzedać swoją technologię jedynemu konkurentowi. Technologia ta
nie była już później w znaczący sposób rozwijana przez Creative’a.
Rys 1.4 Film pokazujący możliwości silnika dźwiękowego firmy Aureal
Źródło: https://www.youtube.com/watch?v=-oSlbyLAksM
10
2. Świat gry
Jest to dwu poziomowy świat składający się ze słonecznej wyspy, na której
znajduję się parę domków, mały las, górzysty teren i piaszczysta plaża, drugi teren to kilka
pokoi, a w każdym z nich znajduje się źródło dźwiękowe pokazujące różne efekty
związane z biblioteką RAYAV. Do połączenia tych dwóch poziomów wykorzystałem
teleporty, które w swobodny sposób przenoszą gracza pomiędzy tymi światami w ułamku
sekundy. Stworzone zostały również teleporty, które umożliwiają szybkie przemieszczanie
się postaci wewnątrz każdego z poziomów. Każde źródło dźwiękowe w grze wykorzystuje
silnik dźwiękowy RAYAV ukazując jego możliwości w grach komputerowych.
Zaimplementowane skrypty w grze pozwalają na swobodne poruszanie się postacią,
chwytanie różnych obiektów oraz na interakcję z źródłami dźwiękowymi po przez
wyświetlające się znaczniki nad danym modelem. Mapa wyspy oferuję różne odgłosy
zwierząt, dzięki czemu gracz może poczuć się jak w prawdziwym lesie, słuchając śpiewu
ptaków i innych efektów dźwiękowych.
2.1 Model graficzny
Rys 2.1 Model graficzny poziomu z wyspą.
Mapa wyspy została stworzona w Unity3D przy pomocy narzędzia do tworzenia
terenów. Jest to narzędzie, które pozwala na szybkie stworzenie topografii terenu przy
zadanej konfiguracji pozwalając na swobodną zmianę rozdzielczości, rozmiaru oraz
dokładności szczegółów terenu. Użycie tego narzędzia pozwoliło mi na stworzenie w
łatwy i szybki sposób poziomu o zróżnicowanym krajobrazie składającego się z gór, plaży
11
oraz niziny. Następnie na uzyskaną topografię zostały nałożone wysokiej, jakości tekstury,
które stworzyły klimat realności wyspy po przez dobre odwzorowanie elementów natury,
takich jak piasek na plaży, trawę oraz kamieniste wzgórza. Kolejnym kluczowym
elementem do stworzenia terenu było dodanie drzew, trawy oraz różnych elementów
poprawiających wizualny odbiór sceny takich jak kilka małych budynków, zbiornika z
wodą i paliwem, betonowego łuku oraz płaszczyznę imitującą wodę. W znaczącej
większości umieszczone w scenie modele graficzne zostały pobrane za darmo ze sklepu
assets store, pozostałe elementy oraz cała mapa drugiego poziomu złożonego z paru
pokojów zostały stworzone przeze mnie w programie Blender. Drugi pokój jest to poziom
został zaprojektowany w sposób jak najbardziej minimalistyczny tak, aby w żaden sposób
elementy wizualne nie wprowadzały zmniejszenia wydajności gry, dlatego są to pokoje o
kwadratowych ścianach z nienałożonymi teksturami.
2.2 Model akustyczny
Rys 2.2 Model akustyczny wyspy po minimalizacja.
W celu stworzenia modelu akustycznego poziomu musiałem wyeksportować
stworzony teren w Unity3D do programu Blender, gdzie następnie poddałem go wysokiej
optymalizacji. Polegała ona na jak największej minimalizacji punktów w modelu, a
następnie podzieleniu otrzymanych płaszczyzn na trójkąty. Jest to wymagane, ponieważ
biblioteka dźwiękowa RAYAV w swoich obliczeniach do syntezy dźwięku wykorzystuję
topografię składającą się tylko i wyłącznie z trójkątów. Po wyeksportowaniu terenu wyspy,
ilość trójkątów była większa niż 33 tysiące. Natomiast po zastosowaniu optymalizacji
12
zmalała ona znacząco i wynosi teraz 431 trójkątów, a całkowita liczba trójkątów wynosi
1644 trójkątów, co jest bardzo dobrym wynikiem biorąc pod uwagę poziom
skomplikowania oraz wielkość obu terenów. Do każdego z trójkątów modelu akustycznego
zostały dodane materiały, które odpowiadają teksturom nałożonym na topografię terenu
graficznego dzięki temu, dźwięki powinny brzmieć jeszcze bardziej naturalnie.
Powyższą optymalizację można przeprowadzić na dwa różne sposoby w programie
Blender, pierwszy jest metodą automatyczną, która w bardzo szybki sposób redukuje ilość
trójkątów, polega ona na użyciu modyfikatora o nazwie Decimate, w którym ustawia się
współczynnik zredukowania liczby wszystkich płaszczyzn modelu. Druga metoda polega
na ręcznym scalaniu punktów przy pomocy funkcji merge oraz tworzeniu nowych
płaszczyzn wypełniając je trójkątami. Jest to opcja zdecydowanie bardziej dokładna,
ponieważ grafik ma bezpośredni wpływ na rozmieszczenie płaszczyzn oraz punktów,
dzięki czemu wszystko znajduję się w przewidzianym miejscu. W najgorszym przypadku
użycie metody automatycznej mogłoby spowodować, że źródła dźwiękowe mogłyby
zostać przeniesione na drugą stronę modelu akustycznego tym samym wyłączając
całkowicie dźwięk emitowany przez to źródło przy założeniu braku transmisji. Jest to efekt
wysoce niepożądany, dlatego do poprawnego stworzenia modelu akustycznego należy
wykorzystać metodę ręczną lub połączyć dwie metody poprzez zastosowanie na samym
początku modyfikatora Decimate, ustawiając tak modyfikator redukcji, aby model 3D nie
uległ żadnej zauważalnej redukcji topografii, a następnie wszystko zoptymalizować
ręcznie.
Wszystkie elementy aktywne w scenie zostały pominięte przy tworzeniu mapy
akustycznej, ponieważ na chwilę obecną biblioteka RAYAV obsługuje tylko statyczną
mapę akustyczną. Obiekty małe tzn. poniżej 30 cm zostały również pominięte ze względu
na brak ich istotnego wpływu na odbiór dźwięku, aby było korzystne tworzenie kolejnych
trójkątów wprowadzając tym samym większą liczbę obliczeń przy syntezie dźwięku.
Bardzo ważnym wymaganiem w stosunku do mapy akustycznej jest konieczność
posiadania bardzo cienkich ścian, ponieważ zauważyłem, że powoduję to obecnie
problemy z dyfrakcją promieni dźwiękowych.
2.3 Współpraca biblioteki RAYAV z Unity
W celu sprawdzania poprawności działania silnika dźwiękowego w Unity należało
zainicjalizować bibliotekę w Unity3D oraz w programie diagnostycznym Raya Viewer
uruchomianego z konsoli Windows z parametrem –q3 pozwalającego na odczytanie źródeł
13
dźwiękowych bezpośrednio z Unity. Raya Viewer jest to program diagnostyczny
stworzony specjalnie pod silnik RAYAV, pokazuje on wszystkie ścieżki rozchodzące się z
danego źródła i dochodzące do odbiornika, dzięki temu można zaobserwować ścieżki,
które uległy dyfrakcji, odbiciu lub dotarły do odbiornika bezpośrednio. Pozwala on
również na zmianę poziomu pogłosu, zwiększenie lub zmniejszenie ilości liczonych
ścieżek przy syntezie dźwięku oraz na edycję parametrów materiałów akustycznych.
Zastosowanie tego połączenia pozwoliło na określenie translacji wektorowej,
wprowadzającej lekką korektę początku układu współrzędnych tak, aby źródła oraz
odbiornik miały te same położenie w środowisku Unity jak i w bibliotece RAYAV.
Translacja ta została znaleziona po przez przyłożenie źródła dźwiękowego do rogu modelu
akustycznego w środowisku Unity3D, a następnie oglądanie jego położenia względem
ścian w programie diagnostycznym. Poprawka ta została wprowadzona w klasie
RayaUtility.
Rys 2.3 Ścieżki dźwiękowe analizowane przy syntezie w programie Raya Viewer. Czerwony prostokąt to
odbiornik, niebieski to źródło dźwięku.
W zależności od akustyki scenerii bardzo ważne jest dobranie odpowiednich
parametrów w zakładce Synthesis settings, konsekwencją złego ich dobrania może być
niepoprawne działanie silnika dźwiękowego. W przypadku mojego projektu pogłos musiał
zostać jak najbardziej stłumiony, ponieważ wprowadzał on duże zakłócenia w odbiorze
dźwięku.
14
2.4 Gracz
Dzięki wykorzystaniu darmowego assetu dostarczanego przez Unity postać
swobodnie się porusza wykorzystując wbudowaną fizykę środowiska Unity. Do skryptu
odpowiedzialnego za poruszanie się postacią dodałem funkcjonalność, która udaje
zmęczenie gracza. Po dłuższym biegu postać wydaje dźwięk bicia serca oraz wyraźnie
zwalnia, dodatkowo dodałem odgłos kroków postaci, co umożliwia obserwację zmiany
tego dźwięku w zależności od materiału oraz topografii terenu, po, którym się ona
przemieszcza. Gracz został również zaopatrzony w możliwość interakcji z otoczeniem
poprzez naciśnięcie przycisku „E” na klawiaturze, możliwość ta objawia się po przez
powiększenie znacznika na środku ekranu lub przez wyświetlenie się napisów na ekranie
sugerujących możliwość działania. W celu szybszego poruszania się po mapie
wyposażyłem gracza w możliwość strzelania teleportami, które przenoszą postać z jednego
portalu do drugiego pozwalając na natychmiastową podróż pomiędzy dwoma dowolnymi
punktami na mapie. Dzięki tej funkcjonalności gracz jest w stanie szybko porównywać
odbiór dźwięków w zależności od położenia głowy postaci w przestrzeni wirtualnej. Do
manipulacji teleportami gracz wykorzystuje przyciski „1” oraz „2” na klawiaturze, które
umieszczają teleport w miejscu znajdującym się w danej chwili na środku ekranu.
Rys.2.4 Teleporty umożliwiające szybkie poruszanie.
15
2.5 Dźwięki
Użyte dźwięki w grze zostały pobrane z Internetu, głównie ze strony
soundbible.com lub otrzymałem je od zespołu DSP na Katedrze Elektroniki. Wszystkie
wykorzystane przeze mnie ścieżki dźwiękowe zostały przekonwertowane do
nieskompresowanego formatu .wav, w jakości CD, było to wymagane ze względu na
kompatybilność tego formatu z silnikiem dźwiękowym RAYAV. Wszystkie ścieżki
dźwiękowe użyte w grze są ładowane zaraz po inicjalizacji biblioteki RAYAV, w klasie
RayavSampleContainer, do której odwołuje się każde źródło w celu odtworzenia danego
dźwięku. Każde źródło dźwiękowe używa klasy RayavAudioSource, gdzie
zaimplementowałem większość potrzebnych opcji odtwarzania dźwięku, takich jak poziom
głośności, poziom tłumienia wraz z odległością, zapętlania ścieżki oraz możliwości
sprawdzenia czy dane źródło wciąż nadaje dźwięk. Klasa ta również zapewnia wymaganą
przez bibliotekę RAYAV funkcjonalność odświeżania, co kilka klatek pozycji źródła
dźwiękowego.
Większość źródeł dźwiękowych w scenie wykorzystuje skrypt System Audio, który
pozwala na interakcję źródła dźwiękowego z graczem oferując mu możliwość puszczania
oraz zatrzymywania ścieżki dźwiękowej. W zależności od odległości informuje on o
położeniu źródła poprzez mały znacznik unoszący się bezpośrednio nad źródłem oraz
możliwości włączenia lub wyłączenia odtwarzanego dźwięku.
Rys 2.5 Źródło dźwiękowe wykorzystujące skrypt AudioSystem.
Pozostałe źródła dźwiękowe wykorzystują detektory reagujące na ruch gracza. Po wejściu
16
w strefę czujnika uruchamiany jest skrypt puszczający dźwięk, odpowiednio dobrany do
danego modelu, taki jak strzał, śpiew ptaków, lub inny odgłos. Wszystkie źródła
dźwiękowe umieszczone w scenie wykorzystują tłumienie β.
𝛽 = 𝑅 ∗ 𝑙𝑜𝑔𝑅 (1)
R – odległość odbiornika od źródła.
2.6 Elementy rozgrywki
W tym rozdziale opiszę interesujące elementy mojego dema gry, które ukazują
efekty dźwiękowych stworzone przy pomocy biblioteki RAYAV oraz obiekty, które mają
zaimplementowaną prostą sztuczną inteligencje.
2.6.1 Ukryta jaskinia
Na wyspie umieściłem źródło dźwiękowe, wydające odgłos ryku niedźwiedzia,
zostało ono umieszczone w jaskini, która nie jest widoczna w scenie gry. Jest to zabieg
celowy, pokazujący możliwości ukrywania różnych interesujących elementów gier przy
pomocy akustyki. W celu wyświetlenia tej jaskini gracz musi nacisnąć przycisk „V” na
klawiaturze, co aktywuje model akustyczny całej mapy.
Rys 2.6 Źródło dźwiękowe umieszczone w ukrytej jaskini.
2.6.2 Wieżyczki
W grze występują dwa rodzaje wieżyczek, które śledzą położenie gracza i strzelają
do niego, jeżeli znajdzie się on wystarczająco blisko. Te dwie wieżyczko różnią się od
siebie nie tylko wyglądem, ale również rodzajem wydawanego dźwięku przy wystrzale.
Strzały te nie wpływają w żaden sposób na gracza, ale zostały one wprowadzone w celu
ukazania zalet wprowadzenia silnika na rynek gier komputerowych wykorzystujących
17
wszelkiego rodzaju bronie palne. Każda z wieżyczek posiada wbudowany system
przeładowania amunicji oraz system zamrażania wieżyczek, który jest aktywowany
poprzez naciśnięcie przycisku „O” na klawiaturze, co powoduje, że wieżyczka przestaje
podążać oraz strzelać do gracza na określony czas.
Rys 2.7 Wieżyczki strażnicze.
2.6.3 Samochód
Jest to mały robot wykorzystujący RAIN, czyli bezpłatne rozszerzenie do
środowiska Unity, które pozwala na tworzenie drzew behawioralnych oraz prostej
sztucznej inteligencję obiektów w grach komputerowych. Wbudowane klasy pozwalają na
tworzenie ścieżek, po której porusza się obiekt wykrywający i omijający wszystkie
statyczne przeszkody na swojej drodze. Samochód wykorzystuje skrypt AudioSystem
wydając dźwięk kosiarki i patrolując mapę z pokojami według wytyczonej trasy,
wykrywając gracza i zatrzymując się przy nim, gdy znajdzie się on wystarczająco blisko.
Rys 2.8. Samochód z zaimplementowaną prostą inteligencją.
18
2.6.4 Portal
W celu zakończenia rozgrywki wprowadziłem portal, który po złożeniu pozwala na
przejście do napisów końcowych. Portal składa się z kostek, które początkowo są
porozrzucane po scenie. W celu złożenia teleportu należy znaleźć cztery mniejsze kostki i
umieścić je odpowiednio na kolorowych płytkach tak, aby zgadzały się ich kolory.
Umieszczenie kostek w odpowiednich miejscach powoduje uruchomienie skryptu, który
składa większe kostki na uprzednio zdefiniowane miejsca tworząc konstrukcję portalu
wydając pulsujący dźwięk.
Rys 2.9 Portal kończący rozgrywkę.
19
3. Podsumowanie
Stworzone przeze mnie demo gry w bardzo dobry sposób ukazuje możliwości
biblioteki RAYAV oraz realizuje większość założonych przeze mnie celi. Cała gra posiada
dopracowaną oprawę graficzną oraz realistyczne modele 3D. Mapę akustyczna została
stworzona od podstaw w oparciu o model graficzny i zoptymalizowana pod kątem ilości
trójkątów tak, aby synteza dźwięku była jak najszybsza. Dzięki temu silnik dźwiękowy
działa płynnie bez jakichkolwiek zakłóceń.
Projekt pozwala na szybkie zapoznanie się z biblioteką RAYAV. Posiada on
wszystkie potrzebne klasy do używania większości opcji biblioteki oraz skrypty
pozwalające na łatwą interakcję gracza ze źródłami dźwiękowym. Po dopracowaniu silnika
dźwiękowego do wersji komercyjnej może zostać on umieszczony w sklepie assets store
programu Unity3D wraz z tym projektem, jako przykład użycia biblioteki RAYAV.
Stworzona przeze mnie scena oferuje możliwość przeprowadzenia testów
wydajnościowych silnika na własnym komputerze, wykorzystując skrypt AudioSystem
oraz narzędzie statystyczne wbudowane w program Unity.
W grze został umieszczony plik do konfiguracji silnika RAYAV, w którym
modyfikuje się wszystkie ustawienia silnika oraz między innymi ścieżkę do mapy
akustycznej wykorzystywanej przez silnik Unity. Zmiana tej ścieżki pozwala na
zaobserwowanie różnicy w odbiorze dźwięku, gdy silnik dźwiękowy używa geometrii
współgrającej z mapą graficzną, a modelem, który nie posiada żadnych budynków lub też
jest całkowicie pusty. Wszystko to zostało opisane w pliku README.txt dostarczanego
wraz z grą.
Silnik RAYAV pomimo swoich ogromnych zalet, posiada również niewielkie wady.
Można do nich zaliczyć brak możliwości modyfikowania wielkości fizycznej źródła
dźwięku, co można usłyszeć będąc blisko źródła. Transmisja dźwięku przez przeszkody
oraz efekty dyfrakcyjne na grubych ścianach wymagają dopracowania. Usunięcie
wymienionych wad sprawi, że silnik RAYAV będzie doskonałym produktem, który
idealnie wpasuje się w obecny trend wirtualnej rzeczywistości. Zastosowanie tego silnika
może umożliwić sprawdzanie akustyki budynków przed ich wybudowaniem, co mogłoby
znacząco wpłynąć na projekty architektoniczne teatrów i sali kinowych.
20
4.Bibliografia
[1] B. Ziółko, T. Pędzimąż, Sz. Pałka, I. Gawlik, B. Miga, P. Bugiel ”Real-time 3D
Audio Simulation in Video Games with RAYAV”, Making Games, vol.1, 2015.
[2] B. Miga, B. Ziółko ”Real-time acoustic phenomena modelling for computer games
audio engine”, Archives of Acoustics (IF), 2015, vol.2.
[3] Sz. Pałka, B. Głut, B Ziółko ”Visibility determination in beam tracing with
application to real-time sound simulation”, Computer Science, AGH, vol 15, no 2,
2014.
[4] Ian Griffiths “Programowanie C# 5.0”, Wydawnictwa HELION, 2013. ISBN: 978-
83-246-6987-5.
[5] Dokumentacja języka C#. www.msdn.microsoft.com/en-us/library/kx37x362.aspx
[6] Clifford Peters “Unity 4.x Game AI Programming”, Wydawnictwa PACKT, 2013.
ISBN: 978-1-84969-340-0.
[7] Strona domowa Unity3D. www.unity3d.com
[8] Dokumentacja środowiska Unity3D. www.docs.unity3d.com/Manual/index.html
[9] Strona domowa biblioteki RAYAV. www.soundtool.com
[10] Dokumentacja programu Blender. www.blender.org/manual
[11] Strona domowa RAIN. www.rivaltheory.com
[12] Aureal 3D. www.en.wikipedia.org/wiki/A3D
[13] Demo gry RAYAV. www.dropbox.com/s/u3yxa3tiu93q906/Raya_Demo.rar?dl=0