Генерування місцевості для 2D-платформ на основі плитки


15

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

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

Я знайшов чудове пояснення того, як я міг би розшаровувати його з Бібліотекою випадкових шумів , хоча він знаходиться в C ++, і я не знаю достатньо C ++, щоб скомпілювати його в DLL, який я можу використовувати з C #. Я спробував скопіювати це в C #, хоча я не знаю, як я можу об'єднати два ефекти разом (градієнт для загальної бази, а потім фрактал для деталей).

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

Приклад нормальної карти, хоч краще з деякими вдосконаленнями. (Чорний твердий, білий - повітряний):

Гарна карта

І приклад жахливої ​​карти. (Чорний твердий, білий - повітряний):

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

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

Будь-які приклади були б дуже вдячні.


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

Відповіді:


8

Я б спробував дотримуватися шуму Перліна, але додаючи йому вагу, виходячи з висоти, щоб забезпечити певну середню щільність на певних висотах. Процитуйте частину публікації Notch про покоління Minecraft :

Тому я переключив систему на подібну систему, засновану на 3D-шумі Перліна. Замість вибірки "висоти землі" я розглядав значення шуму як "щільність", де все, що нижче 0, було б повітрям, і все, що перевищує або дорівнює 0, було б землею. Щоб переконатися, що нижній шар твердий, а верхній - ні, я просто додаю висоту (зміщену рівнем води) до вибіркового результату.

По суті, ти береш невеликий шматочок місцевості Minecraft. Отже, генеруйте 2D Perlin-шум, але важте його так, що все, що вище певної точки, швидше за все, буде повітрям, і все, що нижче певної точки, швидше за все, буде землею.

Це дасть вам хороший грунтовий ландшафт з деякими перегінами та цікавими особливостями, а також печерами та плаваючими островами. (Якщо ви не хочете плаваючих островів, ви можете протестувати їх і видалити їх вручну.) Цей метод не дає вам таких речей, як тунелі, тому вам потрібен метод додавання тих, хто перебуває після генерації місцевості, наприклад випадкова прогулянка .


Не зовсім впевнений, що я використовую Perlin Noise для повного потенціалу. Виконуючи саме так, як ви описали, просто було зроблено багато печер, з великою кількістю плаваючих островів. Фактичних визначень типу рельєфу немає. Використовуючи градієнт для зважування результатів, я отримую цей результат .
Затінені розміри

@Shaded Dimensions - Ваші параметри Perlin Noise потребують налаштування. У вас дуже сильно мінливий шум, коли те, що ви хочете, є значно плавнішим, ширшим малюнком. Ознайомтеся з freespace.virgin.net/hugo.elias/models/m_perlin.htm і спробуйте повозитися з вашими параметрами. Спробуйте меншу стійкість і менше октав. (Ці умови можуть відрізнятися, тому читайте цю статтю.)
dlras2

Гаразд, дякую за посилання. Я також з'ясував, що вага не працював так, як було призначено після зміни кількох параметрів.
Затінені розміри

Гаразд, трохи змінив параметри, і я отримав щось, що є досить прийнятним, принаймні, зараз. Я також видалив генеруючі печери саме для цього випробування, тому що хотів спочатку зробити фактичну місцевість. Це кінцевий результат . Просто потрібно додати чеки, щоб видалити ці плаваючі острови. Знову дякую.
Затінені розміри

@ Заштриховані розміри - приємно! Багато часу, хороші місцевості виходять із просто налаштованих параметрів та накладеного шуму. Мине певний час, перш ніж ви отримаєте щось, чим ви дуже задоволені, але ви завжди зможете використовувати те, що є зараз, і повернутися, щоб додати обробку. Удачі!
dlras2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.