Во время работы над Light Trail Rush команда программистов столкнулась с множеством технических проблем. Джонатан, разработчик Unity, отвечающий за процедурно сгенерированную среду, изучил технологию Voxel, поскольку она позволяет легко генерировать и редактировать ландшафт в режиме реального времени во время игры.

Продолжайте читать эту первую статью серии; мы хотели бы поделиться с сообществом тем, как Джонатан решил проблему процедурной генерации окружения для арены.

Создание арены с нуля для Light Trail Rush

Когда мы начали работать над Light Trail Rush, мы сначала представили космические корабли, мчащиеся внутри сферической арены с двумя городами: нижняя часть обращена к верхней части. Вот так:

Мы решили создавать города с помощью строительных наборов в каждой новой игре, чтобы избежать монотонности игры на одной и той же арене. Решением стал алгоритм процедурной генерации. Первой версией алгоритма была 2D сетка:

Создание базовой поддержки города

1. В поисках идеального инструмента

У нас была отправная точка для арены, но была необходима базовая структура, чтобы поддерживать и закреплять город на ней. Мы работали над многопользовательской сетевой частью игры. Тем временем гейм-дизайнер создал целую арену и определил необходимую реализацию для первой играбельной версии игры.

Что касается процедурной части, я искал способы создания астероида, на котором будет стоять город. Магазин Unity Asset Store предоставил множество решений. Однако, просматривая множество форумов в сети, мое внимание привлек Voxeland: пользователь создал целую планету. Было бы не так сложно создавать астероиды, если бы кто-то создал целую планету!

2. Настройка Voxeland и создание собственного генератора

Основная программа Voxeland использует карты высот с шумами для создания реалистичных ландшафтов.

Плагин использует пользовательскую 3D-матрицу для назначения байта для каждого типа блока, необходимого для земель. Затем матрица используется с обертками для создания данных о сетках и вершинах, которые расшифровывает пользовательский шейдер Voxeland. Наконец, он применит текстуры, смешивающиеся от одного типа блока к другому.

Инструмент отлично подходит для создания гор и холмов, выполняя свою основную задачу. Во время игры можно редактировать ландшафт, однако генератор не позволяет создавать полости.

Учитывая «плавающий» характер астероида, генератор не может правильно отобразить все формы и формы объекта. Генератор Voxeland не так хорошо справляется с вертикальными слоями.

Таким образом, я обошел первоначальную цель использования генератора Voxeland.

Я повторно использовал 3D-матрицу Voxeland, которая вводится в плагин, для создания нашего собственного генератора.

Во-первых, я объединил координаты 3D-матрицы с шумом Перлина, чтобы определить зоны с материей и зоны без нее. С настройками, установленными на нижнем конце, он будет генерировать форму ядра (базовую структуру) астероида, что потребует дополнительной работы над внешней формой.

Оттуда, чтобы создать эллипсоидальные астероиды, я добавил ограничение расстояния от центра матрицы до ее расширений.

У меня был фрактальный шум на вершине Перлина, из-за чего поверхность астероида была менее гладкой: он больше походил на камень, чем на яйцо.

Мозаика текстур была слишком заметной, поэтому я попробовал встроенный шейдер Voxeland, чтобы получить близкое/дальнее смешение. К сожалению, из-за проблем с производительностью мне пришлось искать альтернативное решение. Я изучил сценарии генерации сетки Voxeland и нашел шифрование текстур для каждого типа местности.

В плагине шифрование, встроенное в тангенс вершины, расшифровывается в шейдер, используемый для земли. Оттуда я перенес расшифровку в новый скрипт Amplify Shader Editor. Я использовал вывод расшифровки с трехплоскостным узлом Amplify и умножением между близкой и дальней текстурами. Более дальняя текстура будет иметь тонкую мозаику, а более близкая текстура земли будет отображать более детальный вид по мере того, как мы приближаемся.

Основной задачей редактора шейдеров Amplify было создание пользовательского узла Amplify для извлечения данных касательной вершин без их изменения Amplify. Это было необходимо, чтобы избежать странных артефактов по всей поверхности.

Почему вы тоже должны это сделать

Подводя итог, вам определенно стоит пойти на это, если вы ищете процедурную генерацию для своей среды. Вот почему:

  • Очень приятно исследовать технологию Voxel, меня всегда всегда завораживало ее использование в 7 days to die, No man’s sky, Minecraft, Terraria…
  • Это захватывающая задача для любого разработчика, интересно создавать с нуля и смотреть, как это развивается со временем.
  • Это заставляет вас тесно сотрудничать с членами вашей команды.
  • Это открывает множество возможностей для экспериментов с геймдизайнером.
  • Команда художников любит вас, поскольку они экономят много времени, избегая 3D-моделирования.
  • Также очень приятно видеть, что ваш алгоритм художественно отображает отличные результаты.

Итак, почему мы сделали все, что вы спросите? Ну, во-первых, нам нужен был астероид для поддержки города. Теперь мы можем, наконец, разместить на парящем астероиде огромный город.

На следующей неделе найдите здесь наш второй выпуск о поколении города. Далее мы рассмотрим, как мы закодировали алгоритм, чтобы результат выглядел наиболее естественным и реалистичным.

Для дальнейшего изучения:

Форум Voxeland: https://forum.unity.com/threads/voxeland-voxel-terrain-tool.187741/

Магазин Unity для Voxeland: https://assetstore.unity.com/packages/tools/terrain/voxeland-9180

Light Trail Rush — игра для ПК, которая в настоящее время разрабатывается студией B2Expand шесть месяцев.