Звук сцены
Последнее обновление: 3 апреля 2026 г.
Добавление звуковых сущностей
В нашем проприетарном игровом движке размещение звуков в сцене выполняется просто. Начните с создания пустой сущности (empty entity) в сцене.
После добавления сущности выберите её в иерархии сцены, чтобы открыть окно инспектора (Inspector Window). Если инспектор не появляется, включите его через Window > Inspector Window.
В инспекторе разверните выпадающий список Scripts и выберите Add New Script. В диалоговом окне выберите AmbientSoundEmitter, чтобы прикрепить скрипт излучателя звука к сущности.
Скрипт предоставляет несколько опций для управления воспроизведением:
| Свойство | Описание |
|---|---|
| Event Path | Путь к событию FMOD для звука, который будет проигрываться в сцене |
| Play On Startup | Если включено, звук проигрывается автоматически при загрузке сцены. Полезно для амбиентов или постоянных звуков |
| Is Static | Помечает излучатель как неподвижный. Статичные излучатели дешевле в обработке, поскольку движку не нужно динамически отслеживать их положение |
| Override Sound | Включает переопределения для определённых параметров FMOD, специфичных для 3D звуковых событий |
| Override Volume Multiplier | Регулирует громкость воспроизведения с помощью множителя. Используйте запятые (,) вместо точек (.) для десятичных значений |
| Override Max Distance | Задаёт пользовательское максимальное расстояние слышимости для события |
| Override Min Distance | Задаёт пользовательское минимальное расстояние слышимости для события |
| Is Master Sound | Помечает излучатель как главный звук (master sound), используется для глобального поведения микса |
| Is Master Suppressor | Когда активен внутри триггерного объёма, приглушает (уменьшает громкость) любых звуков, помеченных как master sound |
| Is Triggered | Настраивает излучатель как триггерный объём, проигрывающийся только когда слушатель входит в заданное пространство |
| Trigger Shape | Задаёт форму триггерного объёма (куб или сфера) |
Зоны реверберации
Тот же процесс применяется при добавлении зон реверберации в сцену. В FMOD реверберации являются событиями-снапшотами (snapshot events), которые могут запускаться через триггерные объёмы, так же как и обычные звуковые события.
Чтобы настроить одну из них:
- Создайте новую сущность в сцене
- Прикрепите скрипт AmbientSoundEmitter
- Введите путь к событию-снапшоту реверберации
- Включите Is Triggered
- Выберите подходящую форму триггера
- Измените размер объёма с помощью инструментов трансформации, чтобы охватить нужную область
Следующие пути событий-снапшотов доступны «из коробки». Вы также можете свободно создавать и добавлять свои собственные снапшоты и события-снапшоты.
event:/mission/ambient/reverb/alleyevent:/mission/ambient/reverb/cavesevent:/mission/ambient/reverb/courtyardevent:/mission/ambient/reverb/dungeonevent:/mission/ambient/reverb/forestevent:/mission/ambient/reverb/gatehouseevent:/mission/ambient/reverb/keepevent:/mission/ambient/reverb/stone_corridorevent:/mission/ambient/reverb/stone_interiorevent:/mission/ambient/reverb/valleyevent:/mission/ambient/reverb/wood_interior
Пути (Paths)
Пути (paths) — это маршруты, которые вы можете размещать в сцене, чтобы сущности следовали по ним. Это полезно, когда вы хотите, чтобы звуковой излучатель двигался по заданной траектории относительно слушателя — например, для имитации реки, протекающей мимо.
Создание пути
- Нажмите Add New Path на панели инструментов
- Присвойте пути имя
- Нажмите Add Component
- Разместите точки пути в сцене — они будут автоматически соединены по порядку
Чтобы прикрепить звуковой излучатель к пути, выберите сущность звукового излучателя, перейдите на вкладку Scripts, нажмите Add New Script и добавьте скрипт path_converger. Это позволяет сущности следовать по заданному пути.
Скрипт path_converger предоставляет несколько опций:
| Свойство | Описание |
|---|---|
| Path Name | Имя пути, по которому должен следовать излучатель. Должно точно совпадать с именем созданного вами пути |
| Rotate To Camera | Если включено, излучатель поворачивается лицом к камере слушателя по мере движения по пути |
| Apply Scale | Определяет, наследует ли излучатель трансформации масштабирования от пути |
Изменение трансформаций излучателя
Чтобы увидеть форму триггерного объёма звукового излучателя и его сферы минимального/максимального расстояния, вам нужно включить видимость Sound Entities. Если вкладка Visibility не отображается, откройте её через Window > Visibility Window.
На вкладке Visibility перейдите в Visibility Masks и отметьте флажок рядом с Sound Entities. Это включает отображение компонентов, связанных со звуком, в виде сцены. После включения триггерный объём (каркас куба или сферы) и две концентрические сферы расстояния, представляющие минимальный и максимальный диапазон слышимости, становятся видимыми прямо в сцене, что значительно облегчает точное позиционирование и изменение размера излучателей.
Добавление звуковых событий в клипы анимации
Чтобы прикрепить звуки к клипам анимации, откройте браузер ресурсов (Resource Browser) через Window > Show Resource Browser. Браузер ресурсов позволяет просматривать, фильтровать и искать ресурсы проекта.
Вы можете фильтровать по классу ресурса, чтобы сузить результаты. Если вы не уверены, где находится ресурс, используйте строку поиска — просто убедитесь, что вы ищете в правильной директории. Найдя клип анимации, выберите его, чтобы открыть инспектор клипа анимации (Animation Clip Inspector).
В инспекторе клипа анимации вы можете просматривать и настраивать все параметры, связанные с выбранным клипом. Для аудио сосредоточьтесь на параметрах, связанных со звуком:
| Свойство | Описание |
|---|---|
| Step Points | Значение по оси X определяет временное смещение в рамках клипа. По умолчанию установлено значение −1.00, если звук не прикреплён. Установите 0.00 или скорректируйте значение для синхронизации звука с анимацией |
| Sound Code | Путь к событию FMOD для прикрепления. Ввод корректного пути обеспечивает проигрывание звука в нужной точке временной шкалы анимации |
| Voice Code | Тип боевого голоса, прикрепляемый к анимации. См. встроенные типы ниже, или добавьте пользовательские типы, как описано в разделе Voice System |
Встроенные коды голоса:
| Voice Code |
|---|
| Grunt |
| Jump |
| Yell |
| Pain |
| Death |
| Stun |
| Fear |
| Climb |
| Focus |
| Debacle |
| Victory |
| HorseStop |
| HorseRally |
| Drown |
Флаги звука анимации:
| Флаг | Описание |
|---|---|
make_bodyfall_sound |
Запускает звук падения тела в этой точке анимации |
make_walk_sound |
Запускает звук шага в этой точке анимации |
do_not_keep_track_of_sound |
Останавливает отслеживание движком состояния воспроизведения звука |
attach_sound_to_agent |
Прикрепляет звук напрямую к агенту, а не к позиции в мире |
Добавление звуковых событий в частицы
Как и клипы анимации, ресурсы частиц доступны через браузер ресурсов. Отфильтруйте список ресурсов, чтобы показать только частицы, или используйте строку поиска, чтобы найти конкретную частицу в директории. Найдя нужную, дважды щёлкните по ней, чтобы открыть окно инспектора.
В инспекторе вы можете просматривать слои, LOD-уровни и параметры частицы. Перед прикреплением аудио убедитесь, что вы выбрали правильный слой (layer) и LOD частицы.
Имейте в виду: если эффект недостаточно силён визуально, чтобы оправдать рендеринг на более высоком LOD, он недостаточно силён и для звука. В таких случаях оставляйте аудио только на LOD 0.
После выбора правильного слоя и LOD откройте вкладку Sound:
| Свойство | Описание |
|---|---|
| Continuous sound | Используется для зацикленных звуков. Введите путь к событию FMOD зацикленного события |
| One shot sound | Используется для одноразового воспроизведения звуков. Введите путь к событию FMOD одноразового события |
| Size Parameter | Применяет множитель для переопределения размера 3D звукового события |
Квадрафонические амбиенты
Mount & Blade II: Bannerlord — требовательная к производительности игра. Добавление сотен 3D звуковых излучателей в сцены может быстро перегрузить CPU, память и дисковый ввод/вывод — особенно во время масштабных сражений с тысячами активных агентов. Чтобы сохранить погружение без ущерба для производительности, мы используем квадрафонические амбиенты.
Квадрафония — это формат четырёхканального окружающего звука, который создаёт иллюзию окружения множеством излучателей, фактически используя лишь четыре канала. Вместо того чтобы полагаться на встроенную квадросистему FMOD, мы реализовали собственный подход. Он немного сложнее в настройке, но после того, как вы его поймёте, он более гибкий, чем внутреннее решение FMOD.
Система порождает четыре 3D излучателя вокруг слушателя в фиксированных позициях: 0°, 90°, 180° и 270° относительно направления, в котором смотрит слушатель. Эти излучатели двигаются вместе с позицией слушателя, но расстояние до слушателя остаётся постоянным. По мере того как слушатель поворачивается, он непрерывно получает различные сигналы от окружающих излучателей — создавая иллюзию динамичной, меняющейся окружающей среды без необходимости в десятках независимых источников.
Настройка квадро-амбиентов
Сначала создайте стерео-событие амбиента (stereo ambient event). Это не опционально — оно служит запасным вариантом на случай, если настройка квадро не удалась или не найдена. Без него амбиент может отсутствовать во время игры.
Например, создайте 2D-событие с именем plains.
Далее создайте папку с таким же именем, что и стерео-событие (plains в этом примере). Это именование критически важно — система сопоставляет стерео-события с их квадро-альтернативами по имени. События внутри этой папки будут рассматриваться как квадро-каналы.
Внутри папки создайте четыре 3D-события с точными именами:
northeastsouthwest
Имена чувствительны к регистру и должны быть строчными. Порядок событий не имеет значения.
Для каждого из четырёх квадро-событий откройте Spatializer и отключите затухание по расстоянию (distance attenuation). Эти излучатели должны излучать постоянный сигнал независимо от расстояния до слушателя. Если затухание оставлено включённым, громкость может быть неправильно уменьшена в зависимости от настроек расстояния.
Наконец, вернитесь к стерео-событию (plains) и установите пользовательское свойство (User Property):
| Свойство | Значение |
|---|---|
isQuad |
True |
Этот флаг указывает системе искать соответствующую квадро-настройку. Если она найдена, проигрывается квадро-версия; если нет, в качестве запасного варианта проигрывается стерео-событие.
