В настоящее время я работаю над плиточным 2D-платформером, в чем-то похожим на Terraria, хотя у меня возникают трудности с генерацией ландшафта. У меня есть некоторые основы, хотя они не приносят ничего полезного.
Я пробовал несколько разных техник, таких как Perlin Noise, и читал о некоторых других, таких как Midpoint Displacement, хотя я не уверен, какой из них будет лучше, или сочетание разных техник для создания разных областей. (Например, смещение средней точки для общей формы местности и шум Перлина для пещер.)
Я нашел отличное объяснение того, как я мог бы наслоить его с помощью библиотеки случайных шумов , хотя это на C ++, и я не знаю достаточно C ++, чтобы скомпилировать его в DLL, которую я могу использовать из C #. Я пытался скопировать это в C #, хотя я не знаю, как я могу объединить два эффекта вместе (градиент для общей базы, а затем фрактал для деталей).
В настоящее время я использую плазменный фрактал, и результаты чрезвычайно разнообразны. Например, он может генерировать ландшафт там, где практически нет поверхности, или он может генерировать ландшафт там, где вообще нет поверхности.
Пример хорошей карты, хотя лучше с некоторыми улучшениями. (Черный сплошной, белый воздушный):
И пример ужасной карты. (Черный сплошной, белый воздушный):
По сути, я спрашиваю, что было бы лучшим способом создания ландшафта или принуждения его обеспечить достаточную площадь поверхности с минимальным временем генерации. Или, в качестве альтернативы, как я мог бы достичь того же результата, что и библиотека случайных шумов, но в C #.
Любые примеры будут очень цениться.
источник
Ответы:
Я бы попробовал придерживаться шума Перлина, но добавив к нему вес в зависимости от роста, чтобы обеспечить определенную среднюю плотность на определенных высотах. Цитирую часть поста Нотча о генерации ландшафта Minecraft :
По сути, вы берете небольшой кусочек ландшафта Minecraft. Так что генерируйте 2D шум Перлина, но взвесьте его так, чтобы все, что выше определенной точки, вероятно, было воздухом, а все, что ниже определенной точки, вероятно, было землей.
Это даст вам хороший наземный ландшафт, с некоторыми выступами и интересными особенностями, а также с несколькими пещерами и плавучими островами. (Если вам не нужны плавающие острова, вы можете проверить их и удалить их вручную.) Этот метод не даст вам таких вещей, как туннели, поэтому вам понадобится метод для их добавления после генерации ландшафта, такой как случайные блуждания .
источник