Використання сферичних гармонік для побудови складних звукових шкал


16

У мене сьогодні на роботі обговорювались питання щодо вдосконалення акустичного моделювання кімнат. Висловлювалося припущення, що, здається, було зроблено дуже мало роботи з цього питання, але в графіці виконано тонн. Крім того, було висловлено припущення, що як звук і світло є просто хвильовими формами, то можна використовувати такі речі, як трасування променів і радіо, щоб отримати гарне наближення.

У цей момент я почав думати про сферичні гармоніки, щоб імітувати цю поведінку. Ви можете одночасно робити дзеркально-ескізні відбиття, а також розсіювання звуку, що моделюються як дифузні відбиття. Як бонус ви також отримаєте перешкоди, що блокують передачу звуку. Єдина проблема полягала в тому, як керувати загасанням декількох частот. Безумовно, хоча це можна було б змоделювати, застосовуючи певну форму трансформації до аудіо-спектру (FFT).

У будь-якому разі хто-небудь знає якісь статті на цю тему, особливо про те, як це було б виконано в режимі реального часу. Якщо цього не було, хто-небудь отримав поради чи корисну загальну інформацію?


1
Це нагадує мені інді-гру Devil's Tuning Fork: indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html (подивіться відео, щоб добре відчути це!)
Ricket

Відповіді:


5

Так, це гарна ідея. Про це Малхем вже написав документ, який базувався на деяких коментарях Мензіса (ще в 1999 році!).

Також зверніть увагу на дисертацію MASc Носаля, яка обговорює використання радіовипромінювання для акустики.

Що стосується освітлення (яке виконує 3 набори функцій, одна для R, одна для G, одна для B), вам потрібно буде зробити інший "набір" функцій SH для кожної грубої смуги частот, яку ви хочете представляти (скажімо, для низька частота, 60Hz-1kHz, одна для середньої 1kHz-2kHz, друга для високих 10kHz-20kHz тощо). Нехай все, що нижче 60 ГГц, проходить все (що майже те, що звучить у реальному житті)

Однак вам потрібно буде моделювати можливості акустичного відображення кожного матеріалу так само, як і освітлені матеріали реагують на RGB по-різному.


3

Це звучить як цікава проблема, хоча мені цікаво, яка точність вам знадобиться, перш ніж люди просто не зможуть сказати. У будь-якому випадку ця відповідь зосереджена на частині "реального часу", але я не знаю жодної роботи, оскільки це не те, що я досліджував.

Очевидно, якщо ви хочете точно обчислити це в режимі реального часу, за допомогою мобільних джерел звуку, обчислення відображення було б найшвидшим за допомогою відеокарти. Наприклад, якщо у вас є одночасно запущена спрощена версія світу, ви можете використовувати її, щоб надати "візерунки відображення" текстурі або кубічній карті і зробити висновок з цієї текстури, як слід виводити звук. Звуки (або окремі смуги частот звуків) у цій моделі будуть точковими джерелами світла. Маючи лише основні (1 відскок) відображення, ви можете виявити, що вам більше не потрібна точність, хоча це має бути дуже швидким, особливо зі спрощеною геометрією та зменшеною роздільною здатністю. Я не зовсім впевнений, що на одній графічній карті є проблеми з роботою з декількома сценами.

Проникаючи далі в області, про які я мало знаю, дерево BSP здається, що воно може бути корисним для хвиль, які загинаються по кутах, оскільки (я думаю) воно визначає обсяги та їх зв’язки з іншими томами.

Залежно від ситуації, додатковою оптимізацією було б кешування результатів вищевказаних тестів. Наприклад, зберігання кубічної карти звуку, яку можна повертати на основі орієнтації гравців, але не перераховано повністю, або пару кубічних карт, які можна інтерполювати між собою на основі позиції гравця.


Мене вражає, що ви можете отримати дзеркальні та розсіяні відбиття, а також "вигини круглих кутів" та окклюдери - все це, майже, безкоштовно, використовуючи сферичні гармоніки деяким чином ...
Goz

