Factorio Dev Diary #396 - Sound improvements in 2.0
Здравствуйте!
Сегодня мы рассмотрим (и послушаем!) многие улучшения звука, над которыми мы работали в версии 2.0.
Рабочие звуковые акценты
Звук, который издает сущность, когда она активна, обычно представляет собой одиночный повторяющийся основной звук. У некоторых сущностей могут быть звуки, которые воспроизводятся, когда они становятся активными или когда перестают работать и бездействуют. Кроме того, есть несколько свойств и модификаторов, которые можно использовать для более эффективного управления рабочими звуками. Но с одним зацикленным звуком можно творчески сделать очень многое, когда он должен работать во всех ситуациях.
Возможность синхронизировать звуки машины с ее анимацией занимала одно из первых мест в списке требуемых аудиофункций. Я придумал концепцию Звуковых акцентов . Более короткие звуки, которые воспроизводятся в определенном кадре определенной анимации. Изначально я ожидал, что машина получит два или три звуковых акцента, дополняющих основной звук, и на этом все. Но у Яна были другие идеи.
Начиная с литейного завода, помимо основного звука, есть двенадцать звуковых акцентов, подчеркивающих отдельные компоненты и участки анимации. И на этом он не остановился, теперь есть машины с еще более сложным звуковым набором. Возможно, мы покажем их позже, но сейчас вернемся к литейному цеху.
И рабочая звуковая визуализация: большая рамка представляет основной звук, меньшая — отдельные звуковые акценты.
Попытка ускорить или замедлить звук машины, чтобы он соответствовал скорости ее анимации (модули, маяки, малое энергопотребление) работает не очень хорошо (особенно замедление). Поэтому в 1.1 он используется редко и мы только ускоряем звуки, например звук парового двигателя работает так. Но наличие множества более коротких звуков, напрямую привязанных к конкретным кадрам анимации, естественным образом решает эту проблему.
Быстрый литейный цех
Очень медленный литейный цех
Несколько основных рабочих звуков
Теперь, когда у нас есть несколько звуков для одной машины в виде звуковых акцентов, можем ли мы сделать что-нибудь интересное, добавив несколько основных звуков? Как оказалось, да! Если мы объединим это с какими-то другими нашими трюками. В основном сопоставление активности, способность сопоставлять громкость звука или скорость воспроизведения со скоростью активности машины. Уровень активности — это способ, которым машина сообщает, насколько быстро она делает то, что она делает. Это может быть скорость автомобиля или что-то более креативное.
Давайте рассмотрим пару примеров с транспортными средствами, чтобы понять, что мы можем с ними сделать в версии 2.0.
В версии 1.1 у машины есть один основной звук, который воспроизводится тем быстрее, чем быстрее машина едет. Это полезно, но мы можем добиться большего. Давайте используем два звука: звук холостого хода и звук движения. По мере увеличения скорости автомобиля громкость звука холостого хода быстро уменьшается до полной тишины, в то же время громкость звука движения увеличивается от тишины до максимальной громкости. В какой-то момент высота звука движения также начинает увеличиваться, хотя она масштабируется, поэтому она не становится слишком высокой.
Танк получил такую же обработку, а также отдельный звук гусениц.
И, конечно, поезда не могли остаться позади. Сюда входят различные звуки, когда поезд движется по надземным рельсам.
Дополнительные звуки машины
Замечали ли вы разные звуки, когда машина проезжала по разным плиткам или ресурсам, или звуки, которые издавали двери грузовых вагонов в предыдущих видеороликах? Они не работают как рабочие звуки, поэтому нужен был другой подход.
Мы могли бы добавить специальную логику в обновление каждого объекта для обработки дополнительных звуков, и мы делали это для некоторых вещей в прошлом, например, артиллерийская башня имела звук вращения в логике обновления. Это нормально только до тех пор, пока количество объектов с дополнительной звуковой логикой очень мало, но становится неэффективным и расточительным, когда вы пытаетесь добавить звуки к объектам, которых много (например, горные буры и роботы).
Мы очень этого хотели, поэтому родилась новая система, креативно названная «Дополнительные звуки ». Множество старых и новых объектов уже используют преимущества этой системы, давайте взглянем на один из них, большой буровой станок (в прошлый раз, когда его показывали, у него были только звуки-заполнители).
Окружающие звуки
У нас было много идей для версии 1.0, которые на тот момент мы не смогли реализовать. У одного была более захватывающая окружающая система, а не просто один звук ветра. Я разработал систему ветра, которая воспроизводила разные дорожки ветра при увеличении масштаба камеры: одну, которая была довольно простой, а затем более интересную при уменьшении масштаба (с плавным затуханием между ними). Это привело к идее создания полупостоянной атмосферы: например, на Вулканусе вы можете услышать тихий звук далеких вулканов, с паузами различной длины.
А как насчет добавления более специфических звуков окружающей среды в зависимости от местоположения игрока? Для этого мы не могли использовать обычный для игровой индустрии подход с использованием триггерных блоков или заранее нарисованных регионов, потому что наши карты генерируются, а не создаются вручную. Поэтому нам пришла в голову идея добавлять звуки к тайлам и объектам в зависимости от конкретных условий.
Как только мы внедрили эту технологию, я начал добавлять такие звуки, как легкий плеск воды к водоемам и шелест листьев к деревьям. Затем я понял, что у нас могут быть невидимые существа, например, маленькие невраждебные инопланетные птицы на деревьях, которые играют только в том случае, если игрок находится в определенном радиусе деревьев, число которых превышает указанный порог. Между каждым звуком также есть случайная пауза. Развивая эту идею, мы можем указать, будут ли они воспроизводиться в зависимости от времени суток или уровня масштабирования камеры.
В следующий раз, когда вы будете поджигать лес, помните, что это может быть чей-то дом.
Другие улучшения звука
Звуки предметов
Когда мы выпустили версию 1.0, Коварекс сказал мне, что он хотел, чтобы в игре были звуки инвентаря, специфичные для предметов. В то время у нас был только один звук для перемещения предметов, и это было нормально, но, возможно, немного скучно и не давало никакой особой обратной связи. Он объяснил, что они должны быть чем-то похожи на звуки подключения и отключения проводов, и это помогло мне понять, что он имел в виду.
Методом проб и ошибок я выяснил, какие звуки можно сгруппировать (например, маленькие и большие металлические предметы), а какие должны быть уникальными. Некоторым требовалось больше итераций, чем другим, поскольку иногда было трудно понять, каким должен быть звук. Ведь что такое звук модуля Speed? В этом конкретном случае я использовал синтезаторный звук, поскольку он должен был быть абстрактным.
Расширенный контроль громкости
Было упомянуто, что окружающие звуки имеют больший контроль над своей громкостью. Когда это было сделано, Ян начал спрашивать, можно ли использовать это и для других звуков. Я не видел причин, почему бы и нет, поэтому взял все эти параметры и объединил их в дополнительные свойства регулировки громкости. Они позволили нам сделать некоторые изящные вещи.
Затухание в зависимости от расстояния можно изменить с линейного по умолчанию на более естественную экспоненциальную кривую. Существует также возможность логарифмической, косинусной или S-образной кривой или вообще никакого затухания, если вы хотите сделать что-то другое. Аналогичным образом мы можем изменить затухание звука в зависимости от уровня масштабирования. Можно указать порог темноты, чтобы определенные звуки воспроизводились только в ночное время. Последний инструмент в этом наборе инструментов — модификаторы динамического звука . Это позволяет нам изменять уровень звука только для конкретного игрового контекста. Могут быть динамические модификаторы громкости, которые применяются только при моделировании меню или в советах и подсказках, при вождении транспортного средства или когда поезд движется по надземным рельсам.
Агрегация звука
В определенных ситуациях одновременно может воспроизводиться множество звуков. Бой с множеством кусачих — типичный сценарий, атака кусачих и турелей издает много шума . Если бы не было жесткого ограничения на количество звуков, которые могут воспроизводиться в данный момент, это могло бы быстро превратиться в стену шума.
Агрегация звука — один из способов справиться с этой проблемой: если звук воспроизводится много раз, его экземпляры, превышающие определенный предел, можно отсеять или уменьшить их громкость. Эта система уже есть в версии 1.1, но ее можно использовать только для некоторых звуков в определенных сценариях. В версии 2.0 система была значительно улучшена, чтобы ее можно было использовать с большинством звуков, и был добавлен больший контроль над тем, какие звуки будут настраиваться. Благодаря этим изменениям звуковой ландшафт этих проблемных сценариев теперь находится под контролем.
Приоритет звука
С проблемой слишком большого количества звуков связано то, что иногда не хватает ресурсов для более важных звуков, например эффектов графического интерфейса или определенных действий игрока. Очевидным решением является введение системы приоритетов звуков, что мы и сделали. Для начала многим действиям игрока, таким как строительство, был присвоен более высокий приоритет, а некоторые резкие звуки были лишены приоритета.
Тестирование
Нам здесь нравятся тесты. Вскоре после того, как я начал работать над различными проблемами и функциями, связанными со звуком, я также начал создавать наш набор аудиотестов. Начнем с создания простой среды, позволяющей протестировать хотя бы базовые функции звука, например, проверить, воспроизводится ли звук в нужное время. Со временем пакет расширялся, охватывая существующие функции и исправления различных ошибок, а также совершенно новые функции (и исправления совершенно новых ошибок).
Наличие такого набора тестов оказалось чрезвычайно полезным при перепроектировании или расширении различных частей аудиосистемы, а также помогает убедиться, что эти надоедливые ошибки не проникнут обратно.
Музыка
Я уверен, что вы все хотите услышать о новой музыке, которая появится в Factorio: Space Age, но мы прибережем ее для будущего FFF, следите за обновлениями!
Все эти новые или улучшенные функции, за исключением пользовательской логики дополнительных звуков, доступны в прототипах, моддеры смогут использовать их так же, как это делаем мы сами.
Гари, я думаю, один из пяти лучших актёров в мире. Это невероятный актёр. Я был на съёмочной площадке, а он был в костюме Зорга, и мы говорили о шекспировской классике — «Гамлете». Он сказал: «Да, я играл Гамлета десять лет назад в Лондоне». Я спросил: «Но как ты можешь упомнить все три часа Гамлета?». Он сказал, что это не так уж трудно. Я говорю: «Но десять лет спустя ты помнишь хоть несколько строк?». Он отвечает: «Я помню всё». Я ему: «В каком смысле? Значит, если я скажу: „Акт 2. Сцена 3…“», и тут он просто начал читать Шекспира. В костюме Зорга посреди космического корабля.