Всем кажется, что звук в игре должен вести себя как в жизни: огибать препятствия, создавать отражения от стен, проходить через тонкие двери. В общем, вести себя как в реальном мире.
Но на самом деле ни один движок из коробки этого не может сделать.
Для этого аудиодизайнерам приходится выдумывать разные обходные манёвры. Например, вычислять путь звука по специальным алгоритмам, или раскидывать вокруг себя кучу лучей и смотреть, где они блокируются. А ещё есть предрассчитанная акустика, довольно любопытная штука, но бесполезная для процедурных миров. Я подробно про окклюзию звука в играх рассказывал в этом видео.
Из опыта работы моим любимым способом был способ комнат и порталов. Но это работало только с Wwise. Поэтому я несколько лет копил силы и написал-таки свою систему дифракции звука, которая работает в Unreal Engine с любым Metasound.
Я решил пойти по пути комнат (бокс с настройками акустики). Двери и окна - "порталы". Когда персонаж двигается по уровню, система 50 раз в секунду пускает лучи от камеры, находит путь звука через порталы и вокруг углов, и ставит виртуальный эмиттер звука туда, откуда звук должен прийти к игроку. UE5 думает, что звук играет из этого эмиттера - и автоматически делает правильную пространственную панораму. Чем больше звук огибает углов - тем сильнее фильтруются высокие частоты (6 дБ на октаву, как в физике). За стеной звук становится глухим и тихим. Через дверь - чуть приглушённым. По прямой - чистым. Всё это считается из реального угла дифракции. Но нельзя сигнал источника отделять от пространства, поэтому я написал процедурную реверберацию, которая считает RT60 из размеров помещения. Когда звук из одной комнаты долетает до другой, реверб сужается в узкий (stereo field) пучок и направляется из портала - как будто диффузное поле "вытекает" из двери. Отходишь далеко - реверб затухает вместе с сухим сигналом. Про эту концепцию я рассказал на схемах в этом подкасте (36:20): https://t.me/xssracademy/822
Post #488
1.03K