В настоящее время разрабатывается большое количество игр с открытым миром, где важна реалистичность игровой поверхности. В связи с этим проблема имеет большую важность в игровой индустрии, в которых необходим реалистичный ландшафт для игровой карты. Для упрощения процесса создания игрового мира, существует альтернатива созданию ландшафтов в ручную, алгоритмами генерации фрактальных ландшафтов.
В связи с этим, существует необходимость изучения новых алгоритмов генерации ландшафтов для создания фотореалистичной игровой поверхности с применением меньших ресурсов, как человеческих, так и вычислительных. В настоящее время существует множество алгоритмов процедурной генерации ландшафтов, но каждый из них имеет как преимущества, так и недостатки.
Отсутствует информация о точном алгоритме генерации фотореалистичных ландшафтов, а также не информация о возможном их применении.
В данной статье будут разобраны принципы работы некоторых алгоритмов генерации реалистичных ландшафтов. Для получения информации мы использовали интернет, а также книги по разработке алгоритмов на с#.
Сейчас процедурной генерацией пользуются в киноиндустрии, 3D моделировании и создании игр. В многих современных фильмах используют наложение процедурно сгенерированного ландшафта на фон. Для создания фотореалистичных изображений в 3D моделировании, также применяется процедурная генерация. В играх процедурная генерация используется для создания уникальных игровых миров, не похожих друг на друга локаций, а также при создании большого количества уникальных деревьев.
ЧТО ТАКОЕ ПРОЦЕДУРНАЯ ГЕНЕРАЦИЯ
Процедурная генерация автоматически и случайно создает и визуализирует реалистично выглядящие объекты при помощи вычислительной техники. Примерами объектов процедурной генерации могут выступать: города, текстуры, ландшафты отдельных областей, ландшафты целых планет, сюжеты литературных произведений.
Процедурную генерацию впервые в киноиндустрии использовали при съемках фильма “Звездный Путь 2: Гнев Хана” в 1982 году. В игровой индустрии первой компанией, которая доказала возможность автоматического создания полноценной локации была “Bethesda Softworks”. Она применила алгоритм процедурной генерации в своей игре “The Elder Scrolls II: Daggerfall” для того, чтобы собрать из заготовленных блоков пять тысяч городов. Хотя результат работы алгоритма вышел однообразным, сейчас процедурная генерация стала стандартом в игровой индустрии. Технология генерации стала лучше, открытые миры в играх стали огромными и проработанными настолько, что создавать аналогичные вручную было бы очень долго и дорого. В связи с этим многие студии предпочитают ручному созданию миров, процедурную генерацию, чтобы избежать срывы сроков, а также внеплановые расширения штата сотрудников. В отличие от примитивных алгоритмов, современная процедурная генерация - это сложная система, в которой есть множество условий и параметров, а для большей реалистичности результата, эта система всегда контролируется живым человеком. Первые известные применения процедурной генерации относят к началу 1980-х годов.
ГЕНЕРАЦИЯ КАРТЫ ВЫСОТ
Генерация карты высот происходит в несколько этапов. Сначала строится базовая форма земной поверхности, которая после уже будет меняться и модифицироваться для получения реалистичного результата.
Одним из самых простых подходов генерации формы земной поверхности является построение карты высот. Карта высот это специальная функция, в которой хранится информация о значении высоты в точке относительно случайно выбранного начала координат. Также существуют более сложные методы описания поверхности, при помощи которых появляется возможность генерировать пещеры, скалы с отрицательным наклоном и прочие формы. Эти методы подразумевают использование воксельных систем или различных алгоритмов, реализующих перепостроение топологии полигональной сетки, которая описывает генерируемую поверхность, что сильно усложняет генерацию.
Для хранения информации о сгенерированном ландшафте применяется несколько вариаций хранения данных:
- Карта высот - хранится таблица с указанием высоты каждой координате ландшафта.
- Иррегулярная сетка вершин - хранится простая триангулизированная карта.
- Хранение карты ландшафта - хранится информация о конкретном использованном блоке, а не карта высот.
ВАРИАНТЫ ХРАНЕНИЯ ИНФОРМАЦИИ О ЛАНДШАФТЕКАРТА ВЫСОТ
Для хранения используется таблица, в которой строки и столбцы отвечают за координаты широты и долготы, а значения на их пересечении - это высоты.
Рисунок 1. Карта высот и сгенерированный по ней ландшафт
При помощи карты высот легко представляются даже обширные пространства, но этот метод имеет существенный недостаток - избыточность данных. Для генерации простой плоскости будет использоваться множество точек, а также информация о них, в то время как можно было обойти всего тремя. Но этот вариант хранения данных о ландшафте также имеет и плюсы :
- Наглядность информации о ландшафте.
- Простота изменения данных о хранимом ландшафте.
- Простота нахождения координат на карте.
- Из-за избыточности данных получается провести качественное динамическое освещение карты.
ИРРЕГУЛЯРНАЯ СЕТКА ВЕРШИН
Второй способ применяемый для построения ландшафтов - иррегулярная сетка вершин и связей их соединяющих. Такой вариант хранения информации о ландшафте зачастую применяется в игровой индустрии, а также для работы с трехмерной графикой.
Рисунок 2. Пример иррегулярной сетки вершин.
Этот принцип дает выигрыш по скорости визуализации ландшафта, за счет хранения меньшего количества информации : хранятся только вершины и связи соединяющие их. Но данный вариант имеет и свои минусы:
- Основная часть алгоритмов генерации ландшафтов предназначены для регулярной карты высот.
- Будут возникать сложности при динамическом освещении.
КАРТА ЛАНДШАФТА
В данной вариации информация о ландшафте хранится в виде таблицы, в которую записаны индексы ландшафтных сегментов. Сегменты могут быть представлены регулярной и иррегулярной картой высот, а также двумя методами сразу. Данный метод хранения дает возможность хранить открытые пространства больших размеров. У этого подхода также существуют и минусы :
- Проблема стыковки разных сегментов.
- Неочевидность данных.
- Сложность модификации данных
АЛГОРИТМЫ ГЕНЕРАЦИИ ЛАНДШАФТААЛГОРИТМ “ШУМ ПЕРЛИНА”
Этот алгоритм, является одним из самых простых способов создания случайно сгенерированной текстуры. Данный алгоритм был предложен Кеном Перлином в 1983 году, программа генерирует псевдослучайные числа путем интерполяции между единичными векторами, расположенными в некоторых предопределенных точках. В результате получается непрерывная функция одной или более переменных.
Рисунок 3. Пример сгенерированного Шума Перлина.
Интересным свойством алгоритма является то, что он может использоваться как для описания глобальных параметров местности так и для локальных. Для этого суммируют несколько шумов с разными масштабами и амплитудой, каждое слагаемое называют октавой.
Рисунок 4. Шум Перлина с разным количеством октав.
При использовании данного алгоритма, есть возможность вводить дополнительные ограничения на форму поверхности, например, для генерации карты высот острова можно умножить генерируемую карту на желаемую форму острова.
Рисунок 5. Пример умножения карты высот с желаемой формой.
Использование шумов является оптимальным для большинства способом генерации начальной конфигурации карты высот.
АЛГОРИТМ “DIAMOND-SQUARE”
Идея алгоритма заключается в использовании высот вершин. Далее по определенной формуле вычисляется высота точки находящейся в центре, между этими вершинами. Алгоритм продолжает свою работу пока есть возможность установить высоту в точке находящейся между 4 вершинами. Таким образом получается сглаженный и реалистичный ландшафт.
Рисунок 6. Пример сгенерированного ландшафта алгоритмом diamond-square.
Алгоритм diamond-square является самым распространенным среди алгоритмов процедурной генерации ландшафтов. Недостатком является, то что на крупном масштабе ландшафты получаются относительно гладкими, а на мелком становятся более резкими.
О МЕТОДАХ ГЕНЕРАЦИИ ФРАКТАЛЬНЫХ ЛАНДШАФТОВ
Генерация реалистичных ландшафтов в наше время применяется во многих сферах. Позволяет создавать более качественную атмосферу для кино, упрощает создание виртуального игрового мира, применяется для создания реалистичных симуляторов для обучения и представления. Методы генерации ландшафтов постоянно дорабатываются и улучшаются для получения большего реализма в полученной модели.
Список литературы
- Алгоритм «diamond-square» для построения фрактальных ландшафтов [Электронный ресурс]. – Режим доступа: (дата обращения: 13.05.2022).
- Алгоритмы. Введение в разработку и анализ / Левитин А.В. – Университет Вилланова, Москва, Санкт-Петербург, Киев 2006 – 574 с.
- Д. Хокинг. Unity в действии. Мультиплатформенная разработка на C# – Питер, 2019. – 352 с.
- Особенности применения карт нормалей [Электронный ресурс]. – Режим доступа: https://render.ru/ru/articles/post/10701 (дата обращения: 13.05.2022)
- Процедурная генерация планетарных карт [Электронный ресурс]. – Режим доступа: https://habrahabr.ru/post/313420/ (дата обращения: 13.05.2022).
- Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#, - Питер, Москва 2013. – 896 с.
- Фёдоров К. Б. Процедурная генерация ландшафтов / К. Б. Фёдоров ; науч. рук. О. Б. Фофанов // Сборник трудов XVI Международной научно-практической конференции студентов, аспирантов и молодых учёных «Молодежь и современные информационные технологии», 2018 г, Изд-во ТПУ, 2018.