Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Генерация архипелагов с помощью diamond-square

Генерация архипелагов с помощью diamond-square

Поделиться
BakuardПользовательwww10 июня 201719:17#0
Доброго времени суток.

Карты сгенерированные с помощью алгоритма diamond-square представляют собой большой единый материк посреди океана. Мне же нужна карта состоящая из небольших островов разделенных океаном. Я понимаю что нужный мне результат можно получить каким-то образом объединив несколько сгенерированных шумов, но совершенно не представляю как это сделать.

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

VoidSpiritПостоялецwww10 июня 201721:43#1
Я бы карту diamond-square объединял с другой, которая в явном виде разбрасывает цепочки пятен в качестве архипелагов. Объединять перемножением или сложением с нормализацией.
Как вариант: нашлепать группу или цепочку рандомного размера пятен с размытыми краями, можно исказить их с помощью карты смещений по X и Y. Карты смещений генерить из того же шума Перлина (очень, кстати, здорово получается)
foxesПостоялецwww10 июня 201723:05#2
Я сам от перлина перехожу к diamond-square потому что перлин слишком много жрет для пересчета в реальном времени. И он не обязательно для отдельного материка. А диаграмма воронова возможно, но дает очень красивый результат.
https://habrahabr.ru/post/111538/

Есть такая утилита для unity3d

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

Правка: 10 июня 2017 23:12

SalamandrПостоялецwww11 июня 201720:13#3
BakuardПользовательwww12 июня 20176:34#4
спасибо Salamandr. Демку видел, и кажется она может генерировать  только один остров (материк) посреди океана. А моя цель - множество маленьких островов разбросанных на расстоянии друг от друга.
exchgПостоялецwww12 июня 201719:59#5
Да возьми уже матрицу NxM забей рандомно нулями и единицами,
там где единица генери остров используя diamond-square.

PS забивать можно с заданной вероятностью появления единицы,
пусть это будет например 0.3

Правка: 12 июня 2017 20:00

BakuardПользовательwww13 июня 201712:20#6
exchg, как я понял - вы предлагаете разбить некоторую большую карту на небольшие участки и для некоторых участков генерировать остров?
VoidSpiritПостоялецwww13 июня 201712:27#7
Bakuard
Чтобы было больше островов - нужно генерить шум, начиная не с первой октавы, а с 3-4-й, так он не будет иметь крупных гармоник.
И все же советую набрасывать для островов дополнительные данные - конусы, пятна и т.п.

Правка: 13 июня 2017 12:40

exchgПостоялецwww13 июня 201712:46#8
Bakuard
> как я понял - вы предлагаете разбить некоторую большую карту на небольшие
> участки и для некоторых участков генерировать остров?
именно.

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

Правка: 13 июня 2017 12:48

BakuardПользовательwww14 июня 20177:50#9
Спасибо большое exchg. Ваш совет мне помог. Думаю тему можно закрыть.

/ Форум / Программирование игр / 2D графика и изометрия

Тема закрыта.

2001—2017 © GameDev.ru — Разработка игр