Cекреты создания погодных явлений.
Погодные явления помогают игре выглядеть естественнее благодаря тому, что мы привыкли к ним в реальности. Они поддерживают атмосферу, работают на красоту окружающей среды и дополняют игровой процесс.
В этом тексте мы разберём основные подходы к реализации погоды в игровых мирах.
Самый простой и распространённый способ создать небо — это скайбокс. Скайбоксом обычно называют куб, в который как бы помещается игровой мир. Каждая грань этого куба — отдельная часть неба.
Пример скайбокса
По мнению художника Брайана Адамса, при создании скайбокса необходимо учитывать особенности времени суток; локацию, для которой делается скайбокс; её сюжет, эмоции, которые должна вызывать сцена; а также необходимые анимации.
Время суток и место действия помогают определить, как должно изменяться небо. Сюжет локации и необходимые эмоции определяют настроение скайбокса. А анимации делают его живее — например, в научно-фантастическом экшене вроде Halo или No Man’s Sky уместны пролетающие над игроком спутники или звездолёты.
Рельеф — ещё один важный элемент скайбокса. До некоторых образований вроде горных хребтов вдалеке игрок не сможет добраться, однако они помогают придать объём и масштаб локации.
Пример работы World Machine
Горные хребты — это часть так называемого «трёхмерного скайбокса». Он располагается между уровнем и двухмерным скайбоксом. Традиционно эти объекты детализированы не так хорошо, как весь остальной уровень, однако на расстоянии это не бросается в глаза.
Пример создания трёхмерного скайбокса можно увидеть в номерных Half-Life. В первой части в открытых локациях каньоны были частью двухмерного скайбокса и потому были плоскими — но после перехода на новый движок в Half-Life: Source они стали объёмными.
Half-Life (1998)
Half-Life: Source (2004)
А во второй части верхушка цитадели — это часть трёхмерного скайбокса, которая всё увеличивается в размерах по мере приближения игрока во второй половине игры.
Half-Life 2 (2004)
Скайбокс может иметь форму не только куба, но и сферы — например, как в World of Warcraft или Smite.
В Blizzard комбинируют классическую технику с техникой matte painting — скайбокс совмещает в себе реальное изображение и работу художников. Как правило, всё, что ниже горизонта на фото, обрезается, а на этом месте художники рисуют игровой мир.
Вот так фотография с крыши гаража превратилась в скайбокс
Амбициозный концепт вроде древнего города в джунглях или горящего космического корабля в небе может занять у 3D-художников тысячи рабочих часов; однако того же результата можно добиться с помощью matte painting на обычном холсте за пару недель.
художник Blizzard
Источник цитаты: https://80.lv/articles/how-to-create-skies-for-3d-games/
А в Playground Games при создании последних частей Forza Horizon разработали технологию, которая использует HDR-изображения. Благодаря более широкому диапазону значений по сравнению с обычными текстурами, HDRI позволяет расчитывать освещение прямо из текстуры. Чтобы создать небосвод, разработчикам нужно было всего лишь сделать множество фотографий в разное время суток и при разных погодных условиях.
Forza Horizon 4
Важную роль в хорошем скайбоксе играют облака — благодаря им небо выглядит естественнее. В прошлом облака запекались прямо в скайбокс, а двигались они за счёт скроллинга текстуры.
Сейчас всё больше игр склоняются в сторону объёмных облаков. Большой вклад в это внесли Guerilla Games, которые после работы над Horizon Zero Dawn внедрили в свой движок Decima целую систему Nubis для создания облаков.
Horizon Zero Dawn
Nubis создаёт облака в пять этапов. Сначала система определяет, где и какие облака нужно сгенерировать. Затем определяется плотность и форма будущего облака. После этого настраивается рассеивание и поглощение света облаками и, наконец, с помощью специального шейдера отображаются облака.
Для создания формы облаков разработчики использовали шум Перлина-Ворли. Как работает этот алгоритм, можно посмотреть здесь.
В Red Dead Redemption 2 с помощью трёхцветной RGB-текстуры и текстуры шума генерируется облачная карта размером с весь игровой мир — с учётом погоды и времени суток. Она задаёт параметры облачного покрова на плоскости, а затем с помощью градиентов облака приобретают объём — становятся слоистыми и кучевыми.
Облака в Red Dead Redemption 2 были шагом вперёд для Rockstar. В Grand Theft Auto V всё работало намного проще: двухмерные облака генерировались на основе шума Перлина прямо на поверхности купола, который окружал игровой мир.
Шум Перлина — математический алгоритм, который применяют для создания дыма, тумана, облаков и даже огня в трехмерной графике. А ещё с его помощью можно генерировать миры — мы писали об этом здесь.
Чаще всего осадки создают с помощью систем частиц, поведение которых зависит от их параметров — например, направления движения, скорости, цвета частицы или размера. В таком случае одна капля дождя — это одна частица.
Размер частиц может настраиваться с помощью кривой
Чтобы оптимизировать производительность, частицы часто привязывают к игровой камере. Так они создают видимость дождя и не нагружают систему.
Но реализовать осадки можно не только с помощью частиц — из-за их большого количества страдает производительность.
Альтернативный подход — отобразить осадки с помощью текстур. Количество капель не влияет на производительность такого «текстурного дождя». Себастьен Лагард, работавший в Dontnod, описал принцип работы дождя в Remember Me в своём блоге.
В игре перед камерой располагаются четыре «слоя» из текстур дождя. Эти текстуры накладываются на цилиндр и два конуса, внутри которых как бы находится игрок. Во время дождя фигуры движутся, и из-за наложения текстур создается иллюзия падения капель.
А с помощью вращения фигур создаётся ощущение ветреной погоды — капли будто падают под углом. Для третьего и четвёртого «слоя» также применили текстуры шумов, чтобы избежать повтора паттерна капель.
Слои дождя из Remember Me от самого близкого к игроку (слева) до самого дальнего.
А для того, чтобы показать всплески воды на поверхностях, из неба выпускается пучок лучей — в местах падения на земле создаются частицы с подходящей текстурой. Но только в пределах дальности зрения игрока — в целях оптимизации.
Когда форма объекта сложнее обычной плоскости, всплески создаются только на его ребрах — это выглядит не так естественно, но достаточно эффектно.
Для корректного создания всплесков с учётом сложной геометрии сначала создают карту глубин уровня с видом сверху. Затем на ней выбирают случайные места, в которых появляются всплески воды. Чтобы упростить работу художников, разработчики добавили тег для объектов, на которых не нужно создавать всплески — эти объекты не попадают на карту глубин.
Ещё один непростой аспект создания правдоподобного дождя — стекающие водные массы. Корректное стекание зависит от того, как расположена поверхность — горизонтально, вертикально или под углом. Для создания стекающих по балкону капель авторы Remember Me использовали сползающую текстуру с кубической картой низкого разрешения.
Кубическая карта (cubemap) используется в играх для создания иллюзии отражения — это текстура в виде куба, на каждой грани которого как бы нарисовано то, что должно на ней отражаться.
Пример работы кубической карты — на кубе в середине лишь текстура, а не настоящие отражения
А для создания стока воды с ребра объекта (например, какого-то навеса или карниза) в игре генерируется цилиндр на протяжении длины ребра, на котором падающие капли создаются в случайных точках.
Для того, чтобы сделать дождь более атмосферным, разработчики часто добавляют стекающие капли прямо на игровую камеру.
Важный элемент погружения в дождливой сцене — капли на объективе камеры, когда она направлена вверх. К реализации такого эффекта всегда подходят творчески.
Разработчик Dontnod Entertainment
Источник цитаты: https://www.fxguide.com/fxfeatured/game-environments-partb/
Самый простой способ добавить капли на объектив — создать систему частиц прямо перед камерой и затем привязать к её координатам.
Осадки часто оставляют на поверхности след. Например, земля покрывается снегом после снегопада, или же образуются лужи. В случае со снегом к поверхности применяют шейдеры на основе шума Перлина — как, например, в Overland.
https://twitter.com/OverlandGame/status/972668746094571522
Такие шейдеры могут создавать видимость постепенного «заснеживания» поверхности. В Days Gone оно происходит постепенно — от совсем сухой земли до образования небольших сугробов.
А разработчики The Signal From Tölva для накопления снега на сложной геометрии использовали шейдер, который основан на нормалях граней модели.
Нормаль — это вектор, перпендикулярный полигону. С помощью разницы между нормалью грани и направлением падающего снега шейдер определяет, как должен накапливаться снег на этой плоскости. Такой шейдер подходит для неплоских объектов — он «заснеживает» каждую грань по отдельности с помощью определения её нормали.
https://twitter.com/Olninyo/status/867756999114731520
Для создания правдоподобной деформации снега в случае с природным ландшафтом обычно используют тесселяцию DirectX — процесс автоматического дополнения полигональной сетки. Но разработчикам Batman: Arkham Origins такой способ не подошёл — в Готэме мало естественных пространств и высокая плотность застройки. К тому же, постоянное создание новых полигонов с помощью DirectX ударило бы по производительности игры на консолях.
Вместо «физического» продавливания снега разработчики заменяют текстуру материала там, где давят на поверхность.
Сначала определяется активная зона, — то есть та, где находятся объекты, которые могут влиять на форму снега. На ней от поверхности крыши до лодыжек персонажей на снегу создаётся усечённая призма — зона, в рамках которой происходит деформация снега.
GDC 2014
Изначально карта высот полностью чёрная, затем все объекты, которые оставляют след на снегу, рендерятся на ней белым цветом. После этого снег деформируется согласно карте — в местах, помеченных белым. Деформация происходит с применением шейдеров, а на «придавленные» зоны снега накладывается специальный материал.
GDC 2014
И хотя такой подход позволяет выиграть в производительности, в детализации он проигрывает традиционной тесселяции DirectX, так что в версии для ПК применяется именно она Подробно разработчики из WB Games Montreal описали весь процесс в презентации с GDC 2014.
В реальном мире радуга — это результат преломления солнечных лучей после прохождения через капли дождя или тумана. Раньше её помещали на уровни в виде текстур и справйтов, но современных играх она иногда появляется благодаря проработанным технологиями рассеивания света.
Например, в Red Dead Redemption 2 разработчикам не нужно контролировать места, в которых возникает радуга — продвинутая система частиц сама формирует её в зависимости от погоды и положения Солнца и даже Луны. Из-за этого в игре можно встретить в том числе двойную радугу.
Двойная радуга в Red Dead Redemption 2
Ещё одно погодное явление, которое возникает из-за круговорота воды — туман. Раньше разработчики часто использовали его, чтобы сократить требуемое для отрисовки пространство и тем самым увеличить производительность. Самый яркий пример — серия Silent Hill, где туман стал главной «фишкой».
На заре 3D разработчики пытались создать иллюзию тумана с помощью нагромождения полупрозрачных спрайтов, но в современных ААА-играх туман стал объёмным. В той же Red Dead Redemption 2 туман генерируется схоже с облаками — с помощью текстуры шума создается двухканальная карта, согласно которой частицы тумана располагаются на карте.
Благодаря продвинутому рассеиванию в Red Dead Redemption 2 утренний туман на водоёмах со временем исчезает
В некоторых ААА-играх большая роль уделяется симуляции ветра. В недавней Ghost of Tsushima ветер заменил привычные маршруты к «маркеру» цели, а в The Legend of Zelda: Breath of the Wild с помощью восходящих потоков можно преодолевать большие расстояния на планёре.
Just Cause 4 во многом построена на симуляции экстремальных погодных явлений, в том числе торнадо. Разработчики хотели создать симуляцию ветряных потоков по всему открытому миру и ещё на этапе препродакшена столкнулись с проблемой. Количество активных физических объектов и их столкновений сильно влияет на общую производительность игры.
Проблема с ветром в том, что его присутствие по всему открытому миру затрагивает все физические объекты в игре — и каждый из них считается активным, то есть нагружает систему. Решение Avalanche — ограничиться «лёгким ветерком» по всей карте и мощными потоками в местах, где количество физических объектов сведено к минимуму.
Такое ограничение не помешало добавить «гуляющий» по карте торнадо, который по определению должен сметать все объекты в радиусе действия. Ураган в игре представляет собой набор цилиндров, центры которых привязаны к кривой посередине. Поведение кривой само по себе напоминает деформацию торнадо, а цилиндры со специальным шейдером добавляют ему объёма.
Сплайн торнадо в игре состоит из двух сплайнов поменьше. К первому относятся точки 0-3, ко второму — 4-7.
Основной способ передвижения в Just Cause 4 — вингсьют главного героя. Для того, чтобы сделать перемещение от одной точки интереса к другой проще и интуитивнее, разработчики создали воздушные туннели, которые направляют игрока в полёте.
В ходе тестов оказалось, что поворачивать игрока боковыми потоками не очень удобно, так что в основном туннели идут по прямой. По большей части они толкают игрока вперёд сонаправленными потоками, замедляют противоположно направленными и меняют его высоту вертикальными потоками ветра.
Разработчики God Of War (2018) применили другой подход. Потоки ветра в игре условно разделили на статический, динамический и противодействующий.
Статический поток влияет на всю сцену и меняется со временем и при передвижении игрока. Для его создания разработчики использовали текстуры шумов, от которых и зависит его изменение.
Динамический поток постоянно окружает игрока и основан на симуляции жидкости. Он меняется только при перемещении игрока.
А противодействующий ветер используется в игре, чтобы симулировать влияние ветра на движущиеся объекты. Он всегда направлен против их движения. Но в случае, если направления движения игрока, статического и динамического ветра совпадают, противодействующий ветер отсутствует.