Wykorzystanie harmonicznych sferycznych do budowy złożonych scen dźwiękowych

16

Rozmawiałem dziś w pracy na temat poprawy modelowania akustyki pomieszczenia. Zasugerowano, że wydaje się, że niewiele zrobiono na ten temat, a tony zostały wykonane w grafice. Zasugerowano ponadto, że ponieważ dźwięk i światło są po prostu falami, możliwe jest użycie takich rzeczy, jak śledzenie promieni i radia, aby uzyskać dobre przybliżenie.

W tym momencie zacząłem myśleć o sferycznych harmonicznych, aby symulować to zachowanie. Można jednocześnie wykonywać odbicia w kształcie luster, a także rozpraszanie dźwięku modelowane jako odbicia rozproszone. Jako bonus dostaniesz także przeszkody blokujące przenoszenie dźwięku. Jedyny problem polegał na tym, jak radzić sobie z tłumieniem wielu częstotliwości. Z pewnością można to jednak modelować poprzez zastosowanie jakiejś formy transformacji w spektrum audio (FFT).

W każdym razie ktoś wie o jakichkolwiek artykułach na ten temat, zwłaszcza o tym, jak można by je wykonać w czasie rzeczywistym. Jeśli ktoś nie otrzyma porady lub przydatnych informacji ogólnych?

Goz
źródło
1
To przypomina mi niezależną grę Devil's Tuning Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (obejrzyj wideo, aby się dobrze poczuć!)
Ricket

Odpowiedzi:

5

Tak, to dobry pomysł. Malham napisał już na ten temat artykuł oparty na kilku komentarzach Menziesa (z 1999 roku!).

Zwróć też uwagę na tezę MASc'a Nosala dotyczącą wykorzystania radia do akustyki.

Jeśli chodzi o oświetlenie (które wykonuje 3 zestawy funkcji, jeden dla R, jeden dla G, jeden dla B), musisz wykonać inny „zestaw” funkcji SH dla każdego szorstkiego pasma częstotliwości, które chcesz reprezentować (powiedzmy jeden dla niska częstotliwość, 60 Hz - 1 kHz, jeden dla średnich 1 kHz - 2 kHz, jeden dla wysokich 10 kHz - 20 kHz itp.). Niech wszystko poniżej 60 Hz przejdzie przez wszystko (co jest właściwie tym, co dźwięk robi w prawdziwym życiu)

Trzeba będzie jednak modelować możliwości odbicia akustycznego każdego materiału, tak jak każdy oświetlony materiał reaguje inaczej na RGB.

Bobobobo
źródło
3

Brzmi jak interesujący problem, choć zastanawiam się, ile dokładności będziesz potrzebować, zanim ludzie po prostu nie będą w stanie powiedzieć. W każdym razie ta odpowiedź koncentruje się na części „w czasie rzeczywistym”, ale nie znam żadnych dokumentów, ponieważ nie jest to coś, co badałem.

Oczywiście jeśli chcesz to dokładnie obliczyć w czasie rzeczywistym, korzystając z mobilnych źródeł dźwięku, obliczenie odbicia byłoby najszybsze przy użyciu karty graficznej. Na przykład, jeśli masz uproszczoną wersję świata działającą jednocześnie, możesz użyć jej do renderowania „wzorów odbicia” na teksturze lub mapie kubatury i wywnioskować z tej tekstury, w jaki sposób powinieneś generować dźwięk. Dźwięki (lub osobne pasma częstotliwości dźwięków) w tym modelu byłyby punktowymi źródłami światła. Przy tylko podstawowych odbiciach (1 odbicie) może się okazać, że i tak nie potrzebujesz już więcej dokładności, a powinno to być bardzo szybkie, szczególnie przy uproszczonej geometrii i zmniejszonej rozdzielczości. Nie jestem jednak całkowicie pewien, czy występują problemy z wydajnością wielu scen na jednej karcie graficznej.

Wchodząc dalej w obszary, o których niewiele wiem, drzewo BSP wydaje się być przydatne w przypadku fal, które wyginają się w rogach, ponieważ (myślę) definiują objętości i ich połączenia z innymi woluminami.

W zależności od sytuacji dalszą optymalizacją byłoby buforowanie wyników powyższych testów. Na przykład przechowywanie mapy dźwięków, która może być obracana w oparciu o orientację gracza, ale nie do końca przeliczona, lub kilka map w kształcie kostki, między którymi można interpolować w zależności od pozycji gracza.

