Как создают воду в играх?
Золотистые песочные пляжи с волнами и пеной, величественные коралловые рифы под толщей океана, завораживающие лесные озера и мирно текущие реки — лишь малая часть того, что можно встретить в играх. Вода — крайне ресурсозатратный, но при этом невероятно универсальный и мощный визуальный инструмент, а также пространство для различных механик.
Плоскость волнуется — раз
Еще на зарождении игровой индустрии вода появлялась как отдельный игровой уровень или часть заднего плана. Если мы говорим про самые первые платформеры, то в них подводные локации создавались с помощью синего фона, на котором видно дно и временами появляющиеся пузырьки воздуха.
Для еще большего погружения менялась физика. Персонаж на таких уровнях мог свободно двигаться во всех направлениях, будто он плывет, и его перемещение становилось более плавным, словно жидкость мешала ему. Врагов же с земных или воздушных заменяли на водных обитателей.
Заметное улучшение визуального качества воды произошло с приходом Super Nintendo Entertainment System. На этой консоли можно было добиться эффекта прозрачности, задавая необходимые значения во время сборки игры. Таким образом разработчики создавали очень красочные водоемы.
В современных 2D играх вода зачастую также является просто частью фона, но с добавлением различных эффектов и частиц — брызг, небольших волн и пузырьков воздуха. Но есть проекты, в которых вода ведет себя достаточно реалистично. Например, в Terraria жидкости могут перераспределяться по соседним клеткам. Это реализовано с помощью алгоритма, имитирующего сообщающиеся сосуды: игра стремится выровнять уровни между соседними клетками. Сначала жидкость стремится вниз, имитируя гравитацию, потом влево и вправо, чтобы убрать разницу, и небольшая часть может подняться вверх, создавая подобие волн. Но вот взаимодействия с персонажем почти нет: если прыгнуть в воду, то появятся лишь брызги.
Персонаж выливает воду из ведра. Источник: terraria.wiki.gg
Во время зарождения первых трехмерных игр консоли имели очень ограниченные вычислительные мощности, поэтому создать полноценную симуляцию жидкости было попросту невозможно. Разработчики шли на ухищрения, имитируя воду огромной плоскостью с текстурой. Иногда ее делали прозрачной и добавляли дно. Зачастую такой подход не давал достаточно реалистичный и красивый результат. Однако в игре Panzer Dragoon для платформы Sega Saturn создатели реализовали одну из самых правдоподобных имитаций в то время. Благодаря двум процессорам и отдельному видеочипу консоли, разработчики разделили обработку воды на основную часть, отражения и волны. Таким образом, жидкость получалась красочной, а игра не тормозила.
Вода в Panzer Dragoon. Источник: m.ruliweb.com
Полигоны волнуются — два
С увеличением вычислительных мощностей плоскость, имитирующая воду, сменилась полигональной сеткой. Это совокупность вершин, ребер и граней, которые определяют форму объекта.
Пример полигональной сетки, изображающей дельфина. Источник: wikipedia.org
Конечно, обрабатывать большую и детализированную сетку все равно очень затратно, поэтому разработчики используют тесселяцию — разбиение поверхности на более мелкие многоугольники. Эта технология позволяет хранить плоскость с сильно меньшей детализацией и увеличивать ее в нужный момент. Одно из первых применений тесселяции для создания воды появилось в Wave Race 64. В этой гоночной аркаде вблизи игрока поверхность разбивалась и деформировалась так, чтобы многоугольники собирались в отдельные волны, которые даже могли подбрасывать аквабайки. Однако на расстоянии вода также была плоской, чтобы меньше нагружать систему.
Геймлей Wave Race 64. Источник: nintendo-gifs.tumblr.com
В современных играх для создания жидкостей используют шейдеры — программы, предназначенные для исполнения на графических процессорах (видеокартах) и отвечающие за итоговое изображение. Эта технология помогает правильно отрисовывать текстуры, создавать отражения, преломления и блики, а также перемещать или трансформировать поверхности. Например, в BioShock шейдеры создают всплески, если персонаж взаимодействует с водой, а внутри помещений они проецируют рябь на стены.
Пусть шейдеры и обеспечивают отличное отображение, они не могут создавать полноценную симуляцию жидкости. В проектах, где физика воды играет большую роль, для разработки используют специальные движки или системы. Так, в хорроре о тонущем корабле Hydrophobia весь геймплей строится на взаимодействии с окружающей средой и водой, обладающей реалистичной динамикой. Например, при открывании затопленной комнаты, жидкость перетекает в доступное пространство и игроку приходится плыть. Такое поведение возможно благодаря движку HydroEngine, который обеспечивает моделирование динамики воды в реальном времени.
Конечно, на сегодняшний день существуют реалистичные симуляции жидкости, но для использования в играх они не подходят — необходимо слишком большое количество вычислений. Поэтому такие технологии применяются лишь в заранее сохраненных внутриигровых видео.
Визуал меняется — три
Когда мы оказываемся под водой, то видим немного другие цвета, чем те, что на поверхности. Все из-за того, что она сильнее всего поглощает красный, оранжевый и желтый свет, а синий и зеленый рассеивает. Поэтому под водой все кажется синим. Но в играх свет работает иначе, ведь моделировать реалистичное поведение было бы невероятно ресурсозатратно. Поэтому, когда персонаж погружается под воду, на итоговое изображение накладываются различные фильтры, создающие необходимые цветовые оттенки, размытие и другие визуальные эффекты, а также ограничивается обзор, если игрок нырнул достаточно глубоко.
Воду в играх твори!
Как бы это не звучало, но при создании жидкостей разработчики стараются «обмануть» игроков, создавая имитацию воды, а не ее полноценную симуляцию. Конечно, эти действия обоснованы тем, что компьютеры и консоли просто не в состоянии обработать такое большое количество вычислений в реальном времени. Но это и не большая проблема, ведь игры созданы для удовольствия, а не достоверности.
Фото на обложке: игра Sibnautica, gamebomb.ru