Генератор ландшафта: Генерация трехмерных ландшафтов – Старый друг лучше новых двух. Генератор ландшафтов. Часть 1 / Habr

Содержание

Старый друг лучше новых двух. Генератор ландшафтов. Часть 1 / Habr

Данная статья зародилась в моей голове, после того, как нам выдали курсач по мультимедийным технологиям в универе. «Универ… пф-ф-ф…» — так подумает мой читатель. Да только иногда здесь бывают дельные вещи. Вот, почему.

В курсаче предполагается создание виртуального ландшафта в старенькой программе VistaPro. В силу того, что раньше я ни с чем подобным не работал, я не могу сказать, насколько она функциональная. Но её большой плюс заключается в том, что она крайне проста в использовании (а другие террагены подчас довольно нетривиальны, что может вызвать некоторые трудности. Час же работы может не гарантировать успеха, в отличие от моего антиквариата), а освоить её от и до: разобрать весь функционал можно меньше чем за день не зная до этого ровным счётом ничего о ней. Небольшим, но всё-таки плюсом является совсем малый вес (~3 МБ). Разумеется, сейчас есть много подобных террагенов, которые обгоняют по функциональности VistaPro.

Здесь можно найти остальные части:

Часть 2

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

Я максимально подробно пишу всё, будто я это делаю для школьника 4-5 лет, ибо сам часто сталкиваюсь с тем, что написано очень заумно, в результате приходится тратить много времени на то, чтобы разобрать: а что же всё-таки написано?.. Конечно, мой читатель может сказать, что слишком большое количество деталей читать бывает слишком скучно и утомительно. Но, пока я остановлюсь именно на таком стиле изложения.

Итак, здесь можно будет найти описание функционала VistaPro, а также иллюстрацию работы большинства опций.

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

Кроме того, я поэтапно создам мирок или два для демонстрации возможностей программулины.

Посмотреть то, что может VistaPro можно, например, тут, на видосике:

YouTube

Что же, начнём.

Скачать сей объект можно здеся:

Vista Pro installer 1
Vista Pro installer 2
Vista Pro installer 3

Creation. Генерация карт

Для начала, стартанём экзешник. Откроется окно в стиле Windows 98. Это немного пугает изначально. Но потом привыкаешь.

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

Итак, выполняем следующие действия.

  • Жамкаем Render, который находится в самом низу.
  • Картинка получается маленькой и скучной. Поменяем разрешение. Зайдём на боковой панели: Image -> Image size -> Выбираем хорошее разрешение.
  • Но картинка по-прежнему грустная. Пирамида слишком скучно и одиноко стоит в чистом поле. Теперь заходим в раздел Creation. И нажимаем Randomize seed. Уаля. Мы получили интересненькое.

Теперь, дорогой читатель, ты умеешь делать небольшой финт ушами для перехода от пирамиды к пирамидам(зачеркнуто), хотя слегка и хаотичным.

Итак, мы научились генерить карту. Для чистоты эксперимента, я открою новый файлик, в котором ничего нет, только чистое поле с пирамидкой. Отседова мы начнём попытки получить что-то ещё.

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

Seed value

Под Seed value (Seed value будем везде брать равным 0, либо, в редких случаях другому числу. Чаще всего 1) находится магическая чиселка, которая задаёт некоторое начальное число генерации. Оно появляется случайно при нажатии на Randomize seed. Очевидно, что генерируя ландшафт с одинаковым Seed value, получим одинаковые карты, с разными — разные.

При генерации новой карты, можно действовать двумя методами. Либо нажать Randomize seed, либо активировать поле Seed value и нажать клавишу Enter. В первом случае будет сгенерено новое число Seed value, во втором случае значение не поменяется. Так удобно действовать, когда нужно экспериментировать с ландшафтом для получения одинаковых карт.

Feature Size

Идём далее. Feature size. Данная фитча позволяет сказать, насколько ландшафт будет разреженным. Или по-другому: этим свойством можно задать масштаб. Я возьму разные значения Seed value Например, при Feature size = 1 будет выглядеть так (две следующие картинки созданы для Feature size = 1):


При Feature size = 8 так (две следующие картинки созданы для Feature size = 8):


Разница очевидна. В принципе, некоторыми махинациями можно преобразовать ландшафт из структуры FeatureSize = 1 в структуру FeatureSize = 8. Но об этом позже. Это осуществляется во вкладке Manipulation:

Сравните (FeatureSize = 1 и FeatureSize = 8):

Отрендеренные для тех же значений соответственно:


И ещё(FeatureSize = 1 и FeatureSize = 8):

Отрендеренные для тех же значений соответственно:

Set landscape

Рассмотрим Set landscape size. Эта опция задаёт размер мира. Automatic! — это то же самое, что и Small. Не отличается ничем.

Размер мира влиет на максимальное и минимальное значение координат X и Y.

Mega ( С пяток секунд сидели, тупили. Здесь, при рендеренге, комп слегка подвис, поэтому рендерить я буду только на Small, за редким исключением):

Small:

Кроме того, размер влияет на чёткость структур (чем больше, тем чётче, т.е. масштаб больше), время генерации. Сравните (Feature size = 8) Mega и Small:


На данном этапе мы формируем поверхность. Фактически происходит работа тектонических процессов.

Fractal roughness

Как задавать высоту гор? Для этого рассмотрим параметр Fractal roughness. Для Fractal Roughness == 100 мы уже видели (смотрите выше). Возьмём теперь 0. Ответ напрашивается. Высота гор равна нулю, значит их просто нет. Плоскость:


А при Fractal roughness = 1000 наступает ад. Встречайте Гималаи.


Остановимся на 100. Далее я буду использовать именно это значение.

Enlarge section

Enlarge section — выделение определённого участка и интерполяция (Interpolate) его на всю карту, либо растяжение (Duplicate) его по всей карте. Выбрать интерполяцию или дублирование можно сразу после того, как будет выбрана область.

Интерполяция подразумевает сглаживание грубых участков карты, а дублирование (или растяжение) это действие не выполняет. Для того, чтобы было понятно, в чём отличие, я поставлю Landscape size == Small. На больших картах, а точнее на карте ландшафта, этого эффекта практически не заметно. Сравните (я взял верхний левый угол):



Тот же участок, только для большой карты:

Smooth

На примере Enlarge section верхнего левого угла с опцией Duplicate, будет отлично видно, как работает сглаживание (Smooth). После многократного нажатия вот что получим:


Erode

Теперь продемонстрируем ещё одну опцию — эрозия или старение (Erode). Данный процесс выравнивает ландшафт, делает его однородным. Что это собой представляет? Мы запускаем процесс, после чего на карте чёрным цветом маркируются области с одинаковой высотой. Это происходит итеративно. В зависимости от изначальной ситуации это может происходить быстро (гладкий, изреженный острыми горами ландшафт, т.е. старые горы), либо медленно (ландшафт изрежен острыми горами, т.е. молодые горы). Скорость со временем нарастает: чем старше горы, тем сильнее будут заметны эрозийные процессы. Ландшафт получен после сглаживания (Smooth) из предыдущего. Кстати, на больших картах эрозия работает тоже крайне долго. Устаёшь ждать.


Если сглаживания не проводить (не жамкаем много раз на кнопочку Smooth), то получим нечто такое:


Получаются огромные плато в горах.

Сглаживание в отличие от эрозии делает гладкими горы, но не делает никаких плато.

Roughen

Но, постойте… А что если некий Вовочка подошёл и испортил наши офигитительские горы, которые мы получили, подбирая, например, Seed value. Скажем он их очень сильно сгладил. В таком случае можно откатиться (право, не до начального состояния), но всё-таки. Это делается с помощью Roughen. Я ещё раз срендерю ландшафт. После чего его сглажу. Здесь получится практически идентичный вышеприведённой карте ландшафт:

Сглаженный (без Roughen):

После Roughen:

Но данная опция не проявляет себя, если на неё жамкать многократно, как например, на Smooth.

Stretch

Теперь жамкнем Stretch. Эффект получается как от Fractal roughness при генерации:


Ну, и на последок, картинка с Size landscape = Mega:

