Как я могу создать рельеф типа Worms?

Я работаю над игрой в стиле Worms и хочу создать некоторую территорию процедурно. Я уже делал много генерации местности с использованием шума perlin, и именно это я начал использовать для этой игры. Единственная проблема заключается в том, что это слишком просто и скучно, давая мне несколько холмов, но не сложность, которую я хочу. Я хотел бы иметь такие функции, как пещеры и висячие горы, и я не против плавающих островов и т. Д. Что-то вроде этого, но даже более сумасшедшее будет в порядке:

введите описание изображения здесь>> </p>

<p> Я подумал о том, чтобы сначала создать ландшафт с использованием классического шума perlin, а затем просто удалить части для создания пещер, а что нет, но у меня проблемы с удалением этих частей. Существуют ли альтернативы созданию такого ландшафта? </p></body></html>

43 голоса | спросил Xeon06 5 MonEurope/Moscow2011-12-05T19:02:23+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 19:02:23 +0400 2011, 19:02:23

3 ответа


47

Я предлагаю вам начать с 2D-шума Perlin. Что-то вроде этого:

perlin-noise

Затем примените порог на изображении, чтобы вы получили несколько изолированных островов, как показано здесь:

perlin noise with threshold

Я выбрал порог 0.04, все выше порога будет окрашено в синий цвет. Остальные остаются черными. Затем, после этого, пришло время определить, какие «острова» сохранить и которые нужно выбросить.

Возможным подходом было бы прохождение изображения слева направо на разных высотах и ​​выбор пересекающихся «островов» с определенной вероятностью. На рисунке ниже самая низкая линия имеет вероятность 100%, поэтому каждый пересекаемый остров будет выбран (заполнен белым). Вторая линия имеет вероятность 50%, а самая верхняя строка имеет вероятность 10%.

Как только у вас есть отмеченные вами острова, вы можете закрыть промежутки между ними, применив морфологическая операция ( dilate )

расширенные острова

И есть возможный ландшафт.

«Зеркальность» шума будет определять, насколько малы данные в вашем мире. Поэтому лучше всего экспериментировать с этими значениями.

Также, где и с какой вероятностью ваши «линии выбора» позиционируются, результат будет значительно отличаться. Если у вас есть линия рядом с верхней частью изображения с большой вероятностью «выбрать» остров, то вы можете построить какой-то ландшафт пещеры и т. Д.

ответил bummzack 5 MonEurope/Moscow2011-12-05T22:34:49+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 22:34:49 +0400 2011, 22:34:49
6

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

ответил Ravachol 5 MonEurope/Moscow2011-12-05T20:39:48+04:00Europe/Moscow12bEurope/MoscowMon, 05 Dec 2011 20:39:48 +0400 2011, 20:39:48
3

Я действительно реализовал это, начиная с отличного ответа от bummzack.

Вот шаги, которые я закончил:

  1. Создание изображения с шумом Perlin
  2. Floodfill, где вы хотите найти какой-то ландшафт.
  3. Дилатация + эрозия для удаления слишком маленьких впадин
  4. Удалите оставшиеся области фона внутри рельефа.
  5. Сглаживание

И это пример результата: пример сгенерированной местности

Я написал подробную статью обо всем процессе здесь , а код (JavaScript) - это с открытым исходным кодом, проверьте его , если вы хотите что-то готовое к использованию;)

ответил Julian Go 1 PMpSun, 01 Apr 2018 22:29:43 +030029Sunday 2018, 22:29:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132