Создание ландшафта для плиточного 2D-платформера

15

В настоящее время я работаю над плиточным 2D-платформером, в чем-то похожим на Terraria, хотя у меня возникают трудности с генерацией ландшафта. У меня есть некоторые основы, хотя они не приносят ничего полезного.

Я пробовал несколько разных техник, таких как Perlin Noise, и читал о некоторых других, таких как Midpoint Displacement, хотя я не уверен, какой из них будет лучше, или сочетание разных техник для создания разных областей. (Например, смещение средней точки для общей формы местности и шум Перлина для пещер.)

Я нашел отличное объяснение того, как я мог бы наслоить его с помощью библиотеки случайных шумов , хотя это на C ++, и я не знаю достаточно C ++, чтобы скомпилировать его в DLL, которую я могу использовать из C #. Я пытался скопировать это в C #, хотя я не знаю, как я могу объединить два эффекта вместе (градиент для общей базы, а затем фрактал для деталей).

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

Пример хорошей карты, хотя лучше с некоторыми улучшениями. (Черный сплошной, белый воздушный):

Хорошая карта

И пример ужасной карты. (Черный сплошной, белый воздушный):

Страшная карта

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

Любые примеры будут очень цениться.

Затененные размеры
источник
Привет, мне было интересно, как ты это сделал. Я пытаюсь понять, как генерировать такие миры, и мне нравятся результаты, которые вы получаете. Какой алгоритм вы используете, потому что он не похож на перлин-шум 2D и определенно не перлин-шум 1D.
G3tinmybelly

Ответы:

8

Я бы попробовал придерживаться шума Перлина, но добавив к нему вес в зависимости от роста, чтобы обеспечить определенную среднюю плотность на определенных высотах. Цитирую часть поста Нотча о генерации ландшафта Minecraft :

Поэтому я переключил систему на аналогичную систему, основанную на 3D-шуме Перлина. Вместо выборки «высоты земли» я рассматривал значение шума как «плотность», где все, что ниже 0, будет воздухом, а все, что выше или равно 0, будет землей. Чтобы убедиться, что нижний слой сплошной, а верхний нет, я просто добавляю высоту (смещение на уровень воды) к полученному результату.

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

Это даст вам хороший наземный ландшафт, с некоторыми выступами и интересными особенностями, а также с несколькими пещерами и плавучими островами. (Если вам не нужны плавающие острова, вы можете проверить их и удалить их вручную.) Этот метод не даст вам таких вещей, как туннели, поэтому вам понадобится метод для их добавления после генерации ландшафта, такой как случайные блуждания .

dlras2
источник
Не совсем уверен, что я использую Perlin Noise для его полного потенциала. После того, как вы проделали то же самое, что вы описали, он сделал много пещер с множеством плавучих островов. Нет фактических определений типа местности. Используя градиент для взвешивания результатов, я получаю этот результат .
Затененные размеры
@Shaded Dimensions - Ваши параметры Perlin Noise нуждаются в настройке. У вас очень изменчивый шум, когда то, что вы хотите, является гораздо более плавным, более широким паттерном. Проверьте freespace.virgin.net/hugo.elias/models/m_perlin.htm и попробуйте поэкспериментировать с вашими параметрами. Попробуйте снизить стойкость и меньше октав. (Эти условия могут отличаться, поэтому прочитайте эту статью.)
dlras2
Хорошо, спасибо за ссылку. Я также узнал, что вес не работал должным образом после изменения нескольких параметров.
Затененные размеры
Ладно, я немного изменил параметры, и у меня получилось что-то вполне приемлемое, по крайней мере, на данный момент. Я также удалил генерирующие пещеры только для этого теста, так как я хотел сначала сделать реальную местность. Это конечный результат . Просто нужно добавить чеки, чтобы удалить эти плавающие острова. Еще раз спасибо.
Затененные размеры
@ Затененные Размеры - Хорошо! Много времени, хорошие ландшафты получаются из-за просто настройки параметров и наложения шума. Пройдет некоторое время, прежде чем вы получите что-то, чем вы очень довольны, но вы всегда можете использовать то, что у вас есть сейчас, и вернуться, чтобы добавить завершающие настройки. Удачи!
dlras2