А теперь немного про вкладку Camera, окошко с ландшафтом и окошко камеры. Но основной упор я сделаю на это в следующий раз.

Экран VistaPro

В программе практически везде и всегда доступны 4 области: ландшафт, камера, параметры, вкладки.

Ландшафт

На карте с ландшафтом есть несколько объектов. Жёлтый квадратик — то место, где находится камера, жёлтый крестик — место, куда она направлена (далее, в разделе создания анимации, я скажу об этом моменте отдельно. Это очень важно для удаления эффекта тряски), две красные линии, ограничивающие угол обзора. Есть два слайдера: по оси Х, и по оси Y (выделены красным), которые позволяют осуществлять навигацию по карте — смещение центра карты вверх и вниз. Также есть маркеры «+», «-« и «=», осуществляющие увеличение, уменьшение масштаба и возвращение в исходное, центрированное состояние соответственно. Помимо этого есть ещё две опции: «C» — центрирование относительно положения камеры (относительно жёлтого квадратика) (следует попробовать сдвинуть камеру в строну, а после этого заюзать данную функцию), «T» — центрирвоание относительно фокуса (взгляда) (относительно жёлтого крестика). Для этого стоит сместить фокус, зажав Place target в разделе Camera, пощёлкать по карте ландшафта, после чего нажать «T»

На карте с ландшафтом можно найти координаты точки. Для этого подводим мышку в нужное место (на скрине мышку не заметно, но поверьте мне, что она есть на карте). Над окном ландшафта появятся координаты X=* Y=* Z=*.

Камера

Камера — это окошко в левом углу. Здесь можно увидеть в первом приближении, что будет срендерено. Это очень удобно, так как рендер занимает некоторое время, а здесь можно примерно представить, что будет видно на картинке.

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

Рендеринг карты можно локализовать, выделив определённую область. Простите Вашего покорного слугу, но я не удержался и взял заготовленный ландшафт. Он чуть интереснее Пирамиды Хеопса. Сравните:


Для того, чтобы отследить этот эффект, следует нажать клавишу «BB», после чего выделить область на ландшафте:


После рендеринга получим:

Чтобы убрать данный эффект, нажмите BB ещё разочек:

Кнопочки «+» и «-« около камеры меняют угол обзора, что непосредственно будет отражаться на изображении перед камерой: выпуклое, сжимающиеся в точку изображение или вогнутое соответственно. На ландшафте также происходят изменения (две красные прямые съезжаются и разъезжаются соответственно).

Смотрим в точку:


А тут смотрим с широким углом обзора:


Есть небольшой баг (возьму заготовленный ландшафт): место, куда указывает жёлтый плюсик на ландшафте не соответствует изображению перед камерой при бесконечно малых углах. Особенно хорошо это видно на границе водораздела: выставляем указатель камеры на ландшафте на землю (крутить камеру можно в разделе Camera -> Place target), максимально близко к воде, после чего делаем фокусное расстояние очень большим (1000+ — долго-долго жмём на «+»), после чего замечаем что камера смотрит на воду, а на ландшафте она сфокусирована на земле. Но это, разумеется, мелочи:

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

Внизу, под параметрами есть две кнопочки, которые доступны из любой вкладки: Render и Display. С одной из мы уже знакомы: Render. С помощью неё мы можем сгенерить ландшафт. Есть также Display. С помощью этой кнопочки можно загрузить последний срендереный ландшафт.

Вкладки

Вкладки представляют собой определённый разделы для моделирования мира. Рассмотрим каждый из них в целом, а затем разберём отдельно:

  • Camera
    Данный раздел едва ли нужно пояснять. Здесь всё о положении камеры. Практически всё, что можно сделать с наблюдателем, можно сделать именно отседова.
  • Light
    Свет — аналогичная ситуация. Солнце, солнечные затмения, освещённость и другие приятности можно найти тут.
  • Sky
    Здесь можно завалить или подправить горизонт, включить облака, сделать тучи, добавить луну, а также поразвлекаться с атмосферой так, как хочется.
  • Terrain
    Снег в горах, деревья, палитра текстур гор и многое другое.
  • Water
    Здесь можно утопить свой мир цунами (плохо, право, топится).
  • Tree
    Кэп.
  • Texture
    Добавить свои или подправить родные.
  • Manipulation
    Игры демиургов — здесь находятся кнопочки, позволяющие править мир целиком (видимо, по-другому и нельязя, только всё и сразу).
  • Creation
    Генерим карту.
  • Placement
    Построй свой город.
  • Image
    Шумы, размеры картинки, а также другие параметры.
  • VR Control
    Виртуальная реальность.
  • Path
    Путь передвижения камеры (данная фишка нужна для анимации).
  • Animation
    Создаём своё видео.

Простой и быстрый алгоритм генерации ландшафта / Habr

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

В какой ситуации удобен алгоритм

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

Алгоритм и результат

Прежде чем описывать сам алгоритм поделюсь его результатами:



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

Для простоты создадим структуру прямоугольника:

struct tRect  
{
	int x1, y1, x2, y2;
}

Переменные x1 и y1 — левая нижняя координата прямоугольника, x2 и y2 — правая верхняя.

Пусть:

— Наша карта представлена в виде массива HM[mapsizex][mapsizey];
— mapsizey и mapsizex — переменные, определяющие размер вашей карты;
— genStep — переменная, отвечающая за количество наших прямоугольников;
— zscale — некий коэффициент растяжения карты в высоту. Можно заменить числом.
— recSizex и recSizey — пределы размеров прямоугольника.

Теперь необходимо заполнить нашу карту прямоугольниками:


for (int i=0; i<genStep; i++)
    {
        genRect.x1 = rand()%mapsizex;
        genRect.y1 = rand()%mapsizey;
        genRect.x2 = genRect.x1 + recSizex / 4 + rand()%recSizex;
        genRect.y2 = genRect.y1 + recSizey / 4 + rand()%recSizey;
        if (genRect.y2 > mapsizey) genRect.y2 = mapsizey;
        if (genRect.x2 > mapsizex) genRect.x2 = mapsizex; 
        for (int i2 = genRect.x1; i2<genRect.x2; i2++)
                for (int j2 = genRect.y1; j2<genRect.y2; j2++)
                    Map.HM[i2][j2]+= float(zscale) / float(genStep) + rand()%50 / 50.0;
    }

Рельеф со скриншота был получен значениями:
genStep = 1024
zscale = 512
mapsizex и mapsizey = 128
recSize = 10

Далее вы выводите карту на экран любым доступным вам способом. В моём случае — openGl+glfw.

Преимущества и недостатки алгоритма

Преимущества:

  • Простота и скорость в написании самого алгоритма
  • Скорость исполнения алгоритма

Недостатки:
  • Примитивность
  • При маленьком шаге заполнения карты ландшафт становится «квадратным»
  • Отсутствует возможность разбивать ландшафт на биомы по ходу генерации карты высот

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

Надеюсь, данная статья была Вам полезной.

→ Статья про генерацию игровых уровней
→ Статья про «diamond-square»

Часть 2. Valley Benchmark / UNIGINE corporate blog / Habr

Бенчмарк Valley

Это вторая и заключительная часть статьи, посвященной процедурным методам производства контента для 3D приложений. Первую часть Вы можете найти здесь.

В этой части, так же как и в предыдущей, приводятся ссылки на скачивание созданных нами исходных материалов, которые можно свободно использовать (с изменениями или без) в своих проектах, но только не продавать/распространять в чистом виде и/или в составе каких-либо библиотек.

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

В этот раз речь пойдёт о том, какими средствами и приёмами мы пользовались при создании бенчмарка Valley, чтобы в максимально сжатые сроки произвести большое количество фотореалистичного контента.

То, что у нас получилось, Вы можете оценить здесь, бесплатно скачав бенчмарк или же просто просмотрев видеоролик:

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

Перед тем, как приступить непосредственно к производству, мы разбили весь необходимый контент по принципам подхода к его созданию:

  1. меши и текстуры камней, деревьев, травы, цветов и т.д.
  2. ландшафт (и маски распространения по нему различных объектов)
  3. текстуры для специфических эффектов, некоторых природных явлений и объектов

