Всем привет! Меня зовут Марко Аламия, и я работаю программистом в команде разработчиков Overwatch. Недавно мы закончили работу над новой технологией для Overwatch 2 и решили, что это отличный повод немного рассказать игрокам о том, как мы совершенствуем движок игры. Мне помогут два других разработчика Overwatch: Брюс Уилки и Фабиан Кристин.
Новая технология для движка игры называется «Состояния окружения», и она быстро стала нашим любимым аспектом процесса разработки и дизайна полей боя. Хотя эта функция разрабатывается и улучшается с помощью инструментария и движка Overwatch 2, ее суть зародилась в голове нашего талантливого художника по освещению Фабиана Кристина. Я попросил Фабиана рассказать, как он придумал эту идею, которая коренным образом изменила процесс создания полей боя, и рассказать поподробнее о процессе дизайна.
Давайте узнаем больше о состояниях окружения!
Презентация идеи
Фабиан: Действие Overwatch происходит в ярком и красочном мире, и значительная часть уникального стиля этой игры раскрывается с помощью полей боя. Процесс разработки поля боя начинают дизайнеры уровней, которые придумывают общую архитектуру: используя большие серые кубы, они стремятся создать все условия для увлекательного и сбалансированного игрового процесса. Основная цель на этом этапе — создать поле боя, на котором интересно играть! После многих часов тестирования в процесс включаются художники по декорациям. Их задача — превратить серые кубы в строения и объекты окружения, созданные вручную с огромным вниманием к деталям. Декорации наполнят жизнью поле боя, на которое потом отправятся игроки.
Помимо окружения мы работаем и над освещением, позволяющим создать на поле боя определенную атмосферу. Для Overwatch 2 мы хотели придумать интересные новые стили, полностью изменяющие впечатления от того или иного места. Представьте, что вы попали в Нумбани и увидели футуристический город, залитый теплым светом африканской вечерней зари. Или что приземлились в дождливом Париже, где каждый магазинчик сияет золотистой иллюминацией, приглашая вас переждать ненастье внутри и отведать круассанов.
Для этого и предназначены состояния окружения. С помощью этой передовой системы мы смогли разделить основные компоненты освещения, звукового сопровождения и эффектов на самостоятельные элементы, которые можно совмещать, словно детали конструктора, и создавать так называемые сценарии окружения. Мы можем использовать их сразу на нескольких полях боя, при этом на каждом может действовать несколько сценариев.
Для примера посмотрим на динамичное поле боя «Некрополь» для режима «Схватка». Вы наверняка играли на его ночной версии, где холодные синие тона хорошо контрастируют с ярким оранжевым светом зажженных повсюду факелов.
Но, допустим, нам захотелось поэкспериментировать с другим сценарием, и мы решили опробовать на этом поле знойную палитру пустыни из «Храма Анубиса». Благодаря новой системе состояний окружения, все, что нам нужно лишь взять окружение из «Храма Анубиса» и применить его к «Некрополю».
Уже выглядит отлично! Но мы можем сделать это место еще живописнее, сменив угол падения солнечных лучей и создав более выразительные тени. Для этого нам нужно создать новое состояние окружения, которое меняет только положение солнца, и установить эту новую «деталь конструктора» в состояние из «Храма Анубиса».
Готово!
Благодаря гибкости и простоте использования состояний окружения мы можем создавать прототипы нового освещения для полей боя за считанные часы. За счет скорости этого процесса мы можем больше экспериментировать, пользоваться огромным простором для творчества и делать все наши поля боя еще разнообразнее.
Но это не все! Мы уже продемонстрировали декоративное применение состояний окружения, однако их также можно динамически совмещать, создавая с их помощью новые увлекательные элементы игрового процесса. К примеру, представьте, что вы отправились на задание в «Некрополь» с целью восстановить соединение со спутником Overwatch, и пока вы отбиваетесь от войск «Нуль-сектора», к вам подкралась песчаная буря, полностью накрывающая все окрестности! Мы можем немного усложнить ваше задание, добавив новое состояние окружения «Песчаная буря» поверх сценария «Солнечная погода», которое будет постепенно заволакивать небо облаками и увеличивать плотность эффекта частиц песка.
С помощью новой технологии мы можем создавать разнообразные погодные условия: грозу, снегопад и другие сценарии окружения, делающие каждый матч непохожим на остальные.
А теперь давайте побеседуем с Марко и узнаем о том, как состояния окружения функционируют с технической точки зрения.
Создание состояний окружения
Марко: Идея Фабиана была очень амбициозной, поэтому нам понадобилось создать мощную систему, которая смогла бы осуществить наши задумки для окружения в Overwatch 2. Пораскинув мозгами, мы решили сделать так, чтобы несколько состояний окружения могли существовать одновременно в едином удобном массиве. Этот массив может динамически изменяться, и в любое время в него можно добавить какое-либо состояние окружения или убрать его. Самое интересное начинается, когда движок игры берет этот массив и смешивает все находящиеся в нем состояния окружения, чтобы придать декорациям окончательный вид. Эта процедура аналогична смешиванию нескольких слоев при создании конечного изображения в Photoshop.
Суть в том, что каждое состояние окружения может описывать какой-либо его аспект, например силу и направление ветра или цвет лучей солнца. Когда состояние добавляется в массив, конечный результат меняют только аспекты данного состояния. Например, вот массив для клуба Лусио в Рио-де-Жанейро, в который добавлено состояние окружения с элементами, изменяющими выдержку и цветовую градацию:
Базовое состояние окружения обеспечивает все элементы, необходимые для поля боя, а наложенное поверх него изменяет цветовую градацию и позволяет создать настораживающую и жутковатую атмосферу зоны из Diablo. Состояния окружения можно в реальном времени добавлять в массив и убирать их из него прямо посреди матча, благодаря чему поля боя становятся динамичными и красочными.
Аспекты
Под руководством команды художников и Фабиана мы определили ключевые аспекты, которые должны определяться состояниями окружения. Например, первой функцией движка игры, преобразованной в аспект, стала постобработка. Постобработка используется во всех современных движках. С помощью этой функции можно применять различные фильтры и эффекты, позволяющие задавать контраст, яркость и насыщенность окончательного изображения. Изменение контраста и яркости изображения в зависимости от того, что происходит в игре, позволяет сделать итоговое изображение красочнее и динамичнее, и благодаря технологии состояния окружения теперь эти возможности доступны в Overwatch 2.
Аспект тумана — также крайне полезный инструмент в новой системе. Изменяя его параметры, мы можем редактировать внешний вид тумана, что в свою очередь позволяет окружению графически адаптироваться к режиму игры, местонахождению игроков и даже времени. Например, мы можем придать полю боя жутковатую атмосферу на Хеллоуин, сделать туман густым только в определенной точке поля боя или создать эффект нарастающей песчаной бури в одном из новых заданий для героев.
У нас есть несколько аспектов, затрагивающих другие графические элементы, такие как отбрасываемые облаками тени, и даже скрытые от глаза показатели вроде силы и направления ветра. Два важнейших аспекта, которые мы можем менять, это параметры солнца и неба. Как вы уже догадались, они позволяют нам редактировать ключевые элементы окружения, такие как положение и цвет солнца, размеры скоплений и типы облаков, а также время суток. Как понимаете, это крайне полезная часть системы состояний окружения, поскольку благодаря ей мы можем существенно изменить внешний вид и условия игры на поле боя.
Эти два аспекта (солнце и небо) задействуют один из самых продвинутых элементов движка, систему освещения. Освещение крайне важно для Overwatch 2, поскольку с его помощью мы задаем стиль, атмосферу и общее настроение нашего окружения. Но любые изменения в этой системе могут повлиять на использование памяти и производительность, поэтому с нововведениями нужно экспериментировать очень осторожно. К счастью, в нашей команде работает замечательный инженер Брюс Уилки, обладающий огромным опытом работы с системами освещения. Он поможет нам создать отличную графику, при этом сохранив быстродействие Overwatch 2 на высоком уровне, достойном соревновательного шутера.
Освещение
Брюс: В создание яркой и красочной графики Overwatch вложен невероятный труд. Каждый раз, когда я играю на одном из наших прекрасных полей боя, я невольно вспоминаю, как много стараний потребовал каждый элемент освещения. Лучи солнца заливают светом комнаты, прожекторы освещают руины, а ночные фестивали играют яркими красками — и это лишь несколько примеров того, насколько велика роль освещения в создании визуального стиля и атмосферы игры. Разрабатывая движок для Overwatch, мы тесно взаимодействовали с командой художников, чтобы создать функции освещения, которые позволят воплотить двухмерные концепции в трехмерном мире. Среди его функций — отражение света от поверхностей (часто это называют глобальным освещением), отражение окружающего мира в металлических предметах и бесшовное освещение движущихся объектов в статичном окружении. Для этих функций требуется производить очень много вычислений, что приводит к слишком высокой нагрузке на процессор при той частоте смены кадров, которой мы хотели добиться с нашим движком. Чтобы в Overwatch можно было играть при высокой частоте смены кадров с использованием продвинутых технологий освещения, мы стремимся обрабатывать как можно больше данных освещения заранее, сжимать их, а затем добавлять в клиент игры.
Давайте рассмотрим данные, использующиеся в Overwatch для некоторых функций освещения. Для неподвижных объектов, таких как стены, полы и потолки, мы создаем несколько элементов данных. Первый из них передает движку информацию о том, сколько света попадает на поверхность и в каком направлении находится его источник. Обычно эти данные называются «карта освещения» — разные движки хранят в своих картах освещения разную информацию.
На этом изображении можно увидеть пример создания карт освещения для поверхностей на поле боя. Слева — окончательный вариант, совмещающий все источники света. В центре на поверхностях отрисована только разметка. Такой вид помогает нашим художникам убедиться, что для поверхностей хранится достаточное количество информации об освещении, чтобы конечный результат получился таким, как задумывалось. Справа — пример того, как движок сжимает несколько карт освещения для минимизации потребляемой ими памяти.
В только вышедшей версии Overwatch движок обрабатывал цвет и направление любого света, попадающего на поверхности. Данные о направлении используются для изменения свойств света, отражающегося от неровных поверхностей, — чем больше угол, под которым свет падает на поверхность, тем меньше цвета она получает. Для Overwatch 2 мы генерируем три направления освещения, что позволяет изменять каждый из трех цветовых каналов (красный, зеленый и синий) раздельно. Благодаря дополнительным направлениям мы можем делать освещение красочнее, что в свою очередь повышает качество изображения.
Для статичных объектов мы генерируем данные, передающие информацию о видимости его окружения. Обычно эти данные называются «затенение окружения». Мы начали использовать эти данные для нескольких полей боя, появившихся после выхода Overwatch, таких как «Париж» и «Гавана». В Overwatch 2 эти данные будут генерироваться для всех полей боя, что повысит качество графики.
Для движущихся объектов, таких как персонажи, мы создаем много точек-образцов в мире игры и привязываем к каждой из них данные об освещении, используя тот же самый тип данных, что и для неподвижных предметов. Когда движущийся объект приближается к одной из этих точек, он начинает использовать для освещения данные этой точки. В Overwatch 2 мы задействуем гораздо больше таких образцов, особенно в воздухе, поэтому движущиеся объекты будут выглядеть еще лучше.
Если вы смотрели трансляцию круглого стола на BlizzConline, вы уже могли видеть поля боя с несколькими различными типами освещения. Мы стремимся создать как можно больше данных для каждого типа освещения, чтобы минимизировать объем загрузок и требующееся место на диске. Технология состояний окружения позволяет движку сгруппировать несколько типов освещения для поля боя, вследствие чего значительная часть заранее вычисленных данных, о которых говорилось выше, может распространяться на все эти сгруппированные типы освещения. Это существенно уменьшает объем занимаемой памяти, так что игрокам потребуется загружать и устанавливать меньше данных для каждого варианта. Благодаря функции состояний окружения мы смогли повысить качество освещения, сделать его разнообразнее и уменьшить объем занимаемого места.
Функция состояний окружения позволит Overwatch 2 выглядеть еще динамичнее, повысит удобство рабочего процесса наших художников и поможет им создать для игроков поистине красочный мир. В Overwatch 2 вас ждут атмосферные приключения по всему миру с изменяющимся окружением и потрясающей графикой!