Diamond Square

Мой генератор

Автор:

Здравствуйте, народ. Сегодня я начал разработку своей мечты: игры с огромным миром, где случайно генерируется ландшафт, поселения, квесты... практически все. Амбиций много, а знаний мало. За сегодняшний день я написал свой первый генератор высот с алгоритмом Diamond Square и разнообразил его цветовой гаммой. Но такая генерация не дает желаемого результата, так как мир содержит только одну поверхность, то-есть его можно представить как однозначное отображения множества координат в множество высот. Она не даст выступов, арок, пещер, рек. В остальном генератор мне нравится. Пока что он генерирует карту всего мира заданного размера (в конструктор входит три параметра: сторона блока генерации, кол-во блоков по горизонтали, по вертикали; по умолчанию имеет сторону блока 256 пикселов, 4 блока по горизонтали, 2 по вертикали, то бишь карта размером 1024*512).

map | Мой генератор

На картинке видно, что происходит сквозная генерация (слева-направо, сверху-вниз, также между блоками).

map | Мой генератор

Так генерируется большинство карт.

Из мировой карты будут "попиксельно" генерироваться чанки. Хочу услышать глас народа.

#генерация ландшафта, #процедурная генерация

10 января 2016

Комментарии [10]

#1
21:18, 14 янв 2016

Как только увидел карту - сразу кликнул читать. Интересно! Я делал на шуме Перлина: Изображение

Почитал по Diamond-Square - оказывается, его знал, но в виде фрактала Plasma. Попробую у себя его применить. Спасибо за вдохновляющий пост, всё-таки, через 4 года продолжу разработку своей "стратегии мечты".

#2
15:13, 17 янв 2016

Я рад, что кто-то откликнулся! Собираюсь продолжать, заминка вышла по причине прочтения книги по OpenGL. Также перенесу на С++ и там уже сделаю трехмерную визуализацию. Накидайте алгоритмов генерации, господа! Всяких разных.

#3
5:56, 18 янв 2016

Классно получилось)
Мне бы пригодилась такая генерация планет для моего космо рогалика)

#4
15:27, 23 янв 2016

Хорошая вещь  эта плазма. Вот что получается ( тут 1 тайл в 1 пиксель):
Изображение
И вот:
Изображение
- тут под 10000 тайлов, как на средней карте в третьей Циве

#5
20:09, 23 янв 2016

Так, я перехожу с джавы на плюсы. Сейчас я тренируюсь с графикой. Делаю что-то типа Flappy Bird. Скоро будет продолжение). 
GeneralVimes
> Хорошая вещь  эта плазма.
А что за алгоритм?

#6
20:24, 23 янв 2016

Это он же, Diamond-Square.

#7
21:54, 25 янв 2016

А как у Вас так отношение суши к воде грамотно выходит?

#8
22:04, 25 янв 2016

Хитрость вот в чём. Сначала задаю по углам принудительно нули, средние точки вычисляю по Diamond-Square со случайной компонентой, причём если оказывается, что высота отрицательная, ставлю принудительно в 0.

В результате имеем некоторый диапазон высот, от 0 до некоторого hMax.
Я этот диапазон делю на 255 интервалов и считаю, сколько тайлов попало в каждый интервал. А затем смотрю, на какой высоте нужно провести уровень моря, чтобы, например, 70% тайлов были водяными.

#9
12:37, 27 янв 2016

А цвета определяются с помощью линейной интерполяции? От темно-синего до светло-синего и от темно-зеленого до светло-зеленого. И вот еще вопрос: hMax Вы считали как? Перебором на самый высокий тайл или заведомо известной формулой?

#10
19:23, 6 мар 2016

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

hMax действительно, какой выходит - такой и выходит.

Но самое главное - у меня наконец-то получились реки!
Реализация рек | Мой генератор

Они будут течь не как в Циве между клетками, а по клеткам.

Diamond Square

Тема в архиве.