Если контент, указанный в первом пункте, создаётся в большинстве случаев любыми привычными средствами 3D моделирования и текстурирования, то перечисленное в пунктах 2 и 3 требует особых подходов, в которых и были использованы средства процедурной генерации.

Так, например, программа World Machine использовалась как специализированный инструмент для генерирования ландшафтов и масок распространения объектов, а программа Filter Forge — для создания:

Billboard clouds в бенчмарке Valley

В движке Unigine есть инструменты для симуляции как физически корректных динамически изменяющихся облаков (physically-based volumetric clouds), так и создания статичных облаков нужной формы в требуемых местах (billboard clouds).

Инструмент для создания billboard clouds позволяет формировать массив billboard’ов (billboard — полигон, который всегда направлен в камеру) случайным образом, заполняя ими исходный габаритный меш (bound mesh) по заданным параметрам (например, таким как количество, базовый размер, разброс размера), и в дальнейшем манипулировать всеми параметрами вплоть до изменения позиции любого отдельного billboard’а.

Настройка параметров объекта Billboards в движке Unigine

Чтобы превратить полученный массив полигонов в облака, на него назначается специальный материал, учитывающий освещение от глобального источника света (солнца), а также рассеивание света (light scattering). В этом материале назначается диффузная текстура, состоящая из нескольких отдельных полупрозрачных фрагментов облака, которые случайным образом назначаются каждому отдельному billboard’у.

Диффузная текстура фрагментов облака была создана процедурными средствами редактора Filter Forge.

Меш, в объёме которого генерируются billboard’ы облака (сверху) и диффузная текстура облаков (снизу)

Скачать clouds_variation.ffxml

Мох на камнях в бенчмарке Valley

Для создания мха на камнях в Unigine используется специальный материал, который позволяет комбинировать 2 материала, один из которых проецируется на второй по маске в world space.

Параметры материала мха

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

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

Все текстуры (включая карту нормалей) и маска для этого природного объекта были сгенерированы в Filter Forge.

Diffuse (сверху), normal (посередине), irregularity (снизу) текстуры мха

Скачать moss.ffxml

С помощью этого материала также легко можно симулировать ржавчину, коррозию или плесень на объектах.

Эффект Lens Flares Dirt в действии

В движке Unigine есть эффект, симулирующий засветку линз объектива камеры яркими источниками света. Так как в реальности не существует идеально чистых и ровных линз, а наличие на них даже крошечных пылинок вызывает при засветке довольно характерные визуальные артефакты, для большей реалистичности мы добавили возможность использовать текстуру загрязнения объектива, которая проявляется только на его очень засвеченных участках.

Необходимую текстуру для этого эффекта проще и удобнее было реализовать средствами Filter Forge, что и было сделано.

Текстура, использованная для создания эффекта грязной линзы

Скачать lens_dirt.ffxml

Создание больших открытых (outdoor) сцен является довольно сложной задачей как в плане рендеринга ландшафта и множества объектов на нем в реальном времени, так и в плане создания контента для таких сцен.
В Unigine для этих целей существует множество инструментов, позволяющих:
  • создавать пригодные для рендеринга в реальном времени ландшафты сколь угодно больших размеров (такие возможности помимо инструментария даёт реализованная в движке асинхронная подгрузка данных)
  • процедурно распределять массивы объектов на ландшафте по маскам
  • формировать облака, звёзды, дождь, океан, настраивать атмосферные эффекты (atmospheric light scattering) и т.д.

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

Ландшафт в движке Unigine представляет собой объект, динамически изменяющий уровень детализации своей сетки и текстур в зависимости от степени удалённости камеры для оптимальной производительности при большой дальности видимости (более 40 километров).

Объект ландшафта с динамически изменяемой детализацией

Для создания ландшафта в движке Unigine необходимо иметь следующие исходные текстуры:

  • карта высот (height map) — 16-битная grayscale текстура, которая описывает рельеф (высоту каждой точки ландшафта)
  • диффузная карта (diffuse map) — текстура, которая определяет базовый цвет
  • маска материалов — текстура, которая определяет области детализации тем или иным материалом (см. ниже)

Карта нормалей не требуется, потому как создается инструментами движка автоматически по карте высот.

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

Для создания перечисленных выше исходных текстур существуют свои специализированные программы-генераторы ландшафтов. Одной из таких программ является World Machine.

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

Процесс создания текстур ландшафта мы разбиваем на три этапа:


Для каждого этапа создаётся свой граф в World Machine, и каждый следующий этап использует результаты расчётов предыдущего. Конечно, World Machine довольно умная программа и при изменении параметров узлов, в отличие от Filter Forge, она производит перепросчёт только той ветки графа, на которую эти изменения повлияли, однако при повторном открытии файла этот просчёт осуществляется полностью с самого начала. А так как, например, расчёт результатов эрозии довольно сложен, то разбиением на разные этапы, помимо удобства работы, мы получаем ещё и сэкономленное время.

Создание базовых текстур ландшафта


Граф в World Machine, которым формируются все основные текстуры ландшафта

Скачать terrain_height.tmd

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

Ближе к впадинам преобладает холмистый характер поверхности, который воссоздаётся расширением областей вокруг гор фильтром (а в терминологии World Machine — устройством) Expander:

Далее к полученным холмам добавляются мелкие детализированные скалы — остатки гор после эрозии:

Устройством Terrace добавляются уступы, затем зашумляются для устранения регулярности эффекта и ограничиваются по высоте и углу поверхности:

Добавляется эрозия. Это самое значимое устройство в World Machine, которое предназначено для симуляции процессов разрушения и смещения грунта под воздействием воды, ветра и температуры. Без него весь ландшафт оставался бы просто далёким от реальности набором смешанных процедурных шумов.

Добавляются волнообразные смещения грунта. Под воздействием гравитации и процессов эрозии грунт стремится сползти с наклонных поверхностей к низинам, но из-за большого числа находящихся в нём корней деревьев и растений это сползание происходит целыми массивами, что визуально проявляется через складки на поверхности земли. Сформировать и отработать этот эффект более детально в World Machine помогает возможность производить вычисления результата только указанного участка ландшафта (через установку нужных Extents):

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

Полученные на данном этапе результаты растеризуются средствами World Machine и сохраняются в файлы. В итоге получается карта высот, карта эрозии и карта толщины снежного покрова.

Карта высот (сверху), карта эрозии (посередине), карта толщины снежного покрова (снизу)

Создание масок детализации ландшафта


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

Маски, определяющие видимость материалов этих поверхностей на ландшафте, создаются также в World Machine из полученных на предыдущем этапе текстур.
Граф в World Machine, которым формируются все необходимые маски

Скачать terrain_masks.tmd

Маска снега

Маска снежного покрова на поверхности ландшафта

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

Маска камней

Маска распространения камней на поверхности ландшафта

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

Маска травы

Маска распространения травы на поверхности ландшафта

Для этой маски исключаются высоты с которых уже начинается снежный покров.

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

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

Маска скал

Маска скальной поверхности на ландшафте

Карта скал получается исключением всех остальных масок.

Создание масок распространения объектов


Маски деревьев

Маска распредления елей на поверхности ландшафта

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

Все маски деревьев являются взаимоисключающими, чтобы было чёткое разделение зон леса. Небольшие пересечения встречаются только в смежных областях.

В результате получаем маски, по которым можно расположить 4 типа деревьев: ель (spruce), мёртвая ель (spruce dead), сосна (pine), берёза (birch).

Маски цветов

Маски распределения ромашек (сверху) и кипрея (снизу) по ландшафту

Маски ромашек (camomile) и кипрея (blooming sally) получаются простым добавлением процедурного шума в маску травы.

Маски кустарников

Маска распределения кустарников на ландшафте

Маска кустарников (bush mask) создаётся также из маски травы, но с помощью маски эрозии на ней учитываются места, в которых вероятнее всего скапливается больше воды, и отсекается зона, на которой расположены камни.

Камни

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

Создание диффузной текстуры ландшафта


Граф в World Machine, которым формируется диффузная текстура ландшафта

Скачать terrain_color.tmd

