Autor w sieci

Muzykę tworzę hobbystycznie. Wybrane utwory przesłuchasz w serwisach SoundCloud oraz YouTube.

SoundCloud: https://soundcloud.com/usarzewicz

YouTube https://www.youtube.com/c/WojciechUsarzewicz

LinkedIn: https://www.linkedin.com/in/wojciechusarzewicz/

1. Wprowadzenie

W ostatnich latach silnik Unity zyskał na popularności wśród twórców gier wideo. Jednocześnie dość mało powiedziano na temat programu FMOD, obsługującego dźwięk oraz muzykę w grach komputerowych. Tak, wiem, że muzyka to również forma dźwięku, ale podkreślam to rozróżnienie, ponieważ w pracy tej skupiam się właśnie na muzyce.

Książka ta ma na celu nadrobić zaległości, przedstawiając podstawy pracy z programem FMOD na potrzeby silnika Unity i nauczyć, jak tworzyć w grach na Unity muzykę interaktywną, czyli taką, która reaguje na to, co się dzieje na ekranie. Zdecydowałem się na omówienie muzyki, ponieważ to z nią głównie pracuję.

Na szczęście, większość elementów, które przedstawiam w tej książce, jest identyczna dla obsługi dźwięku ogółem - czy będą to kroki postaci, silnik samochodu czy wystrzały z broni.

Dźwięk jest istotnym elementem każdej gry, a odpowiednio przygotowany, pozwala na umocenienie u gracza wrażenia nierealności i zanurzenia się w świecie przedstawionym. Niestety, podstawowa oferta Unity jeśli chodzi o obsługę dźwięku z pomocą komponentów Audio Source czy Audio Listener, pozostawia trochę do życzenia (choć oczywiście, wiele rzeczy możemy zaprogramować samodzielnie). Z pomocą przychodzi tutaj program FMOD – stacja DAW dedykowana obsłudze dźwięku w grach. Usprawnia i przyśpiesza on proces dodawania dźwięku i muzyki do gry.

FMOD to jeden z najpopularniejszych programów do obsługi dźwięku w grach komputerowych, obecny na rynku. Jest bardzo wygodny w użytkowaniu i posiada potężne możliwości Jest on również darmowy, podobnie jak samo Unity. Ponieważ FMOD jest programem niezależnym, można go zintegrować z innymi silnikami, jak choćby z Unreal Engine.

Warto wiedzieć

Jak bardzo darmowy jest FMOD? Możesz go ściągnąć za darmo na potrzeby nauki i pracy. Licencja pozwala na darmową pracę z FMODem na potrzeby komercyjnej gry, to znaczy, póki nad grą pracujesz, nic nie musisz płacić. Jednak komercyjne gry wymagają już zakupu licencji, więc musisz ją kupić przed wydaniem gry. Natomiast gry publikowane za darmo i nie zarabiające w żaden sposób licencji kupować nie muszą. Uczyć możesz się jednak za darmo.

FMOD bardzo przypomina typowy program DAW, dlatego osoby, które mają w takich programach doświadczenie, z łatwością odnajdą się w FMODzie. FMOD jest bardzo popularny wśród twórców gier indie, ale też stosowany jest w dużych produkcjach AAA.

***

Warto wiedzieć

Drugim z najpopularniejszych programów do pracy z dźwiękiem i muzyką w grach jest Wwise, lecz ten program jest już bardziej skomplikowany. Jednocześnie ma znacznie bardziej rozbudowaną dokumentację niż FMOD. Wwise również możesz ściągnąć za darmo na cele edukacyjne, choć użycie komercyjne wymaga zakupu licencji.

***

Wiele rzeczy, które zostaną w tej książce przedstawionych, może zostać wykorzystanych również w innych silnikach, przykładowo właśnie w Unreal Engine. Zasady FMODa bowiem nie ulegają zmianie. Ściągamy FMODa i integrujemy go z pomocą odpowiedniej paczki z naszym silnikiem. Co sprawniejsi programiści mogą samodzielnie zintegrować FMOD z silnikiem innym niż Unity czy Unreal Engine. Resztę wywołuje się już z poziomu kodu silnika.

Z pomocą prostych lekcji, książka ta naucza podstaw dodawania i obsługiwania muzyki w Unity za pośrednictwem programu FMOD. Nauczysz się, jak dodawać i wywoływać muzykę w grze, jak pracować z podstawowymi skryptami ją obsługującymi. Dowiesz się, jak pracować ze zdarzeniami w FMODzie, z mikserem i poznasz snapshoty.

