Я також задумався над цим. Я відчув, що головне занепокоєння (з точки зору реалістичності / компромісу) було те, що просторово ваші вуха поступаються вашим очам - і досить легко прийняти те, що може бути не таким реалістичним, як потрібні ваші очі. Є дуже хороший шанс, що спроба ідеально моделювати звук в локальному середовищі є надмірною - EAX, ймовірно, "достатньо хороший".
У закритому середовищі (наприклад, Quake) я спершу обчислив би два властивості щодо кожної кімнати: «перенесення» та занурення:
Трансфер вказуватиме на те, як на звук впливатиме подорож по цій кімнаті, і, швидше за все, зараховуватиметься до параметричного EQ (в ідеалі ви додасте ехо / реверберацію з кожної кімнати, але ваш чіп EAX може не мати стільки пропускної здатності). Параметричний еквівалент також в кінцевому рахунку імітуватимуть ослаблення звуку.
Занурення було б обчислено діленням кімнати на дев'ять кубів (можливо, навіть просто один може бути досить хорошим) та обчислення локальних звукових властивостей з цієї точки зору. Ці параметри будуть використовуватися в середовищі EAX.
Нарешті, кожна з ваших кімнат буде з'єднана графіком, де кожна точка на графіку - це портали, що з'єднують кожну кімнату.
Коли спрацює звук, ви зробите заливку (не A * пошук) та слідкуйте за перенесенням та пройденою дистанцією. Коли звук досягне гравця, ви поставите його в чергу, щоб грати в якийсь момент майбутнього; виходячи з пройденої відстані. Ви можете відслідковувати кількість пройдених графів і, врешті-решт, 'зменшити' звук (іншими словами, безперервна заливка). Вам, можливо, доведеться використовувати CUDA для цього, оскільки це може пов'язати процесор.
Коли звук відтворюється, ви використовуєте 3D-звуковий API (OpenAL) і розміщуєте його на порталі, через який він входив, то ви дізнаєтеся, в якому з дев'яти кубів гравець знаходиться зараз, і застосуєте це середовище EAX.
Акуратне тут полягає в тому, що якщо ваше оточення досить складне, ви отримаєте безкоштовні «глобальні» відгомони, а гравці сприйматимуть звук, що виходить з правильного напрямку; і якщо ви отримаєте правильне середовище EAX, сподіваємось, ефект був би досить переконливим, що мозок прийняв би це.