Текстура цвета создаётся комбинированием полученных на предыдущих этапах масок. Смешиваются различные цвета, добавляются шумы.

Так, например, добавляется два вида травы — зелёная и сухая. Зелёная трава преобладает в низинах, сухая — на вершинах холмов. Для того чтобы сделать ландшафт визуально темнее под лесом, на него накладывается маска деревьев.

Если потребуется — производятся необходимые доводки цвета в Photoshop или GIMP.

Полученная диффузная текстура ландшафта
Настройка параметров объекта MeshClutter

После того, как получены все необходимые текстуры и маски, сгенерирован ландшафт, настроены все необходимые материалы, остаётся только распространить по нему все подготовленные объекты (деревья, камни, траву, цветы и кустарники).

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

Особенно стоит обратить внимание на то, что распределение объектов в этом случае псевдослучайно — то есть при одних и тех же значениях параметров (и одинаковом значении seed) для двух разных генераторов создаваемые ими объекты всегда будут расположены в одних и тех же местах. Таким образом достигается ещё и детерминированность получаемого результата.


World Machine


Достоинства
  • Кэширование результатов вычислений. При изменениях графа не происходит перерасчёт узлов, на которые эти изменения не повлияли. Это очень удобно и сильно экономит время создания нового контента.
  • Наличие output ноды, которая позволяет выводить в файлы любое количество просчитываемых текстур из любого места графа и пересохранять их по нажатию одной кнопки.
  • Возможность тайлового просчёта больших текстур (tiled build). При этом текстуры рендерятся фрагментами, благодаря чему появляется возможность распараллеливать рендеринг (задействуется многоядерность) и оптимально использовать занимаемую память. Однако не стоит забывать о том, что алгоритм эрозии в этом случае просчитывается симуляцией отдельно для каждого тайла, а не для всей поверхности ландшафта, и склеивание получившихся тайлов текстуры эрозии осуществляется перекрытием их смежных областей.
  • Достаточный набор устройств (базовых блоков которыми создаётся алгоритм по которому формируется ландшафт), для реализации практически любых алгоритмов построения ландшафта.
  • Есть возможность группировки частей графа для создания новых устройств с целью их дальнейшего переиспользования, но, к сожалению, отсутствует инстансинг — вставленные таким образом устройства будут являться копиями.
  • Возможность точного расчета только заданного фрагмента ландшафта. Сильно экономит время при работе над детализацией выбранных участков.

Недостатки
  • Огромное количество проблем при работе с большими объёмами исходных данных (как векторных, так и растровых) и ландшафтами больших размеров. Например, при открытии вектора с данными береговой линии (в несколько тысяч точек) — FPS в редакторе стремится к нулю.
  • Поведение алгоритма эрозии (блока Erosion Device) зависит от финального разрешения ландшафта.
  • Отсутствие инструментов для создания горных рек. Вырезание ландшафта по сплайнам под реку без применения эрозии даёт нереалистичный результат. Если же применять эрозию, то в некоторых местах реку может засыпать поперёк.
  • Отсутствие возможности изменить или отключить интерполяцию исходных текстур.
  • Некоторые мелкие, но очень неприятные недоработки редактора. Например, такие как невозможность задания цифровых значений цвета в устройстве Colorizer (это можно сделать только визуально), использование int вместо float для некоторых параметров и непонятные ограничения в диапазонах значений параметров.

Помимо World Machine можно так же присмотреться к Quad Software Grome Editor, Planetside Software Terragen, или же дописать под свои нужды открытый (лицензия AGPL) GPU-driven генератор ландшафтов Litosphere.

Процедурные генераторы


Главной идеей развития всех процедурных генераторов в идеале должно стать стирание грани между 2D и 3D, ведь 2D — это лишь частный случай 3D.

На данный момент не существует ни одного процедурного генератора, который позволил бы:

  1. создавать алгоритмы формирования трёхмерных объектов (вокселями)
  2. создавать свои собственные алгоритмы запекания текстур и легко перестраивать их под свои нужды

То есть, нет возможности использовать в процедурном генераторе какую-либо информацию с low-poly, high-poly или алгоритмически сформированной воксельной 3D модели для создания, например, генератора бесшовных текстур камня или текстур потёков ржавчины для любой исходной модели.

В таких программах, как 3DS MAX или Substance Designer, есть возможность запекать некоторые карты с моделей, но все они рендерятся зашитыми в программу алгоритмами, которые никак нельзя изменить, и нет возможности создать новые. Надежду подаёт недавно начавшееся внедрение AngelSript в 3D-Coat, но ещё непонятно, к чему хочет привести его автор.

Также давно стоит проблема, которую можно было бы решить уже на текущем уровне развития процедурных генераторов текстур: эти редакторы хорошо научились убирать швы по краям формируемого прямоугольника текстуры (например, методами offset или splat), но до сих пор ни один из них не умеет убирать эти швы на текстуре в местах разрыва UV координат модели.

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


Андрей Кушнер plu1on, Вячеслав Седович slice3d (технические художники Unigine Corp.)

больше, чем просто генератор ландшафтов / Программное обеспечение

В самом начале развития трехмерной графики возникло несколько направлений, каждое из которых было востребовано в своей сфере. Так, наряду с инструментами для создания сложных трехмерных поверхностей, моделирования персонажей и создания анимации, огромным спросом пользовались программные решения, предназначенные для имитации природного ландшафта. Стабильный интерес к программам для генерирования природных ландшафтов вполне объясним и понятен. С одной стороны, эти программы несложны в освоении, и начинающий 3D-художник может создавать трехмерные виртуальные миры сразу после знакомства с программой. С другой стороны, такие программы как Vue, выпускаемая компанией e-on software — это незаменимый инструмент для разработчиков компьютерных игр, которым регулярно приходится создавать реалистичное окружение. К сожалению, многие интересные и перспективные проекты трехмерной графики часто оказываются заброшенными или, не выдержав конкуренции со стороны более мощных компаний, и вовсе «сходят с дистанции». Поэтому сегодня уже мало кто помнит такие названия, как Raydream Studio или Amorphium. Замедлил свое развитие и популярный генератор ландшафтов Bryce, несмотря на большой интерес, проявляемый к нему дизайнерами и художниками. Передаваемый из рук в руки, от одной компании к другой, этот редактор за последние несколько лет практически не развивался. Отчасти это можно объяснить слабой конкуренцией на рынке программного обеспечения для ландшафтного дизайна — один из альтернативных редакторов ландшафтов, Terragen, практически не обновляется, а продукт Mojoworld от компании Pandromeda объективно слабоват для того, чтобы его можно было считать серьезным оппонентом. Ограниченный выбор специальных трехмерных редакторов обусловлен спецификой визуализации таких сцен. Моделирование трехмерных пейзажей отличается от обычного создания трехмерных поверхностей и сопряжено с целым рядом трудностей, которые программистам нелегко преодолеть. Например, один из главных принципов создания реалистичного окружения в 3D состоит в том, чтобы показать зрителю высокую детализацию изображения. Причем поверхности демонстрируемых объектов природы должны иметь уникальную, неповторяющуюся структуру, которую трудно воссоздать стандартным способом, с помощью текстуры высокого разрешения. Моделировать каждую впадину на скале или каждую травинку не представляется возможным, поэтому в основе большинства генераторов природных ландшафтов лежит принцип фрактального алгоритма. Именно по фрактальному алгоритму генерируется трехмерный рельеф поверхности, фрактальный алгоритм определяет естественный неповторяющийся узор на поверхности водной глади, с помощью этого алгоритма моделируется случайная облачность и т.д. Несмотря на то, что для финального просчета трехмерного проекта этот метод используют все популярные генераторы ландшафтов — и Bryce, и Terragen, и MojoWorld, и Vue, — последний редактор выглядит наиболее привлекательно для разработчиков компьютерной графики. В последнее время этот пакет активно развивается и продвигается компанией e-on software, и вполне успешно. Мало кто из зрителей может заметить, что завораживающие пейзажи за спинами актеров в кадрах фильмов «Пираты Карибского моря» или «Индиана Джонс: храм хрустального черепа» — всего-навсего трехмерная подделка, созданная с помощью Vue.

