xmoonlight
@xmoonlight
https://sitecoder.blogspot.com

Генерация города (процедурная)?

Карта
Режим 2D.
Есть уровень квадратной сетки (зелёное поле) размерности X*Y.

Объекты
Есть набор объектов для замощения разных типов:
1. Постройки - 3 вида фигур, состоящие из квадратов (аналог: из "тетриса").
2. Деревья - 3 вида, размер: 1x1, 2x2, 3x3
3. Автомобильная дорога - размер: 3x3 (для одной полосы).
4. Пешеходная дорога - размер: 2x2.

Условия:
1. На любую поверхность могут вставать любые постройки и деревья.
2. Нельзя проходить только через постройки и деревья 1x1.
3. Любые непроходимые объекты не примыкают к друг другу.

Вопрос: как процедурно замостить заданную площадь так, чтобы это было похоже на город?
Как составить вот эти сами критерии для генерации структуры города?
  • Вопрос задан
  • 617 просмотров
Решения вопроса 2
GavriKos
@GavriKos Куратор тега Разработка игр
Классная задача.
Я бы нагенерил (скорее всего руками - чтобы красиво было) много шаблонов - а ля "кварталы" ток поменьше, а потом из них уже клеил город.

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

Ну и пара статей:
https://habr.com/ru/company/piter/blog/455004/
https://habr.com/ru/post/320140/ (да, это лабиринт а не город - но общие черты есть)
Ответ написан
@Almost
Думаю, коллапс волновой функции вам может помочь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@yavaskript
нууууу, это вам нужно отдельные статьи по теме, а не здесь спрашивать. Потому что тема очень объемная (если вы хотите что-то действительно похожее на город, а не просто рандомно разбросанные объекты).
Если вам все равно, как это будет выглядеть по итогу, то могу сходу, не думая, предложить 2 варианта:
1) плясать от домов - расставить случайным образом дома, а потом прокладывать рандомно дороги между ними, параллельно раскидывая деревья вокруг
2) понастроить дорог, а вдоль дорог понаставить дома, дома между собой связать пешеходными дорожками, а деревья понакидать случайно на пустые участки
Ответ написан
@mayton2019
Bigdata Engineer
Город похож на город когда дома и кварталы в нем имеют углы - близкие к 90 градусов. Такой вот нечеткий криетрий.

Мне кажется эту задачу можно решать генетическим алгоритмом просто набрасывая на карту случайные полигоны домов а потом при отборе отбирать те которые наиболее параллельны или перпендикулярны дорогам.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы