HytaleR бета
Блог

Подробный разбор генерации ландшафтов в Hytale

Заголовок блога о генерации ландшафтов в Hytale с процедурно сгенерированной местностью

Привет! В этой статье мы подробно рассмотрим систему генерации мира в Hytale, а именно — различные техники, которые мы используем для создания впечатляющих процедурно генерируемых ландшафтов в каждой из зон Режима приключений (Adventure Mode).

Впервые мы затронули эту тему в январе 2019 года. Рекомендуем вернуться и прочитать наше введение в генерацию мира, чтобы получить общее представление о том, как работает наша система генерации на основе правил и чего мы стремимся достичь. Сегодня мы углубимся в детали и покажем, как моддеры Hytale смогут настраивать генерацию мира под свои нужды.

Но для начала нам нужно поговорить о шуме.

Карты шума и интерпретация карты высот

В контексте наших систем процедурной генерации «карта шума» (noisemap) — это набор случайных чисел, которые можно комбинировать с различными функциями для поддержки огромного количества разных типов генерации.

Мы используем карты шума (noisemaps) для множества аспектов системы генерации контента в Hytale, включая все системы, связанные с ландшафтом, о которых мы расскажем далее. Одно из самых впечатляющих применений — формирование самих зон.

Инструмент визуализации карт шума и интерпретации карты высот для скалистых плато Зоны 2

Это изображение из простого инструмента визуализации. Оно показывает результат комбинирования карт шума (noisemaps) с другой важной функцией генерации ландшафта — интерпретацией карты высот (heightmap interpretation). В данном случае моделируются скалистые плато Зоны 2 (Zone 2).

Интерпретация карты высот (heightmap interpretation) использует дополнительные наборы чисел, которые позволяют определить, насколько высоко или низко будут располагаться определённые элементы карты шума на генерируемом рельефе. Настраивая пороговые значения интерпретации карты высот, мы можем, например, взять набор карт шума, создающий извилистый водный путь, и адаптировать его для создания впечатляющих речных каньонов.

«Наши технические художники осваивают композицию карт шума как ремесло, — говорит программист генерации мира Slikey. — У них есть большой набор инструментов с различными типами шума и операциями для их комбинирования. Требуется время, чтобы научиться балансировать сложность, производительность и дизайн. Мы постоянно открываем новые способы комбинирования карт шума (noisemaps) для генерации уникального рельефа или размещения префабов (prefabs) неожиданными способами».

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

Внимание

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

Этот ролик показывает, как несколько карт шума (noisemaps) последовательно добавляются к ландшафту. Сначала создаётся общий ландшафт, затем вводятся правила для биомов рек и гор Зоны 2 (Zone 2). Постепенное нарастание сложности в этом ролике показано для наглядности: в реальности, после установки карт шума и пороговых значений для области, ландшафт генерируется целиком за один раз.

Слои, покрытие и префабы

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

Визуализация слоёв блоков, показывающая глубину рельефа и поверхностные материалы в Зоне 3

Мы начинаем со «слоёв» (layers). Это ещё один тип карты шума, который используется для определения как глубины залегания определённых типов блоков в рельефе, так и типов блоков, которые появятся на поверхности. На скриншоте выше показаны различные слои (layers), составляющие ландшафт Зоны 3 (Zone 3), с удалёнными растениями и растительностью для лучшей видимости материалов.

Демонстрация системы покрытия с травой, растениями и деталями окружения

Следующий шаг — «покрытие» (covers). Под покрытием понимаются случайные детали окружения: трава, листва, грибы, кристаллические выходы и тому подобное. Настраивая покрытие (covers) для определённой области, мы указываем системе генерации мира, какие растения должны появляться на каких слоях. Например, мы можем установить, что густой кустарник должен появляться только на травянистых слоях, а мох — на каменистых поверхностях под землёй.

Префабы (prefabs) добавляют финальные штрихи и часто именно они придают окружению уникальный характер. Префабы — это заранее созданные нашими техническими художниками конструкции из блоков, которые система генерации мира распределяет по окружению.

Случайные префабы (incidental prefabs), такие как деревья, встречаются игроку часто и распределяются подобно другим видам наземного покрытия.

Визуализация распределения деревьев как случайных префабов на ландшафте

Вот пример трансформации, которая происходит при применении слоёв (layers), покрытия (cover) и случайных префабов (incidental prefabs) к новому ландшафту:

Внимание

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

Поделиться

Понравилась публикация? Расскажи друзьям!

Скопируй ссылку на статью

✓ Ссылка скопирована!

Обсуждение

Обсудите эту публикацию с другими участниками сообщества:

Похожие публикации