Знакомство с линейкой Vue

Под маркой Vue компания e-one software выпускает целую линейку программ, отличающихся между собой по функциональным возможностям. Самая простая программа из этой линейки называется Vue 7 Pioneer ($49,95). Она позиционируется разработчиками как инструмент для любителей и включает в себя только базовый инструментарий для создания ландшафтов и анимации. Однако при желании можно расширить ее возможности за счет подключаемых модулей, которые приобретаются отдельно. Следующая в иерархии Vue — программа Vue 7 Esprit ($199). Ее основное отличие — интеграция с программой для создания анимации персонажей Poser, а также наличие возможностей экспорта 3D-моделей. Программа Vue 7 Pro Studio ($399) ориентирована на профессиональных 3D-художников и включает некоторые интересные модули, которых нет в более дешевых программах — редактор растений Botanica, LightTune для создания эффектов, связанных со светом, и другие. Еще более подвинутая программа Vue 7 Complete ($599) создана специально для небольших студий. Она по возможностям приближена к Vue Infinite, включает еще больше дополнительных модулей, однако лишена тех функций, которые не нужны пользователям, работающим вне крупных компаний. Что же касается профессионального использования продукции e-one software, то для этих целей выпускаются программы Vue 7 Infinite ($895) и Vue 7 xStream ($1495). Последняя включает в себя все возможности Vue 7 Infinite, а также позволяет использовать программу в паре со всеми основными редакторами трехмерной графики — 3ds Max, Cinema4D, Maya, LightWave и Softimage|XSI. Благодаря тесной интеграции, проекты, созданные в Vue, можно визуализировать в этих программах. Ниже речь пойдет о самой «продвинутой» из линейки программ — Vue 7 xStream.

Интерфейс и начало работы

Несмотря на то, что интерфейс программы выполнен так, чтобы с ним было удобно работать любому, кто уже имеет некоторый опыт работы с 3D-редакторами, все же понадобится некоторое время, чтобы привыкнуть к некоторым его особенностям. Рабочее пространство Vue 7 представлено четырьмя окнами проекции. В активном окне проекции показан вид главной виртуальной камеры, которая включена в сцену уже по умолчанию. Управление видом в окне проекции можно осуществлять при помощи инструментов свитка Main camera. Интересно, что Vue 7 xStream даже поддерживает специальные манипуляторы, среди которых SpaceNavigator, SpaceExplorer и другие устройства, выпускаемые компанией 3Dconnexion. Такие манипуляторы представляют собой альтернативу стандартной мыши и дают возможность пользователю удобно перемещаться в виртуальной среде проекта, над которым идет работа. Вполне сносно сделан инструмент для выполнения операций трансформации с объектом. После выделения трехмерного объекта в окне проекции рядом с ним возникает несколько значков трансформации. При выборе одного из этих значков появляется возможность для масштабирования, вращения и перемещения объекта в сцене. Для управления самими объектами сцены используется World Browser, в окне которого в виде иерархичного списка представлены все компоненты трехмерного проекта, упорядоченные по слоям, типам и названию. Чтобы отредактировать тот или иной элемент сцены, достаточно отыскать его в этом списке и выполнить по нему двойной щелчок. По периметру рабочей области расположены две панели инструментов — вертикальная и горизонтальная. Значки инструментов программы, которые расположены на этих панелях, используются несколько непривычно. Некоторые из них имеют двойную функцию и действуют по-разному, в зависимости от того, какой кнопкой мыши был выполнен щелчок, правой или левой. В этом очень помогают всплывающие подсказки, появляющиеся при наведении курсора на тот или иной инструмент. При работе над обычным трехмерным проектом положение трехмерных объектов в окнах проекций дает представление о том, как будет выглядеть конечная сцена. При моделировании ландшафтного дизайна все обстоит несколько иначе. Помимо трехмерных объектов, которые, безусловно, играют не последнюю роль, в сцене используются атрибуты естественного окружения, такие как атмосфера, облачность и т.д. Эти факторы также влияют на конечный результат работы в программе, и поэтому необходимо иметь представление о том, как эти атрибуты сказываются на внешнем виде природного ландшафта. Решение этой задачи в Vue 7 xStream реализовано с помощью интерактивного окна предварительного просмотра свитка Main Camera — в небольшом окне происходит интерактивная визуализация, которая пересчитывается каждый раз при внесении изменений в проект.

Работа с объектами

В любом 3D-редакторе основу для трехмерного моделирования и создания трехмерных сцен составляют простейшие объекты — своего рода строительный материал для 3D-дизайнера. Поскольку цель Vue 7 xStream — создание трехмерной модели, максимально повторяющей естественную среду, примитивы для построения природного ландшафта несколько отличаются от тех простейших форм, которые часто можно встретить в 3D-редакторах. Так, помимо обычных сферы, куба, тора и остальных примитивов, в программе есть еще примитивы типа скала (rock), вода (water), планета (planet), растение (plant), облачность (MetaCloud). Наличие такого примитива как объемный текст говорит о том, что программа может использоваться и при создании рекламных роликов. Сам по себе текст — плоская фигура, поэтому чтобы придать такому объекту форму, разработчики использовали две настройки выдавливания — обычное выдавливание и выдавливание с фаской. Чтобы в различных проектах текст не выглядел одинаково, можно использовать разную гарнитуру шрифта, а также различный профиль выдавливания. К сожалению, объемный текст на русском не совсем корректно отображается, впрочем, как нам кажется, это не очень большой недостаток, ведь модель трехмерного текста можно легко создать в любом трехмерном редакторе — и Cinema4D, и 3ds Max, и Maya. Также в Vue можно импортировать файлы практически всех известных 3D-форматов: 3DS, 3DMF, COB, DAE, DEM, DXF, LWO, OBJ, PZ3, PZZ, RAW, SKP, VRM и других. Кроме вышеперечисленных примитивов, в Vue 7 xStream предусмотрено создание двух типов гор — Standard Heightfield Terrain и Procedural Terrain. Эти два объекта отличаются между собой тем, что в первом случае плотность полигональной структуры остается одинаковой вдоль всей площади. Процедурные горы имеют более сложную топологию, причем плотность сетки такого объекта зависит от расстояния до него — чем дальше отстоит от виртуальной камеры процедурная гора, тем меньше ее детализация и, следовательно, меньшее количество полигонов используется. Форму как первого, так и второго объекта можно отредактировать с помощью редактора рельефа земной поверхности. Он представляет собой удобный мини-редактор, в котором при помощи виртуальных кистей обозначаются возвышенности и впадины, а также различного рода неровности. Во многом помогает то, что в этом редакторе есть возможность генерирования случайного рельефа для разного типа гор — для каньона, для имитации дюн, колотой формы айсберга и так далее. Аппарат моделлинга в программах для ландшафтного дизайна обычно довольно скуден или вообще отсутствует как таковой. В принципе, это можно считать слабой стороной программы, так как отсутствие инструментов трехмерного моделирования ограничивает возможности 3D-дизайнера. Рассматривая возможности моделирования в Vue, следует отметить, что этот недостаток сведен к минимуму. Во-первых, его с лихвой компенсирует арсенал инструментов для моделирования трехмерных редакторов, с которыми обеспечивается тесная интеграция генератора ландшафтов. Во-вторых, в программу включены несколько важных средств, позволяющих получить несложные трехмерные формы. Так, например, Vue позволяет использовать трехмерные объекты для булевых операций. Еще один инструмент для имитации сложных органических форм — метабол, примитив, который обладает свойством слияния с аналогичным объектом при расположении их в непосредственной близости друг от друга. Используя этот тип объекта, можно быстро создать трехмерную модель, на создание которой обычным способом ушло бы намного больше времени. Работать с метаболами очень просто — достаточно разместить несколько примитивов в непосредственной близости друг от друга и выбрать на вертикальной панели инструментов команду Create Metablob Object.

Редактор материалов

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

Создание анимации

