Старый друг лучше новых двух. Генератор ландшафтов. Часть 1
Данная статья зародилась в моей голове, после того, как нам выдали курсач по мультимедийным технологиям в универе. «Универ… пф-ф-ф...» — так подумает мой читатель. Да только иногда здесь бывают дельные вещи. Вот, почему.
В курсаче предполагается создание виртуального ландшафта в старенькой программе VistaPro. В силу того, что раньше я ни с чем подобным не работал, я не могу сказать, насколько она функциональная. Но её большой плюс заключается в том, что она крайне проста в использовании (а другие террагены подчас довольно нетривиальны, что может вызвать некоторые трудности. Час же работы может не гарантировать успеха, в отличие от моего антиквариата), а освоить её от и до: разобрать весь функционал можно меньше чем за день не зная до этого ровным счётом ничего о ней. Небольшим, но всё-таки плюсом является совсем малый вес (~3 МБ). Разумеется, сейчас есть много подобных террагенов, которые обгоняют по функциональности VistaPro.
Данная статья претендует на описание сего софта, дабы показать возможности творения и помочь разобраться с программулиной людям, кого данная тема интересует, ибо в сети не очень много информации о VistaPro. Помимо этого интересно, что данная вещь представляет собой архаическую субстанцию 90х годов, которая, может быть использована и сейчас вполне себе неплохо.
Я максимально подробно пишу всё, будто я это делаю для школьника 4-5 лет, ибо сам часто сталкиваюсь с тем, что написано очень заумно, в результате приходится тратить много времени на то, чтобы разобрать: а что же всё-таки написано?.. Конечно, мой читатель может сказать, что слишком большое количество деталей читать бывает слишком скучно и утомительно. Но, пока я остановлюсь именно на таком стиле изложения.
Итак, здесь можно будет найти описание функционала VistaPro, а также иллюстрацию работы большинства опций.
К сожалению, части статьи верстаются в разное время с разными ладшафтами, поэтому ладшафты от разу к разу будут самими разными.
Кроме того, я поэтапно создам мирок или два для демонстрации возможностей программулины.
Посмотреть то, что может VistaPro можно, например, тут, на видосике:
YouTube
Что же, начнём.
Скачать сей объект можно здеся:
Vista Pro
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
Создаём своё видео.