Toeofdoom
źródło
Uderza mnie jednak to, że można uzyskać odbicia lustrzane i rozproszone, a także „wyginanie się za rogami” i zasłanianie, za darmo w pewnym sensie za pomocą harmonicznych sferycznych…
Goz
Ok, po faktycznym zrozumieniu, czym są harmoniczne sferyczne i jak się one odnoszą, sekcja karty graficznej (paragraf 2) jest dość nieistotna. Trochę o drzewie BSP może być nadal przydatna, zakładając, że masz dość trzecią osobę / pierwszą osobę grę, ponieważ jest to na ogół uproszczona geometria poziomu. (podobny do „wykresu sąsiedztwa komórki” w artykule AShelly linked). Ponowne obliczenie każdej klatki może również zaoszczędzić trochę przetwarzania.
Toeofdoom
2

Tak naprawdę nie próbowałem tego, ale zawsze zastanawiałem się, czy do audio można zastosować takie podejście, jak głośność propagacji światła. W niewielkich objętościach propagacyjnych stosuje się małą teksturę 3D (wydaje mi się, że 32x32x32), w której odbicia światła i okluzje są symulowane przez powódź wypełniającą teksturę 3d. Ponieważ wykorzystuje harmoniczne sferyczne, może to zrobić również z dźwiękiem. Jednak nie jestem ekspertem od dźwięku

Sander van Rossen
źródło
2

Program grafiki komputerowej Douga Jamesa z Cornell wykonał wiele pracy w zakresie dokładnego modelowania dźwięków w środowisku. Jednak większość jego prac dotyczy konkretnych przypadków generatorów dźwięku (cienkich powłok, płomieni itp.). Prawdopodobnie nie są one również wystarczająco wydajne, aby wykonywać je w czasie rzeczywistym wraz z innymi zadaniami, które musi wykonać Twoja gra.

Jednak może się przydać, aby przeczytać niektóre z nich. Może dać ci pomysły na to, jak postępować i / lub zmodyfikować jego podejście, aby było bardziej brutalne, ale wystarczająco wydajne, aby zapewnić wydajność w czasie rzeczywistym.

Jego strona jest tutaj:

http://www.cs.cornell.edu/~djames/

Szczególnie interesujące mogą być jego artykuły „Harmonic Fluids” i „Harmonic Shells”.

coderunner
źródło
1

Zastanowiłem się nad tym. Czułem, że główną troską (pod względem realizmu / kompromisu wydajności) było to, że przestrzennie twoje uszy są gorsze od twoich oczu - i całkiem łatwo akceptuję coś, co może nie być tak realistyczne, jak twoje oczy by potrzebowały. Istnieje bardzo duża szansa, że ​​próba idealnego modelowania dźwięku w lokalnym środowisku jest przesada - EAX jest prawdopodobnie „wystarczająco dobry”.

W zamkniętym środowisku (np. Quake) najpierw obliczyłem dwie właściwości każdego pokoju: „przeniesienie” i zanurzenie:

Przeniesienie wskazywałoby, w jaki sposób dźwięk wpływałby na poruszanie się po tym pokoju i najprawdopodobniej liczyłoby się do korektora parametrycznego (idealnie dodałbyś echo / pogłos z każdego pokoju, ale twój układ EAX może nie mieć tak dużej przepustowości). Korektor parametryczny ostatecznie symulowałby również tłumienie dźwięku.

Zanurzenie obliczono by przez podzielenie pokoju na dziewięć kostek (być może nawet jedna może być wystarczająca) i obliczenie lokalnych właściwości dźwięku z tej perspektywy. Te parametry byłyby używane w środowisku EAX.

Na koniec każdy z twoich pokoi będzie połączony grafem, gdzie każdy punkt na wykresie to portale łączące każdy pokój.

Gdy dźwięk się uruchomi, wypełniasz powódź (bez wyszukiwania A *) i śledzisz przeniesienie i przebytą odległość. Kiedy dźwięk dociera do odtwarzacza, ustawisz go w kolejce, aby zagrać w pewnym momencie w przyszłości; na podstawie przebytej odległości. Możesz śledzić liczbę przekazanych punktów wykresu i ostatecznie „wyciszyć” dźwięk (innymi słowy, ciągłe zalewanie). Może być konieczne użycie CUDA, ponieważ może to spowodować powiązanie procesora.

Podczas odtwarzania dźwięku należy użyć interfejsu API dźwięku 3D (OpenAL) i umieścić go w portalu, przez który wszedł, a następnie dowiedzieć się, w której z dziewięciu kostek aktualnie znajduje się odtwarzacz, i zastosować to środowisko EAX.

Ciekawe jest to, że jeśli twoje środowisko jest wystarczająco złożone, otrzymasz bezpłatne „globalne” echa, a gracze zauważą dźwięk dochodzący z właściwego kierunku; a jeśli poprawisz środowisko EAX, mam nadzieję, że efekt byłby na tyle przekonujący, że mózg by to zaakceptował.

Jonathan Dickinson
źródło