Несмотря на отсутствие в Vue 7 xStream специальных инструментов для создания трехмерных персонажей (если, конечно, не считать таковым возможность работать с моделями пакета Poser), анимации в программе уделено довольно много внимания. Создание и настройка анимации объектов может быть выполнена с помощью пошагового мастера создания анимации. Этот мастер возникает автоматически при выборе любой команды пункта Animation главного меню программы. От «услуг» этого мастера можно отказаться и продолжить настройку анимации вручную, работая с появившейся временной шкалой Timeline. Однако в некоторых случаях мастер создания анимации позволяет заметно сэкономить время, например, при создании анимации движущегося автомобиля или при наличии в сцене летательного аппарата, скажем, вертолета. Работа с мастером анимации позволяет создать анимацию с выбранным объектом в несколько этапов: указывается характер движения объекта, выполняется настройка основных параметров движения (задается цикличность, можно придавать вращательный момент анимируемому объекту и т.д.). Далее определяется траектория движения объекта, которая формируется с помощью узловых точек, через которые должен пройти объект во время перемещения, устанавливается продолжительность движения. На последнем этапе мастера создания анимации можно посмотреть движение объекта согласно указанным настройкам. Если мастер анимации не планируется использовать, его назойливое появление на экране можно остановить, убрав флажок Display this Wizard when creating a new object animation (Отображать этот мастер при создании нового объекта анимации). Другой способ анимации — вручную, для чего используются ключи анимации и треки анимации. Находясь в режиме автоматического создания ключей анимации, можно указать исходные параметры анимируемого объекта, переместить ползунок анимации на нужный кадр и изменить исходные параметры на новые. При этом программа автоматически проследит за изменением значения анимируемого параметра (например, координаты объекта) и в промежуточных кадрах сама поставит надлежащее значение, так, что объект станет анимированным. Чтобы включить режим автоматического создания ключей анимации, необходимо выполнить команду Animation > Autokeyframing. Тонкую настройку характера изменения анимируемого параметра между двумя ключевыми значениями можно осуществлять при помощи кривых анимации, которые являются зависимостью значения анимируемого параметра от времени. Этот метод аналогичен настройке кривых анимации в профессиональных редакторах трехмерной графики, например, в таких, как 3ds Max 2009.

Визуализация проекта

Визуализация (рендеринг) — это заключительный этап работы над трехмерной сценой и занимает немало времени, порой гораздо больше, чем отнимает работа над самим проектом. К тому же проекты, сделанные в Vue 7 xStream, достаточно объемны и сложны. Такие трехмерные сцены с природными ландшафтами включают в себя большое количество поверхностей (листья и ветки растительности, горные кряжи и т.п.), на просчет которых уходит дополнительное время. Для того чтобы ускорить просчет сцены Vue 7 xStream, проект можно визуализировать с помощью связки компьютеров, так называемой рендер-фермы, где задание распределяется между несколькими рабочими станциями и просчитывается параллельно. Кроме того, Vue 7 xStream поддерживает работу с 64-битовыми платформами, что позволяет эффективно использовать системные ресурсы. Если же при всем при этом программа работает слишком медленно, можно попробовать использовать опцию моментальной очистки памяти Purge Memory. Необходимость в ее использовании может возникнуть, например, после удаления из сцены большого, сложного объекта. Эта команда позволяет автоматически выгрузить из оперативной памяти неиспользуемые данные, освобождая системные ресурсы для текущих вычислений. Следует отметить, что визуализация статического изображения и визуализация анимационной сцены в Vue 7 xStream — это разные вычислительные процедуры, которые запускаются разными командами. Так, например, чтобы визуализировать изображение, нужно использовать команду Render > Render. Однако если необходимо просчитать анимационный клип, следует вначале открыть окно с настройками визуализации анимационной сцены (Render > Animation Render Options), указать параметры просчета (разрешение, продолжительность и пр.), указать расположение файла на диске и определить его формат, а только лишь после этого нажать кнопку Render animation в окне настроек. Параметров визуализации в Vue 7 xStream более чем достаточно — от возможности просчета эффектов каустики и глобальной освещенности, до визуализации с эффектом смазанного движения и глубины резкости. Имеется также возможность послойного рендеринга. Поскольку визуализация сложных сцен занимает много времени, удобно использовать инструмент для пакетной визуализации (batch rendering). Составленный список заданий будет автоматически обработан программой, согласно выбранным настройкам визуализации и очередности. Визуализированное изображение (или анимация) — это готовый продукт трехмерного редактора. И, тем не менее, он часто требует дополнительной коррекции. Использовать постобработку изображения для коррекции цветопередачи для большинства 3D-художников — обычное дело. Коррекция изображения бывает необходима даже в тех случаях, когда освещение сцены настроено должным образом. В Vue 7 xStream включены некоторые инструменты для постобработки. После визуализации изображения на экране появляется окно Post Render Options с настройками цветопередачи и некоторыми инструментами для постобработки просчитанного изображения.

Автоматизация заданий

3D-художникам, которые постоянно работают в сфере дизайна и индустрии компьютерных игр, приходится многократно выполнять одни и те же действия. Например, создавая несколько морских сцен для компьютерной игры, необходимо добавить в сцену объект типа Water и загрузить определенную атмосферу. Большинство повторяемых действий в программе можно упростить, создав макрос — определенную последовательность команд. Для создания пользовательского макроса нужно включить режим записи макроса, после чего выполнить тот порядок действий, который необходимо было бы автоматизировать. По окончанию необходимо остановить запись и сохранить созданный макрос в виде отдельного файла c расширением *.vmc. В дальнейшем для запуска макроса необходимо будет воспроизвести его, после чего все заложенные в него действия выполнятся автоматически. Кнопки для записи/воспроизведения макроса расположены на горизонтальной панели инструментов. Можно сэкономить времени еще больше, если созданному макросу назначить сочетание горячих клавиш.

Интеграция с другими 3D-редакторами

Одно из неоспоримых преимуществ версии Vue 7 xStream перед прочими генераторами ландшафтов — возможность использовать профессиональные редакторы для работы с проектами Vue. Процесс интеграции Vue 7 xStream с такими пакетами, как 3ds Max, Cinema4D, Maya, LightWave и Softimage|XSI, происходит автоматически. На этапе инсталляции приложения мастер установки выполняет анализ системы и определяет, какие из 3D-редакторов, поддерживаемые Vue 7 xStream, уже установлены. После этого мастер установки предложит установить дополнительные модули для этих обнаруженных программ. Что же получит 3D-дизайнер, после установки этих модулей, и в чем заключается интеграция с другими программами? После установки специального плагина для 3ds Max в главном меню программы появляется дополнительный пункт Vue 7 xStream. Этот пункт содержит набор вложенных команд, по сути, повторяющих команды главного меню Vue 7 xStream. Таким образом, установив дополнительный модуль для трехмерного редактора, можно загружать готовые сцены 3D-окружения, использовать всевозможные варианты имитации атмосферы, а также различные типы объектов Vue. Интеграция с пакетом Autodesk Maya 2009 происходит несколько иначе. Как и любой другой подключаемый модуль программы, Vue 7 xStream необходимо включать вручную, в настройках 3D-редактора. Для этого следует выполнить команду Window > Settings/Preferences > Plug-in Manager. В списке дополнительных модулей программы следует отыскать модуль с названием Vue7xStream.mll — это и есть установленный плагин. Включается этот модуль с помощью флажка Loaded (Загруженный). Если необходимо, чтобы этот модуль подгружался при каждом последующем запуске Autodesk Maya 2009, следует установить флажок напротив опции Auto load (Автоматически загружать). После этого в главном меню Autodesk Maya 2009 появится пункт Vue 7 xStream, который будет неизменно присутствовать в интерфейсе программы, независимо от того, в каком режиме работы используется 3D-редактор. При использовании дополнительного модуля, можно использовать фотореалистичный визуализатор MentalRay, а также программный визуализатор Maya. В связке с LightWave и Cinema4D программа Vue 7 xStream используется со стандартными модулями визуализации, назначенными в программах по умолчанию. Интересно, что, несмотря на заявленную полную интеграцию с различными пакетами, возможности Vue 7 xStream немного отличаются в разных программах. Например, интерактивное раскрашивание моделей Экосистемами (EcoSystems) или, попросту говоря, размещение объектов растительности по трехмерной поверхности доступно только пользователям 3ds Max и Cinema4D. Что же касается пакетов Softimage XSI, LightWave и Maya, то подобная функция в этих программах пока что только планируется, и соответствующие версии дополнительных модулей находятся на стадии разработки.