Założenia wstępne

Założyłem, że umiesz już pracować z Unity, a także masz doświadczenie w pracy z dźwiękiem i programami DAW. Pewne koncepcje nie będą więc tłumaczone w tej książce. Osobom niezaznajomionym z Unity polecam książkę Unity w akcji Josepha Hockinga, wydaną przez Helion: https://helion.pl/ksiazki/unity-w-akcji-joe-hocking,uniwak.htm, która dobrze przedstawia podstawy pracy z interfejsem Unity i programowania w języku C# na potrzeby tego środowiska.

Taka podstawowa wiedza jest niezbędna, ale też ogólnie dostępna - zakładam więc, że książkę tę przeczytają osoby, które chcą się nauczyć czegoś, o czym jeszcze niewiele powiedziano po polsku.

Dzięki książce tej:

Dowiesz się, jak FMOD obsługuje dźwięk, traktując każdy plik jako moduł (module) umieszczany w zdarzeniach (events).

Nauczysz się zapętlania wybranych fragmentów muzyki w grze.

Dowiesz się, co to parametry i w jaki sposób możesz je wykorzystać z poziomu skryptów w Unity do kontrolowania muzyki.

Wykorzystasz wyzwalacze, czyli specjalne obiekty w grze, by zmieniać muzykę w zależności od tego, w jakim miejscu sceny znajdzie się postać gracza.

Z pomocą modułów multidźwiękowych, dodasz do muzyki losowe elementy.

Nauczysz się tworzyć snapshoty w celu tłumienia dźwięku, gdy zdrowie postaci gracza spadnie poniżej połowy.

Poznasz techniki adaptacji horyzontalnej i wertykalnej.

Wszystkie te elementy będziesz mógł wykorzystać potem w pracy z muzyką i dźwiękiem przy tworzeniu gry.

Uwaga techniczna na koniec – wszystkie lekcje opracowano na podstawie wersji Unity 2017 i FMOD 1.10.05.

Pliki do książki

Do książki tej przygotowałem materiały, które możesz ściągnąć, by samodzielnie wykonać ćwiczenia opisane w tej pracy.

To pliki MP3 z muzyką i jej elementami, które wykorzystamy w tym projekcie, a także paczka .unitypackage z gotową prostą sceną, wykorzystującą proste zasoby standardowe oferowane przez Unity, ponieważ sam przede wszystkim zajmuję się muzyką i FMODem, nie grafiką.

Jeśli zechcesz, możesz przygotować stosowną scenę samodzielnie.

LINK DOSTĘPNY W PEŁNEJ WERSJI

W plikach do tej książki znajdziesz katalogi oraz pliki:

Podstawowa muzyka - cztery pliki muzyczne, które wykorzystasz w rozdziale 3, oraz plik stingera.

Horizontal Layering - pliki muzyczne dla rozdziału o technice horyzontalnej.

Vertical Layering - pliki muzyczne dla rozdziału o technice wertykalnej.

fmod_book_V3.unitypackage - paczka projektu dla Unity z podstawową sceną, skryptami i prefabrykatami.

fmod_project_package.zip - gotowa paczka z projektem FMOD dla referencji. Powinieneś z niej korzystać tylko w momencie, jeśli utkniesz.

Uwaga: paczka z plikami nie zawiera dołączonych obiektów postaci i kamer - te możesz ściągnąć sam, ponieważ wykorzystałem standardowe zasoby Unity, oferowane za darmo przez Unity Technologies z poziomu edytora Unity.

2. Wprowadzenie do interfejsu FMOD

Nim zapoznamy się z zastosowaniem FMOD do nadawania muzyce w grze większej interaktywności, warto przyjrzeć się podstawowym elementom interfejsu programu FMOD.

Program FMOD to rodzaj middleware - choć na pierwszy rzut oka wygląda jak typowy program DAW (Digital Audio Workstation), to nie pełni tej roli samodzielnie: to znaczy, że nie eksportujemy z niego indywidualnie dźwięków, a pracujemy nad ich użyciem w silniku, w którym tworzymy grę.

Projekt w FMODzie integrujemy z projektem w silniku, na przykład w Unity i w ten sposób obydwa programy ze sobą ściśle współpracują.

Program FMOD można ściągnąć tutaj: https://www.fmod.com.

Najpierw musisz założyć konto. Po założeniu konta i zalogowaniu się na stronie FMOD, możesz przejść do podstrony Download - https://www.fmod.com/download.