Гаразд, після того, як насправді почав розуміти, що таке сферичні гармоніки та як вони застосовуються, розділ відеокарти (параграф 2) є абсолютно не має значення. Біт про дерево BSP все ще може бути корисним, якщо припустити, що у вас є досить третя людина / перша особа, оскільки це, як правило, спрощена геометрія для рівня. (аналогічно "графіку суміжності комірок" у роботі AShelly звязаний). Не перерахунок кожного кадру також може заощадити певну обробку.
Toeofdoom

3

2

Я насправді цього не пробував, але завжди замислювався про те, чи можна використовувати такий аудіозахист як звуковий простір. У об'ємах поширення світла використовується невелика 3d текстура (я вважаю, 32x32x32, я вважаю), в якій світло відскакує та оклюзії імітуються затопленням, що заповнює 3d текстуру. Оскільки він використовує сферичні гармоніки, він може це зробити і з аудіо. Однак я не є експертом з аудіо


2

Програма комп’ютерної графіки Дуга Джеймса з Корнелла зробила багато роботи в точному моделюванні звуків у навколишньому середовищі. Однак більшість його робіт стосується конкретних випадків генераторів звуку (предметів тонкої оболонки, полум'я тощо). Вони, мабуть, недостатньо ефективні для виконання в режимі реального часу разом з іншими завданнями, які має виконувати ваша гра.

Однак ви можете прочитати деякі з них для вас. Це може дати вам ідеї, як діяти та / або модифікувати його підходи, щоб бути більш жорсткими, але досить ефективними для виконання в реальному часі.

Його сайт тут:

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

Особливий інтерес можуть викликати його праці "Гармонічні рідини" та "Гармонічні оболонки".


1

Я також задумався над цим. Я відчув, що головне занепокоєння (з точки зору реалістичності / компромісу) було те, що просторово ваші вуха поступаються вашим очам - і досить легко прийняти те, що може бути не таким реалістичним, як потрібні ваші очі. Є дуже хороший шанс, що спроба ідеально моделювати звук в локальному середовищі є надмірною - EAX, ймовірно, "достатньо хороший".

У закритому середовищі (наприклад, Quake) я спершу обчислив би два властивості щодо кожної кімнати: «перенесення» та занурення:

Трансфер вказуватиме на те, як на звук впливатиме подорож по цій кімнаті, і, швидше за все, зараховуватиметься до параметричного EQ (в ідеалі ви додасте ехо / реверберацію з кожної кімнати, але ваш чіп EAX може не мати стільки пропускної здатності). Параметричний еквівалент також в кінцевому рахунку імітуватимуть ослаблення звуку.

Занурення було б обчислено діленням кімнати на дев'ять кубів (можливо, навіть просто один може бути досить хорошим) та обчислення локальних звукових властивостей з цієї точки зору. Ці параметри будуть використовуватися в середовищі EAX.

Нарешті, кожна з ваших кімнат буде з'єднана графіком, де кожна точка на графіку - це портали, що з'єднують кожну кімнату.

Коли спрацює звук, ви зробите заливку (не A * пошук) та слідкуйте за перенесенням та пройденою дистанцією. Коли звук досягне гравця, ви поставите його в чергу, щоб грати в якийсь момент майбутнього; виходячи з пройденої відстані. Ви можете відслідковувати кількість пройдених графів і, врешті-решт, 'зменшити' звук (іншими словами, безперервна заливка). Вам, можливо, доведеться використовувати CUDA для цього, оскільки це може пов'язати процесор.

Коли звук відтворюється, ви використовуєте 3D-звуковий API (OpenAL) і розміщуєте його на порталі, через який він входив, то ви дізнаєтеся, в якому з дев'яти кубів гравець знаходиться зараз, і застосуєте це середовище EAX.

Акуратне тут полягає в тому, що якщо ваше оточення досить складне, ви отримаєте безкоштовні «глобальні» відгомони, а гравці сприйматимуть звук, що виходить з правильного напрямку; і якщо ви отримаєте правильне середовище EAX, сподіваємось, ефект був би досить переконливим, що мозок прийняв би це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.