Использование сферических гармоник для построения сложных звуковых ландшафтов


16

Сегодня на работе у меня была дискуссия о том, как улучшить акустическое моделирование в помещении. Было высказано предположение, что по этому вопросу, по-видимому, было проделано очень мало работы, но в графике было сделано много тонн. Кроме того, было высказано предположение, что, поскольку звук и свет являются лишь формами волн, можно было бы использовать такие вещи, как трассировка лучей и радио, чтобы получить хорошее приближение.

В этот момент я начал думать о сферических гармониках, чтобы смоделировать это поведение. Вы можете одновременно выполнять зеркальные отражения, а также рассеяние звука, смоделированное как диффузные отражения. В качестве бонуса вы также получите препятствия, блокирующие передачу звука. Единственная проблема заключалась в том, как справиться с ослаблением нескольких частот. Конечно, это можно смоделировать, применив некоторую форму преобразования к звуковому спектру (FFT).

Во всяком случае, кто-нибудь знает какие-либо документы на эту тему, особенно о том, как это будет выполняться в режиме реального времени. В противном случае кто-нибудь получил какой-либо совет или полезную общую информацию?


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

Ответы:


5

Да, это хорошая идея. Малхем уже написал статью на эту тему, основанную на некоторых комментариях Мензиса (еще в 1999 году!).

Также обратите внимание на магистерскую диссертацию Nosal, в которой обсуждается использование излучения для акустики.

Что касается освещения (которое выполняет 3 набора функций, один для R, один для G, один для B), вам нужно будет сделать разные «наборы» функций SH для каждой грубой полосы частот, которую вы хотите представить (скажем, один для низкая частота, 60 Гц-1 кГц, одна для середины 1 кГц-2 кГц, одна для высоких частот 10 кГц-20 кГц и т. д.). Пусть все, что ниже 60 Гц, проходит через все (что в значительной степени делает звук в реальной жизни)

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


3

Это звучит как интересная проблема, хотя мне интересно, сколько точности вам нужно, прежде чем люди просто не смогут сказать. В любом случае, этот ответ сфокусирован на части «в реальном времени», но я не знаю ни одной статьи, поскольку я не исследовал ее.

Очевидно, что если вы хотите точно рассчитать это в реальном времени с мобильными источниками звука, вычисление отражения будет самым быстрым с использованием видеокарты. Например, если у вас одновременно работает упрощенная версия мира, вы можете использовать ее для рендеринга «шаблонов отражения» в текстуру или кубическую карту и вывести из этой текстуры способ вывода звука. Звуки (или отдельные полосы частот звуков) в этой модели будут точечными источниками света. Только с базовыми (1 отскок) отражениями вы можете обнаружить, что вам в любом случае не нужна дополнительная точность, хотя это должно быть очень быстро, особенно с упрощенной геометрией и уменьшенным разрешением. Однако я не совсем уверен, есть ли проблемы с производительностью нескольких сцен на одной видеокарте.

Если вдаваться в области, о которых я мало знаю, дерево BSP кажется полезным для волн, огибающих углы, поскольку (я думаю) оно определяет объемы и их связи с другими объемами.

В зависимости от ситуации дальнейшая оптимизация будет заключаться в кэшировании результатов вышеуказанных тестов. Например, сохранение кубической карты звука, которую можно вращать в зависимости от ориентации игрока, но не полностью пересчитанной, или пару кубических карт, между которыми вы можете интерполировать информацию в зависимости от позиции игрока.


Меня поражает, что вы можете получить зеркальные и диффузные отражения, а также «изгибающиеся круглые углы» и окклюдеры для практически свободного использования сферических гармоник каким-либо образом ...
Гоз

Хорошо, после того, как мы действительно начали понимать, что такое сферические гармоники и как они применяются, раздел о видеокартах (параграф 2) не имеет значения. Немного о BSP-дереве все еще может быть полезно, если предположить, что у вас достаточно игры от третьего лица / от первого лица, так как это, как правило, упрощенная геометрия для уровня. (аналогично «графу смежности ячеек» в статье AShelly связанный). Не пересчет каждого кадра также может сэкономить некоторую обработку.
Toeofdoom

3

2

Я на самом деле не пробовал это, но я всегда задавался вопросом, можно ли использовать такой подход, как объемы распространения света, для аудио. В объемах распространения света используется небольшая 3d-текстура (я думаю, 32x32x32), в которой световые отскоки и окклюзии моделируются путем заливки 3d-текстуры. Поскольку он использует сферические гармоники, он может сделать это и со звуком. Я не аудио эксперт однако


2

Дуг Джеймс из программы компьютерной графики Корнелла проделал большую работу по точному моделированию звуков в окружающей среде. Тем не менее, большинство его работ посвящены конкретным случаям генераторов звука (тонкие объекты оболочки, пламя и т. Д.). Они также, вероятно, недостаточно эффективны, чтобы выполнять их в режиме реального времени вместе с другими задачами, которые должна выполнять ваша игра.

Тем не менее, вам может быть полезно прочитать некоторые из них. Это может дать вам идеи о том, как действовать и / или модифицировать его подходы, чтобы быть более грубым, но достаточно эффективным для работы в реальном времени.

Его сайт здесь:

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

Особый интерес могут представлять его работы «Гармонические жидкости» и «Гармонические оболочки».


1

Я также об этом подумал. Я чувствовал, что основной проблемой (с точки зрения компромисса между реализмом и производительностью) было то, что пространственно ваши уши уступают вашим глазам и довольно легко принимают то, что может быть не таким реалистичным, как ваши глаза. Существует очень хороший шанс, что попытка идеально моделировать звук в локальной среде является излишней - EAX, вероятно, «достаточно хорош».

В закрытой среде (например, Quake) я сначала вычислил бы два свойства для каждой комнаты: 'Transferrance' и погружение:

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

Погружение будет рассчитываться путем разделения комнаты на девять кубов (возможно, даже одного достаточно) и расчета локальных свойств звука с этой точки зрения. Эти параметры будут использоваться в среде EAX.

Наконец, каждая из ваших комнат будет соединена графом, где каждая точка на графике - это порталы, соединяющие каждую комнату.

Когда звук срабатывает, вы выполняете заливку (без поиска A *) и отслеживаете передачу и пройденное расстояние. Когда звук достигнет плеера, вы поставите его в очередь, чтобы воспроизвести его в будущем; на основе пройденного расстояния. Вы можете отслеживать количество пройденных точек графика и в конечном итоге «отбирать» звук (иными словами, непрерывное заполнение). Возможно, вам придется использовать CUDA, чтобы получить привязку к процессору.

Когда воспроизводится звук, вы используете API-интерфейс 3D-звука (OpenAL) и размещаете его на портале, через который он вошел, затем вы узнаете, в каком из девяти кубов находится игрок, и примените эту среду EAX.

Здесь важно то, что если ваша среда достаточно сложна, вы получите бесплатное «глобальное» эхо, и игроки будут воспринимать звук, идущий в правильном направлении; и если вы получите правильную среду EAX, надеюсь, эффект будет достаточно убедительным, чтобы мозг его принял.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.