Вывод

К сожалению, все возможности программы невозможно вместить в один обзор, однако даже те инструменты, о которых мы успели рассказать, дают возможность получить определенное представление о Vue 7 xStream. Эту программу некорректно было бы сравнивать по возможностям с такими «китами», как Autodesk Maya 2009 или Softimage|XSI, ведь цели и задачи, которые ставили перед собой создатели Vue 7 xStream, совершенно иные. Вместе с тем, нельзя не отметить и то, что постепенно, от версии к версии, продукт компании e-one software набирает обороты и уже по своим возможностям стал выходить за пределы обычного набора инструментов генератора ландшафтов. В программе есть возможность использования внешнего визуализатора, используется сложный алгоритм просчета глобальной освещенности, имеется модуль для просчета динамики в сценах — все это и многое другое явно свидетельствует о намерении разработчиков постепенно наращивать тот самый «недостающий» инструментарий, который пока заменяет интеграция с профессиональными 3D-пакетами от компаний Autodesk, Maxon, Newtek. Если же сравнивать Vue 7 xStream с другими программами для моделирования природных ландшафтов, то тут лидерство продукта от e-on software очевидно. Vue 7 xStream опережает конкурентов буквально во всем — в наличии средств для создания анимации, в тонкой настройке визуализации, в создании самых разных материалов. Очень важно и наличие удобного и понятного интерфейса, который можно освоить за короткое время. На последнем хотелось бы сделать особый акцент, так как создание трехмерных вселенных — это увлекательнейшее занятие, которое наверняка придется по душе каждому, кто захочет поближе узнать о Vue 7 xStream.

Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.

Старый друг лучше новых двух. Генератор ландшафтов. Часть 2 / Хабр

Данная статья зародилась в моей голове, после того, как нам выдали курсач по мультимедийным технологиям в универе. «Универ… пф-ф-ф…» — так подумает мой читатель. Да только иногда здесь бывают дельные вещи. Вот, почему.

В курсаче предполагается создание виртуального ландшафта в старенькой программе VistaPro. В силу того, что раньше я ни с чем подобным не работал, я не могу сказать, насколько она функциональная. Но её большой плюс заключается в том, что она крайне проста в использовании (а другие террагены подчас довольно нетривиальны, что может вызвать некоторые трудности. Час же работы может не гарантировать успеха, в отличие от моего антиквариата), а освоить её от и до: разобрать весь функционал можно меньше чем за день не зная до этого ровным счётом ничего о ней. Небольшим, но всё-таки плюсом является совсем малый вес (~3 МБ). Разумеется, сейчас есть много подобных террагенов, которые обгоняют по функциональности VistaPro.

Здесь можно найти остальные части:

Часть 1

Camera

Основные опции, которые предусматривает данный раздел — это повороты камеры, смена точка дислокации, смена углов обзора, смена высоты обзора. Большую часть можно узнать из подсказок, подведя курсор к соответствующей части интерфейса. Частично мы уже рассмотрели возможности работы с камерой, когда я описывал ландшафт и вид от первого лица. Со многими опциями можно работать отсюда.

Создадим ландшафт.

Landscape size = Small
Image size = 1280×1024


После этого я чутка сглажу местность:


И запущу эрозию до того момента, пока не перестанет меняться ландшафт:


А теперь добавлю немного гор Stretch:


Place camera

А теперь приступим к работе с камерой.

Итак, при запуске VP (VistaPro 4) имеется следующее расположение камеры: мы находимся в цетре границы южной стороны карты, ровно посередине. Взор наш направлен строго на север. Теперь давайте передвинем нашу камеру в сторону (немного побегаем по нашему миру). Для начала поднимемся на гору. Для этого щёлкаем по Place camera, после чего разместим камеру в другой точке:


Аналогичным образом спустимся в долину:


Внимательный читатель заметит, что некоторые параметры меняются в зависимости от того, как мы перемещаем камеру. В частности, меняются координаты камеры (X, Y, Z те, что слева), а также расстояние между камерой и точкой Camera-target distance, куда направлена камера. Изменениям подвержены углы обзора Bank (поворот объекта вокруг его продольной оси или крен), Heading (угловые движения относительно вертикальной оси, т.е. рыскание), Pitch (тангаж или угловое движение относительно главной (вертикальной)). По поводу этих вращений поговорим ниже, а также всё, что связано с координатами.

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

Place target

Вторая степень свободы камеры — изменение позиции взгляда. Выбираем Place target и тыкаем на ландшафту куда-нибудь. Взглянем на гору, которая находится слегка западнее нас:


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

Переведём взгляд чуть восточнее:


И ещё чуть-чуть:


Кстати, я здесь чуть наложал. На скринах в разделе Place target везде зажата кнопочка Z. Но так как мне совершенно не хотелось переделывать скрины, а это практически не на что не влияет, я чуть позже об этом скажу.

И, наконец, глянем себе под ноги (кнопочка Z уже не зажата!!!), немного передвинув камеру, чтобы сюда не залезала граница карты:


X, Y, Z

Что же за магические координатки, с которыми я набажил!? Очень просто. Если зажать одну из, то при изменении состояния камеры, она просто напросто не будет меняться. Например, зажмём X и щёлкнем по самой западной белоснежной горе:


Как видите, по оси X (горизонтальная) мы не сместились никуда.

По образу и подобию можно поиграться с другими координатками.

Также можно выбрать вместо Place camera Place target. И опять кликнем по той же самой вершинке. Теперь взор камеры (плюсик жёлтенький) не менял положения по оси Y:


Подобная ситуация.

Изменения же по оси Z заметны на карте не будут. Только на экране камеры. Для этого можно сравнить скрины из предыдущего раздела:



Отрендеренные:



И, соответственно, можно выставлять координаты ручками, путём вписывания в соответствующее поле какой бы то ни было числки. Это можно делать для жёлтого плюсика или жёлтого квадратика (взгляд камеры или её положение соответственно).

Height above ground

Высота над землёй. Ставить 0 или около того не рекомендую. Велика вероятность попадания в текстуры:


Хотя, на вершине горы вполне себе нормально может выглядеть:


Можно взлететь в космос:


Или побыть птицей:


Camera-target distance

Данная штуковина задаёт Евклидово расстояние (т.е. то, которое применяется наиболее часто, вообще говоря бывают и другие расстояния, например Гёльдерова метрика (Гёльдерово расстояние)):

между положением камеры и точкой взора камеры. Таким образом, если, скажем, для случая:

посчитаем данное знечение, то получим (предварительно отбросив дробные части, так как они роли не сыграют):


Почти. Вот это поворот. Дробная часть всё-таки дала о себе знать. Ну, ничего. Не страшно. Сам факт, мы установили, что есть Camera-target distance. Давайте вернёмся с небес на землю и немного поиграем с этим параметром. Возмём такую позицию:


Теперь выберем 1000. Потом 4000, 8000, 12000, 20000 соответственно:





Отрендеренные:





Меняется только координата Z. Но интересно, что складывается впечатление, будто мы движемся по кривой, которая похожа на параболу. Это происходит из-за того, что всякий раз взгляд камеры в пространстве не меняется (т.е. плюсик направлен в одну и ту же сторону), но в силу изменения положения камеры, угол наклона Pitch должен поменяться.

Bank, Heading, Pitch

Отрендерим ещё один ландшафт.

Landscape size = Small
Image size = 1280×1024


После этого я чутка сглажу местность (5 раз нажмём Smooth):


И запущу эрозию до того момента, пока не перестанет меняться ландшафт (Erode = 5300):


А теперь добавлю немного гор Stretch (10 раз):


Bank позволяет вращаться вокруг продольной оси. Сначала повернём на маленький угол (здесь всё в градусах задаётся) (на 10 градусов влево, т.е. наклон влево):


Теперь на 10 градусов вправо (т.е. на -10):


Ещё чуть-чуть повращаемся:










Перевернёмся в одну сторону (т.е. на -180):


