Сегодня на работе у меня была дискуссия о том, как улучшить акустическое моделирование в помещении. Было высказано предположение, что по этому вопросу, по-видимому, было проделано очень мало работы, но в графике было сделано много тонн. Кроме того, было высказано предположение, что, поскольку звук и свет являются лишь формами волн, можно было бы использовать такие вещи, как трассировка лучей и радио, чтобы получить хорошее приближение.
В этот момент я начал думать о сферических гармониках, чтобы смоделировать это поведение. Вы можете одновременно выполнять зеркальные отражения, а также рассеяние звука, смоделированное как диффузные отражения. В качестве бонуса вы также получите препятствия, блокирующие передачу звука. Единственная проблема заключалась в том, как справиться с ослаблением нескольких частот. Конечно, это можно смоделировать, применив некоторую форму преобразования к звуковому спектру (FFT).
Во всяком случае, кто-нибудь знает какие-либо документы на эту тему, особенно о том, как это будет выполняться в режиме реального времени. В противном случае кто-нибудь получил какой-либо совет или полезную общую информацию?
Ответы:
Да, это хорошая идея. Малхем уже написал статью на эту тему, основанную на некоторых комментариях Мензиса (еще в 1999 году!).
Также обратите внимание на магистерскую диссертацию Nosal, в которой обсуждается использование излучения для акустики.
Что касается освещения (которое выполняет 3 набора функций, один для R, один для G, один для B), вам нужно будет сделать разные «наборы» функций SH для каждой грубой полосы частот, которую вы хотите представить (скажем, один для низкая частота, 60 Гц-1 кГц, одна для середины 1 кГц-2 кГц, одна для высоких частот 10 кГц-20 кГц и т. д.). Пусть все, что ниже 60 Гц, проходит через все (что в значительной степени делает звук в реальной жизни)
Однако вам необходимо смоделировать возможности акустического отражения каждого материала, так как каждый из освещенных материалов по-разному реагирует на RGB.
источник
Это звучит как интересная проблема, хотя мне интересно, сколько точности вам нужно, прежде чем люди просто не смогут сказать. В любом случае, этот ответ сфокусирован на части «в реальном времени», но я не знаю ни одной статьи, поскольку я не исследовал ее.
Очевидно, что если вы хотите точно рассчитать это в реальном времени с мобильными источниками звука, вычисление отражения будет самым быстрым с использованием видеокарты. Например, если у вас одновременно работает упрощенная версия мира, вы можете использовать ее для рендеринга «шаблонов отражения» в текстуру или кубическую карту и вывести из этой текстуры способ вывода звука. Звуки (или отдельные полосы частот звуков) в этой модели будут точечными источниками света. Только с базовыми (1 отскок) отражениями вы можете обнаружить, что вам в любом случае не нужна дополнительная точность, хотя это должно быть очень быстро, особенно с упрощенной геометрией и уменьшенным разрешением. Однако я не совсем уверен, есть ли проблемы с производительностью нескольких сцен на одной видеокарте.
Если вдаваться в области, о которых я мало знаю, дерево BSP кажется полезным для волн, огибающих углы, поскольку (я думаю) оно определяет объемы и их связи с другими объемами.
В зависимости от ситуации дальнейшая оптимизация будет заключаться в кэшировании результатов вышеуказанных тестов. Например, сохранение кубической карты звука, которую можно вращать в зависимости от ориентации игрока, но не полностью пересчитанной, или пару кубических карт, между которыми вы можете интерполировать информацию в зависимости от позиции игрока.
источник
Я видел разговор на GDC об этом 6 или 7 лет назад. Возможно, это: геометрическое моделирование распространения звука в 3D играх .
Другие от того же автора:
источник
Я на самом деле не пробовал это, но я всегда задавался вопросом, можно ли использовать такой подход, как объемы распространения света, для аудио. В объемах распространения света используется небольшая 3d-текстура (я думаю, 32x32x32), в которой световые отскоки и окклюзии моделируются путем заливки 3d-текстуры. Поскольку он использует сферические гармоники, он может сделать это и со звуком. Я не аудио эксперт однако
источник
Дуг Джеймс из программы компьютерной графики Корнелла проделал большую работу по точному моделированию звуков в окружающей среде. Тем не менее, большинство его работ посвящены конкретным случаям генераторов звука (тонкие объекты оболочки, пламя и т. Д.). Они также, вероятно, недостаточно эффективны, чтобы выполнять их в режиме реального времени вместе с другими задачами, которые должна выполнять ваша игра.
Тем не менее, вам может быть полезно прочитать некоторые из них. Это может дать вам идеи о том, как действовать и / или модифицировать его подходы, чтобы быть более грубым, но достаточно эффективным для работы в реальном времени.
Его сайт здесь:
http://www.cs.cornell.edu/~djames/
Особый интерес могут представлять его работы «Гармонические жидкости» и «Гармонические оболочки».
источник
Я также об этом подумал. Я чувствовал, что основной проблемой (с точки зрения компромисса между реализмом и производительностью) было то, что пространственно ваши уши уступают вашим глазам и довольно легко принимают то, что может быть не таким реалистичным, как ваши глаза. Существует очень хороший шанс, что попытка идеально моделировать звук в локальной среде является излишней - EAX, вероятно, «достаточно хорош».
В закрытой среде (например, Quake) я сначала вычислил бы два свойства для каждой комнаты: 'Transferrance' и погружение:
Transferrance будет указывать на то, как звук будет влиять при прохождении через эту комнату, и, скорее всего, будет учитываться в параметрическом эквалайзере (в идеале вы должны добавить эхо / реверберацию из каждой комнаты, но ваша микросхема EAX может не иметь такой большой полосы пропускания). Параметрический эквалайзер также в конечном итоге имитирует затухание звука.
Погружение будет рассчитываться путем разделения комнаты на девять кубов (возможно, даже одного достаточно) и расчета локальных свойств звука с этой точки зрения. Эти параметры будут использоваться в среде EAX.
Наконец, каждая из ваших комнат будет соединена графом, где каждая точка на графике - это порталы, соединяющие каждую комнату.
Когда звук срабатывает, вы выполняете заливку (без поиска A *) и отслеживаете передачу и пройденное расстояние. Когда звук достигнет плеера, вы поставите его в очередь, чтобы воспроизвести его в будущем; на основе пройденного расстояния. Вы можете отслеживать количество пройденных точек графика и в конечном итоге «отбирать» звук (иными словами, непрерывное заполнение). Возможно, вам придется использовать CUDA, чтобы получить привязку к процессору.
Когда воспроизводится звук, вы используете API-интерфейс 3D-звука (OpenAL) и размещаете его на портале, через который он вошел, затем вы узнаете, в каком из девяти кубов находится игрок, и примените эту среду EAX.
Здесь важно то, что если ваша среда достаточно сложна, вы получите бесплатное «глобальное» эхо, и игроки будут воспринимать звук, идущий в правильном направлении; и если вы получите правильную среду EAX, надеюсь, эффект будет достаточно убедительным, чтобы мозг его принял.
источник