Twoim oczom ukażę się podstrona z czterema zakładkami:

FMOD Studio - właściwy program FMOD.

Integrations - paczki integracyjne dla Unity i Unreal Engine.

Plugins - dodatkowe wtyczki.

Demos - przykładowy projekt, pokazujący zastosowanie FMODa.

Rysunek 2.1

Na razie interesuje Cię tylko zakładka FMOD Studio, gdzie znajdziesz program FMOD dla Twojego systemu operacyjnego. Wybierz odpowiednią wersję i ściągnij paczkę instalacyjną, klikając w odpowiedni, zielony przycisk Download.

Paczkę zainstaluj standardowo, jak to robisz z innymi paczkami instalacyjnymi w swoim systemie operacyjnym. Po pomyślnym zainstalowaniu programu, odnajdziesz jego ikonę w menu Start (Windows) lub w launchpadzie (MacOS). Kliknij ikonę programu FMOD, a ten się otworzy.

FMOD otwieramy osobno - jako osobny program, w którym pracujemy nad dźwiękiem i muzyką w naszej grze. Dopiero później "projekt" zapisujemy i integrujemy z grą tworzoną w Unity czy innym silniku. W miarę zapoznawania się z tą książką, wszystko stanie się jasne.

Po uruchomieniu programu, wyświetli się okno wyboru projektu, pokazane na rysunku 2.2.

Rysunek 2.2

Dla każdej gry, to znaczy dla każdego osobnego projektu Unity, tworzymy osobny projekt FMOD. Do projektu tego potem dodajemy dźwięki i muzykę, które edytujemy i integrujemy z naszą grą.

Aby utworzyć nowy projekt, kliknij przycisk New Project. Okno wyboru projektu zostanie zamknięte i zyskasz dostęp do pustych paneli. Zapisz projekt, klikając w menu głównym File | Save as….

Rysunek 2.3

Zapisz projekt w dowolnym wybranym przez siebie katalogu na dysku. Później projekt ten pod wybraną przez Ciebie w momencie zapisywania nazwą będzie widoczny w liście projektów w oknie otwierającym się po uruchomieniu projektu.

Musisz wiedzieć już teraz, że zapisanie projektu to jedno. Trzeba go również zintegrować z projektem w Unity, a także kompilować po każdej wprowadzonej zmianie. Tymi dwoma zagadnieniami zajmiemy się jednak później, już w ramach praktyki.

Rysunek 2.4

Rysunek 2.4 pokazuje podstawowy wygląd programu FMOD. Kolumna po lewej stronie zawiera trzy zakładki.

Zdarzenia, banki i zasoby

Rysunek 2.5

Oto, co kryje się pod tymi zakładkami:

Events - Lista wszystkich zdarzeń.

Banks - Lista katalogów (banków) plików, które są importowane do silnika gry.

Assets - Lista wszystkich zasobów, czyli wszystkich plików dźwiękowych.

Zakładki te reprezentują pewną podstawową logikę działania FMODa. Assets to zasoby, czyli wszystkie pliki dźwiękowe, które ładujemy do naszego projektu, wrzucając je do katalogu Audio Bin.

Events to inaczej zdarzenia - pomyśl o nich jak o mikro-projektach, jak te, które tworzysz w programach Reaper, FL Studio czy Cubase, do których ładujesz pliki dźwiękowe, tworzysz ścieżki i dodajesz efekty.

Zdarzenia to pewien "byt", na który składają się poszczególne pliki czy zestawy plików, zwane modułami. Z poziomu silnika gry, z pomocą komponentów Unity albo z poziomu skryptów, możemy wywoływać te poszczególne zdarzenia. Zdarzenie nie jest jednak tym samym co pojedynczy plik dźwiękowy. To dlatego, że zdarzenie może przechowywać wiele plików dźwiękowych, wywoływanych w różnych momentach gry, wraz z ich efektami takimi jak kompresory czy limitery. Jeden plik dźwiękowy to inaczej moduł. Moduł może być też wielodźwiękowy i zawierać kilka dźwięków.

Banks to banki plików. Każde zdarzenie musi zostać dołączone do jednego z banków, bowiem to te banki - niejako katalogi plików - są ładowane do gry. Jeśli zdarzenie nie zostanie przypisane do banku, nie będzie ono dostępne z poziomu edytora Unity, ani z poziomu samej gry. Możesz tworzyć własne banki dźwięków, które będą dostępne w Unity.

