TerraPath #2
Кратко о содержании сегодняшнего поста:
Шум Перлина и его применение для генерации мира.
Небольшой спойлер того, как выглядит генерация сейчас.
Это область 800*600 тайлов(1 пиксель равен 1 тайлу).
Игрок появляется по центру. Технически мир генерируется до 2 147 483 647 тайлов во все стороны, а дальше зацикливается. При таких масштабах можно сказать, что мир бесконечен.
В финальной же версии планеты будут намного меньше, и их можно будет обойти за адекватное время.
Ну а теперь о том, как же получить такую генерацию. Мы будем использовать фрактальный шум Перлина.
Краткий обзор что такое шум перлина (из вики):
Perlin noise (Шум Перлина, также иногда Классический шум Перлина) — математический алгоритм по генерированию процедурной текстуры псевдо-случайным методом. Используется в компьютерной графике для увеличения реализма или графической сложности поверхности геометрических объектов. Также может использоваться для генерации эффектов дыма, тумана и т.д.
и генерации карт.
На хабре есть хорошая статья по реализации данного шума:
https://habrahabr.ru/post/265775/
Плюс шума перлина в том, что он очень быстрый и дает хороший результат.
Но самый главный его плюс - он сидируемый.
Это значит, что два одинаковых сида будут давать одинаковые карты.
Таким образом, очень легко делиться картой с друзьями или же просто находить забавные генерации и делиться сидом на форумах.
В конечном итоге мы будем получать такие вот картинки.
Для обычного шума:
Пока не очень похоже на первую картинку, не правда ли?
Добавим немного фрактальности:
Как видно, фрактальный шум выглядит уже поинтереснее, он получается за счёт того, что мы накладываем несколько разных слоев обычного шума друг на друга.
Значение шума лежит в пределах от -1 до 1.
Но мы переведем его в [0, 1].
Тем самым мы сможем задавать уровни дробными числами.
Все значения ниже 0.40 мы отмечаем как глубокую воду, а все значения ниже 0.45 - как мелководье.
Всё что < 0.47 - это песок.
Уже выглядит интереснее?
А всё, что осталось, отмечаем как трава.
Уже очень даже неплохо. Но не хватает гор.
Пускай травой будут все значения меньше 0.55, а всё, что выше, будет горами.
В итоге получаем такую вот картинку:
Здесь еще нет деревьев, пещер и руд. Но выглядит это уже очень интересно.
Можно еще положить небольшой бонус в виде вишенки на торт: снежные шапки на горах.
Что мы имеем в итоге?
Практически бесконечную карту с интересным рельефом, которая, к тому же, может быть легко воспроизведена у другого игрока.
Как видно, процедурная генерация - это очень мощный инструмент, и не такой сложный, как может показаться на первый взгляд.
Генератор еще можно улучшить, добавив туда деревья, пещеры и руды. Но об этом я расскажу в следующих постах.
А еще добавить биомы.
А на этом всё, спасибо, что дочитали.
Также не пропустите прошлые посты:
https://pikabu.ru/story/terrapath_0_5274718
https://pikabu.ru/story/terrapath_1_5276109
Ссылка на группу в вк:
Небольшой бонус:















Лига Разработчиков Видеоигр
9.3K поста23.2K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"