Лееринг (или вертикальная реоркестровка) — одна из самых распространённых техник создания адаптивной музыки в видеоиграх. Она подразумевает разбиение композиций на отдельные слои, которые будут добавляться и вычитаться из музыкальной фактуры в зависимости от игровой ситуации. Чаще всего лееринг применяется чтобы увеличить интенсивность музыки в нужные игровые моменты. Я пойду немного дальше, и расскажу о применении этой техники для плавного переключения между двумя разными музыкальными композициями через промежуточные слои. В качестве примера я буду использовать маленькую игру 7 Layers of Summoning, сделанную нами на Global Game Jam 2016 за 48 часов.
Идея подхода состоит в том, что игровая музыка может адаптироваться в соответствии с балансом сил в соревновательной игре. Это можно использовать как музыкальную петлю обратной связи (это из гейм-дизайна, почитайте подробнее в этой статье) чтобы поощрить побеждающего игрока. Простыми словами, по ходу игры фоновая музыка может принимать мотивы, темы или иные черты, характерные для одной из сторон конфликта.
7 Layers of Summoning — это простой файтинг про финского шамана и демона, которые сражаются друг с другом. Игроки могут перемещать персонажей в горизонтальной плоскости и атаковать, последовательно выполняя нужную комбинацию действий. По ходу разработки мы решили сделать музыку индикатором состояния игры — музыкальная тема изменяется в зависимости от побеждающего персонажа и становится более интенсивной по мере наращивания преимущества. Оговорюсь, что с точки зрения гейм-дизайна решение оказалось провальным, не повторяйте наших ошибок. Вот полные версии тем персонажей с максимальным уровнем интенсивности, как они звучат перед непосредственной победой:
В начале раунда звучит “нулевой слой” — нейтральная композиция, содержащая элементы обеих тем. После успешной атаки игровой баланс смещается в сторону побеждающего персонажа и нулевой слой меняется первым слоем темы демона либо шамана соответственно. Следующая успешная атака добавляет ещё один слой музыкальной темы, а каждая пропущенная атака противника вычитает последний добавленный. Посмотрите, как это звучит в игре. Обратите внимание на то, как меняется фоновая музыка после каждого попадания:
Система спроектирована так, что ни нулевой слой, ни какие-либо слои темы персонажа не будут звучать одновременно с темой противоположного персонажа. Графическое представление музыкальной системы будет выглядеть следующим образом:
Лееринг неизбежно накладывает на композитора существенные ограничения: все элементы композиции должны создаваться в одном темпе, музыкальном размере и гармонии. Какие-то из этих ограничений иногда можно обойти, в конце поста я приведу несколько примеров. В условиях гейм джема мне было некогда думать о способах обхода ограничений, поэтому я шёл простым путём, следуя ряду несложных правил:
- Сочинять короткие музыкальные фрагменты с фиксированной длительностью около 30 секунд. Баланс сил постоянно меняется по ходу игры, значит игроки будут слышать динамически изменяющуюся музыку и не успеют устать от повторов одинаковых фрагментов.
- Темы должны быть написаны в одной тональности с одинаковой гармонией и темпом (в данном случае фа-минор, i-VII-i-iv, 130 bpm).
- Темы должны максимально различаться тембрально и ритмически — этим можно в какой-то степени нивелировать ограничения лееринга.
- Поскольку музыка служит индикатором баланса сил, каждый новый слой должен добавлять какой-то значимый элемент к общей музыкальной фактуре. Так, в обоих случаях второй и третий слои привносят заметные мелодические элементы и/или вокальные партии. Предвосхищая вопросы: для вокальных партий я использовал готовые фразы из пары библиотек от Soundiron, существенно изменяя их с помощью Celemony Melodyne.
- Очень важно, что вся работа будет производиться в одном и том же проекте в DAW. Для быстрого переключения между разными темами и слоями необходимо заранее настроить папки (folder tracks) и шины (buses) для каждого элемента системы.
Вот запись полного перехода от темы демона к теме шамана, каждое возможное состояние музыки в игре проходит свой полный цикл:
При сочинении музыки я допустил, серьёзную ошибку. Я начал процесс с создания темы шамана, затем занялся темой демона и только в самом конце начал объединять их элементы в нулевой слой. В итоге он получился скучным и невыразительным, и я не мог ничего с этим поделать, не внося изменения в уже готовые части системы. Поэтому при работе по этому методу условный нулевой слой нужно сочинять в первую очередь, а уже потом выводить из него темы противоборствующих сторон, особенно если их будет больше двух. Но я не был уверен, что успею написать адаптивный саундтрек за двое суток, поэтому подготовил тему шамана в качестве запасного плана — если бы мне не хватило времени, она стала бы статичной фоновой темой для всей игры.
Мы разобрались с музыкой 7 Layers of Summoning. Теперь подумаем, как можно развить описанную методику.
- Не обязательно писать темы в одной и той же гармонии, можно просто использовать общий гармонический фреймворк. Мы имеем дело с зацикленными музыкальным фрагментами, а значит точка условного начала музыкальной темы не играет большой роли. Например, тема A написана в миноре в гармонии i-VII-III-VI (предположим — Cm-Bb-Eb-Ab). Тогда тема B может быть написана в параллельном мажоре с использованием гармонии I-IV-vi-V (Eb-Ab-Cm-Bb), просто точка её начала сместится на середину темы А.
- И даже гармонический фреймворк можно сломать, если мы настроим квантизацию так, что переход на следующий слой будет возможен только со следующей музыкальной доли. Такой принцип работы — это основа движка Elias. Но это снижает быстроту реакции музыкальной системы на изменение состояния игры, то есть нивелирует важное преимущество лееринга как техники создания адаптивной музыки.
- Если темы разных сторон обязательно предполагают различный темп и/или музыкальный размер, можно сделать нулевой слой максимальной абстрактным и аморфным, лишённым выраженной ритмической структуры. После этого мы сможем добавлять ритмические партии и элементы при изменении состояния игры вне зависимости от текущей точки воспроизведения нулевого слоя. Если мне не изменяет память, что-то подобное было реализовано в саундтреке к Halo.
- Используя последовательное добавление и вычитание различных слоёв мы можем получить многоплановую и нелинейно развивающуюся музыкальную систему — например, изменять гармонию композиции под звучащей мелодией, а потом плавно подключать новую мелодию, соответствующую изменённой гармонии и т.п.