Zobaczmy teraz, gdzie umieszczasz pliki dźwiękowe.

Audio Bin

Z menu głównego wybierz Window | Audio Bin.

Rysunek 2.6

Otworzy to okno o tożsamej nazwie.

Rysunek 2.7

To okno Audio Bin, okno głównego katalogu plików. Możesz do tego okna przeciągać wszystkie pliki dźwiękowe, które chcesz wykorzystać w projekcie. Jak widzisz na rysunku 2.7, otwarta jest zakładka Assets. To ta sama zakładka, którą wcześniej widziałeś obok zakładek Events oraz Banks. Pewnie już się domyślasz, że do zakładki Assets we wcześniej omówionej kolumnie również możesz przeciągać pliki i nie musisz otwierać okna Audio Bin.

W Audio Bin, klikając prawym przyciskiem myszy, możesz tworzyć katalogi, dzięki którym uporządkujesz swoje pliki - przydaje się to przy większych projektach. Po zaznaczeniu plików i kliknięciu w błękitny obszar na dole Audio Bin lub na dole kolumny Assets możesz ustawić różne właściwości kodowania czy ładowania pliku do gry. Warto wiedzieć, że zasoby skompresowane są ładowane w skompresowanej postaci do pamięci, a dekompresowane przy odtworzeniu. Wymaga to większego zużycia CPU. Zasoby zdekompresowane są ładowane w całości do pamięci, ale nie potrzebują aż tyle CPU. W końcu zasoby strumieniowane są odtwarzane z dysku. Zasoby trwające dłużej niż 10 sekund automatycznie są ustawiane na strumieniowanie.

Rysunek 2.8

Kompresja i kodowanie odbywają się w momencie kompilowania projektu (gdy klikniesz File | Build).

Drugą zakładką w Audio Bin jest FMOD.io - to projekt firmy stojącej za FMODem, bank plików dźwiękowych, które możesz wyszukiwać i kupować na potrzeby swoich projektów. Jeśli posiadasz konto na FMOD.io, to tu w Audio Bin będziesz miał również dostęp do swojej biblioteki zakupionych plików.

Przeciągnij do okna Audio Bin dowolny plik dźwiękowy ze swojego dysku. Albo nawet któryś z plików dołączonych do tej książki.

Rysunek 2.9

Po jego przeciągnięciu, zobaczysz jego nazwę w oknie Audio Bin, jak na rysunku 2.9. Informacja #unused oznacza po prostu, że plik jeszcze nie został wykorzystany w żadnym zdarzeniu. Pliki możesz też załadować, wybierając File | Import Audio Files. Po załadowaniu plików w ten sposób, okno Audio Bin otworzy się automatycznie.

Rysunek 2.10

Umiesz już dodawać pliki dźwiękowe do projektu. Ruszajmy więc dalej.

Edytor zdarzeń

Pozostawiając okno Audio Bin otwartym, kliknij prawym przyciskiem myszy w kolumnie po lewej stronie FMODa, w zakładce Events.

Rysunek 2.11

Z rozwiniętego menu wybierz New Event | New 2D Event. Stworzy to nowe zdarzenie, które zobaczysz na liście w kolumnie po lewej. Na razie nie musisz zmieniać jego nazwy. Zamknij okno Audio Bin. Kliknij prawym przyciskiem myszy na nowo utworzone zdarzenie i z menu wybierz Assign to Bank | Master Bank.

Rysunek 2.12

W ten sposób przypiszesz zdarzenie do banku Master Bank. Musisz tak robić z każdym zdarzeniem - jeśli zdarzenie nie zostanie przypisane do banku, nie będzie widoczne w projekcie w Unity.

FMOD obsługuje dwa rodzaje zdarzeń - 2D oraz 3D. 2D to zdarzenia, które emitują dźwięk o stałym natężeniu bez względu na trójwymiarowość tego, co dzieje się w samej grze. Stosujemy je przede wszystkim do ścieżki muzycznej czy do dźwięków, które nie powinny się zmieniać w trójwymiarowej przestrzeni gry i powinny pozostać stałe.

Zdarzenia 3D reagują na trójwymiarowość świata. Takimi zdarzeniami mogą być dźwięki, które stają się głośniejsze w miarę zbliżania się gracza do ich źródła.

Innymi słowy, zdarzeniem 2D może być stała muzyka grająca w tle, natomiast zdarzeniem 3D może być dźwięk stopniowo zbliżającego się pojazdu.

Koniec darmowego fragmentu.