Я работаю над игрой в стиле червяков и хочу, чтобы процедурно создавался ландшафт. Ранее я много занимался созданием ландшафта с использованием перлин-шума, и это то, что я начал использовать для этой игры. Единственная проблема в том, что это слишком просто и скучно, что дает мне некоторые трудности, но не сложность, которую я хочу. Я хотел бы иметь такие особенности, как пещеры и висящие горы, и я не против плавучих островов и тому подобное. Как то так, но даже безумнее было бы хорошо:
Я подумал о том, чтобы сначала создать ландшафт с использованием классического перлин-шума, а затем просто удалить детали, чтобы создать пещеры, а что нет, но у меня возникли проблемы с удалением этих частей. Есть ли альтернативы созданию такой местности?
Ответы:
Я бы посоветовал вам начать с 2D Perlin-noise. Что-то вроде этого:
Затем примените порог к изображению, чтобы вы получили несколько изолированных островков, как показано здесь:
Я выбрал порог 0,04, все, что выше порога, будет окрашено в синий цвет. Остальные остаются черными. Затем, после этого, пришло время определить, какие «острова» оставить, а какие выбросить.
Возможный подход заключается в том, чтобы проходить изображение слева направо на различных высотах и выбирать пересекающиеся «острова» с определенной вероятностью. На рисунке в качестве примера самая низкая линия имеет вероятность 100%, поэтому будет выбран каждый остров, который она пересекает (закрашено белым). Вторая линия имеет вероятность 50%, а самая верхняя линия имеет вероятность 10%.
После того как ваши острова будут помечены таким образом, вы можете сократить промежутки между ними, применив морфологическую операцию ( расширение )
И есть возможный пейзаж.
«Детализация» шума будет определять, насколько малы будут детали в вашем мире. Так что, вероятно, лучше всего поэкспериментировать с этими значениями.
Кроме того, где и с какой вероятностью позиционируются ваши «линии выбора», результат будет сильно отличаться. Если у вас есть линия в верхней части изображения с высокой вероятностью «выбрать» остров, то вы можете построить какой-нибудь пещерный пейзаж и т. Д.
источник
24
дляbaseX
аbaseY
, 1 октава и я выбрал вывод градаций серого и отключил «фрактал». На каком языке вы это реализуете?Я бы начал с шума перлина, тщательно отфильтрованного. Вы закончите чем-то, как на картинке, прикрепленной к вопросу, с плавающими островками. Juste затем удаляет плавающие острова, используя алгоритм подсчета, подобный рассмотренному здесь.
источник
Я действительно реализовал это, начиная с отличного ответа bummzack.
Вот шаги, которые я закончил:
И это пример результата:
Я написал подробную статью обо всем процессе здесь, и код (JavaScript) с открытым исходным кодом, проверьте его, если хотите что-то готовое к использованию;)
источник