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

0802cea641dc4784a8f44baaf8eabd53.JPG

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

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

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

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

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

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

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

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

YouTube

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

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

Vista Pro

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

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

06fa271c64a0452f9c8a33d4322aa55d.jpg

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

c145114f719148f58d998316d75e1fc8.jpg

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

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

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

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

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

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):

a2cd994006d34a3e8b1db4229795e374.jpg
8d2f717586504dbcbb69f1a3d2d8deb0.jpg

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

611dee4d6c5e41d48948beceda53265b.jpg
a6b55a5b529046c08828200e71dfa6ec.jpg

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

Сравните (FeatureSize = 1 и FeatureSize = 8):
a2cd994006d34a3e8b1db4229795e374.jpg
611dee4d6c5e41d48948beceda53265b.jpg

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

d9520ad11dd748a1a6f3f4f7d7622501.JPG
a049ef10b82947df8f2a7aabb0e1c4ac.JPG

И ещё(FeatureSize = 1 и FeatureSize = 8):
8d2f717586504dbcbb69f1a3d2d8deb0.jpg
a6b55a5b529046c08828200e71dfa6ec.jpg

Отрендеренные для тех же значений соответственно:
244ce9d6a77d4a489484f5ca6112fc7d.JPG
508bcbe2d66d4ec5852e23ff2761a869.JPG

Set landscape

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

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

3513f7da1211483aa15a53e9d61fa3c9.jpg

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

5f502ec4f5d644f69020582d4cdf69c0.jpg

Small:

b306edab314a4cab8f5345a66af92d66.jpg

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

2859f16f0ec34d1fb4ce2405ba2768c2.jpg
3f1b43670f6c4c6d9f3633e3ca20c83c.jpg

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

Fractal roughness

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

c868f180d60c4d2cbf0714950a87433c.jpg
e7ca98d3e5ba4c66912b8607277708a6.JPG

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

5fb4aab39fbf4ef390c2f916c1853450.jpg
25c61d0cb8184c3897da7e4a44dd5f67.JPG

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

Enlarge section

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

441443507ddf49d88f3678cf51ebb461.jpg

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

f91415be3b034ded9961d7bc78e3f103.jpg
d57ba0cdf8b0407a956f3a2849b11de1.jpg

6ffe6f7f25814b3fa9fe3c6f5298f8e5.JPG
053f85ccd01542d7a551067373e08b4c.JPG

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

7f20604bd8ba4d4dbc9a608f08d87f05.JPG

Smooth

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

cf38667784904a69964606698853e73a.jpg
dabfa1db6f324dae9005f2c21d131be8.JPG

Erode

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

6d6d78a9e83f4f71815cf7fc55cab01c.JPG
0fcbc0ab6d2f44408dffd9cddaf6cd18.jpg

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

0d154293db204d089696b6ce102f06af.jpg
91f9b579d7c1480790fa1926369aa6ca.JPG

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

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

Roughen

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

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

После Roughen:
5600910529a54d7f940f5eb381b2e49c.jpg
c378dc185eb344f5a6fc0e62322b9dcc.JPG

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

Stretch

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

e0dc5ed2e8374403916cd2e07ae5988c.jpg
f6ccb8f60d3240778348d08d3b1bff2b.JPG

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

a93e9e53eb0741d6bbec0a172424db61.JPG

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

Экран VistaPro

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

Ландшафт

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

8272a7109891460d8a25c8aef13f5776.jpg

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

7b1f7b88d8374b61919bf1e5395be14d.jpg

Камера

fbd324fa6e354bd28469753b5c65d8f5.jpg

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

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

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

fedce8addd7f48e0bc5f58fe40b51c5c.jpg
8a76e0168f704c9e966579c1824df4d7.jpg

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

04929c7a79364eb89e59e8ffeddd3b75.jpg
947f4e4c44654be0a34e0e983fb62fbf.jpg

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

16c401f252de43c4aad4f1688516d7e1.jpg

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

c3b53051a24d47cca19c0b422db52d3f.jpg

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

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

c3b53051a24d47cca19c0b422db52d3f.jpg
4672b04bfc6648d8aec5b314a08ff1ab.jpg

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

bd9415d1bfaa4099855f0fab7480e0db.jpg
e146a97531794514a73035c2420c1423.jpg

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

11ce711c13454781a7bab793c2c9c115.jpg

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

cea3b6e00e4c4d5b97c70f323caf8958.jpg

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

Вкладки

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

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

© Geektimes