В другую сторону:


Можно повернуться на очень большой угол:


Heading засчёт этого параметра возможно совершать угловые движения относительно вертикальной оси, т.е. рыскание. В отличие от предыдущего угла, на мини-карте на видно, что происходят изменения. Здесь же это заметно.

В одну сторону, на 20:


В другую сторону на -20:


Этот параметр также позволят осуществлять вращения на углы более 360 градусов (или менее 360 градусов).

Pitch — тангаж или угловое движение относительно главной (вертикальной). Данный параметр задаёт смещение жёлтого крестика на карте. Указатель скользит по поверхности мира, указывая на определённую точку на нём. Изначальное положение (как в предыдущих примерах) -29:


Сместим:


Также можно перемещать в другом направлении.

Focal length

Этот параметр я уже рассматривал в прошлый раз. Его можно менять не только численно, но также за счёт «+» и «-« рядом с экраном камеры. Поэтому останавливаться я на нём не буду.

Здесь следует сказать лишь о том, что, помимо ручной настройки, есть также и уже заготовленные углы Wide angle и Zoom lens:



Walk about

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

Генерация фотореалистичных ландшафтов размером с Землю — «Хакер»

Создать реалистичный ландшафт игрового мира вручную — очень трудоёмкий и кропотливый процесс. Спросите об этом художников из компании Bethesda Studios, которые вручную нарисовали эпический мир игры Skyrim. Альтернатива этому сизифому труду — автоматическая генерация ландшафта по заданному алгоритму. В данном случае игровое пространство заново генерируется при запуске игры и каждый раз будет выглядеть по-другому, как в Minecraft. К сожалению, подобные алгоритмы обычно выдают не очень реалистичный результат, который лишь отдалённо напоминает природный пейзаж, там могут быть куски ландшафта совершенно фантастического вида. Например, в Minecraft это летающие острова и нависающие над землёй обрывы. Хотя такие сюрреалистичные структуры добавляют шарма Minecraft, они никак не совместимы с задачей создать правдоподобную картину мира.

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

На видео можно оценить, как работает движок Outerra.

На их сайте лежит техническое демо, так что запустить генерацию реально на своём собственном компьютере. Минимальные системные требования — графический ускоритель Nvidia 8800GT или лучше, ATI 4850 или лучше, 512 МБ памяти для GPU, а также двухъядерный CPU.

Ландшафт динамически подгружается по мере исследования территории, причём в любой момент вы можете перейти от самого крупного к самому мелкому масштабу в любой точке планеты.

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

Процедурная генерация планетарных карт / Habr

Речь пойдёт о картографии, имеющей дело с фантастическими мирами.

Положение дел с процедурной генерацией карт


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

Давно и хорошо известны методы создания карт и рельефов для небольших территорий:
метод срединного смещения, метод шумовых функций (Noise Functions). Сравнительно недавно появился интересный способ основанный на разбиении плоскости полигонами Polygonal Map Generation for Games. Существует сайт, где собраны ссылки на различные ресурсы по искусственной генерации рельефов.

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

Вообще, будем отличать в дальнейшем рельеф от карты: рельеф считаем разновидностью текстуры и имеем возможность его наблюдать, в отличие от рельефа, карту можем „пощупать“, это подразумевает, что объекты карты должны быть самостоятельными сущностями и существует определённый способ, которым можно их изменять. К тому же, наличие карты не отменяет существование и наблюдение рельефа.

GIS и OpenStreetMap как способ представления фантастических карт


Существует множество программных средств и стандартов для работы с картами Земли. Географические информационные системы предназначены для захвата, манипуляции, анализа и представления всех типов географических данных. OpenStreetMap (OSM) является одним из примеров GIS, который призван собирать географические данные и выдавать их в свободный доступ.

Широкий спектр разнообразных GIS, а так же множество программных средств и техник, появившихся в результате развития проекта OpenStreetMap, просто напрашивается использовать для работы с картами фантастических планет. Если бы такие уже существовали как существует Земля с ее поверхностью.

Процедурная генерация планеты


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

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

Без разрывов отображаем сферу планеты на соединённые в основании круглые конусы, линия экватора, при этом, должна совпадать с линией соединения конусов. В конце процесса построения рельефа на конусах делаем обратное отображение на сферу. Конечно, искажений не избежать, но, делая отображения по-разному, возможно различно распределить результирующие искажения на сфере. Хорошая новость — полностью избавляемся от вычисления тригонометрических функций.

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

distortion
Такое отображение хорошо подходит к планетам, у которых вблизи полюсов океаны или белые пятна. У экватора или в средних широтах визуально заметить привносимые искажения трудно (искажения, привносимые выбранной основной сеткой, могут быть заметны сильнее).
Два уровня генерации карты

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

На примерах планет, которые были изготовлены, gn=7. Что является довольно скромной величиной и, в процессе оптимизации алгоритмов и наращивании „железа“, будет возможность постепенно увеличивать gn для новых планет.

Процесс построения основной сетки. Делим экватор 4*2gn точками на одинаковые отрезки длины l, далее отступаем по нулевому меридиану расстояние l на север и делим параллель, на которой находимся, на 4*(2gn-1) отрезков. Продолжаем процесс далее до полюса, уменьшая при каждой итерации количество точек на каждой следующей параллели на 4. То же самое делаем с южной полусферой. Каждая точка глобальной сетки определяет ромб на конусе (исключения: точки полюсов, которым нет сопоставимых ромбов) и весь двойной конус оказывается поделён на ромбы. Заметим, что это ромбы на поверхности круглого конуса, а не на плоскости. На следующем рисунке изображен фрагмент основной сетки ромбов, содержащий четверть верхнего конуса для gn=2 (без претензии на точность, но полезно для уяснения сути дела).

mesh
Переход к сетке на сдвоенных конусах приводит к неожиданному результату: точки основной сетки (без полюсов) компонуются в массив размерностью 2gn на 4*2gn. Для этого сначала заносим в массив точки южного конуса и экватора, а затем справа на свободные места помещаем точки северного конуса, при этом развернув их слева направо. Как следствие, многие алгоритмы в реализации на конусах выглядят проще чем их возможные аналоги на сфере.

Вот, например, как может просто выглядеть код функции увеличивающей высоту окрестности южного полюса радиусом r на единицу (реальная функция в коде проекта выглядит иначе, учитывая более общий случай).

    import Data.Array.Base
    import Data.Array.ST

    type Height = Int
    type GHeights = UArray (Int,Int) Height
    type GHeightsMutable s = (STUArray s (Int,Int) Height)

    -- | Make Heights array mutable
    thawGHeightsArr :: GHeights -> ST s (GHeightsMutable s)
    thawGHeightsArr = unsafeThaw

    -- | Increase values around south pole
    shiftSouth :: GHeights -> Int -> GHeights
    shiftSouth hs r = runSTUArray $ do
        a <- thawGHeightsArr hs
        mapM_ (\y ->
            (mapM_ (\x -> do 
                v <- readArray a (x,y)
                writeArray a (x,y) (v + 1)
              ) [1..4*y])
          ) [1..r]
        return a

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

Основной параметр локальной сетки — величина ln, которая задаёт количество шагов сетки в двух направлениях: 2ln+1 и 2*2ln+1 соответственно. На рисунке пример ромба с локальной сеткой при ln=3.

lmesh
Для генерации рельефа можно осуществить алгоритм, при котором в памяти обязан находится только массив высот одного ромба. Это позволяет осуществить генерацию планет с высоким разрешением объектов карты.

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

island model
Реки и озера

Существует работа посвященная созданию речной системы. Но двухуровневый характер генерации потребовал создать специфические алгоритмы составляющие реки из отдельных кусков. Схематическое изображение рек для небольшого острова смотрите на рисунке. Итоговое изображение рек будет зависеть от их полноводности в устье.image
Озера возникают как места локальных минимумов в основной сетке высот. Задача состоит в том, чтобы определить полигон, внутри которого содержится этот локальный минимум.

Поэзия карт


Несколько красивых фрагментов карт несуществующих миров, которые возникают в результате реализации описанного алгоритма.

image image

image image

image image