Unreal Engine 5: Procedural City Generator
Тулза для UE 5 позволяющая создавать процедурные города указанной формы.
Изначально писалась как прототип для генерации городов в HunterOrVictim.
Изначально писалась как прототип для генерации городов в HunterOrVictim.
Принцип работы:
• Предварительно расставленные области прямоугольной формы автоматически объединяются в одну фигуру, по внешней стороне которой создается крепостная стена.
Некоторые области могут быть рандомно отделены внутренними стенами.
Некоторые области могут быть рандомно отделены внутренними стенами.
• Внутри областей создаются линии домов и декорации.
• Вдоль стен расставляются декорации.
Подробнее
Логика для редактора
• 1.Ищем все соприкасающиеся области.
• 2.Проходимся по клеткам найденных областей и создаем таблицу.
• 2.Проходимся по клеткам найденных областей и создаем таблицу.
Клеткам на углах области присваиваем значение 3, остальным 1, при пересечении областей складываем сумму.
• 3.Строим путь.
Начинаем от первой клетки, проверяем шаг влево, вправо, вверх и вниз и двигаемся вперед.
Значения 0 и 2 - это пересечение областей либо не размеченная область, значения 1,3,6 - можно сделать шаг.
Сохраняем полученный путь Линия (A,B,C,D) + Поворот (0,1,2,3):
Пример пути: B0D3C3D0D0B1C2C1A1C0A0D1C1A2A1B2
Начинаем от первой клетки, проверяем шаг влево, вправо, вверх и вниз и двигаемся вперед.
Значения 0 и 2 - это пересечение областей либо не размеченная область, значения 1,3,6 - можно сделать шаг.
Сохраняем полученный путь Линия (A,B,C,D) + Поворот (0,1,2,3):
Пример пути: B0D3C3D0D0B1C2C1A1C0A0D1C1A2A1B2
• 4.Сохраняем координаты областей MinX+MinY+MaxX+MaxY:
Пример областей: 24+6+12-16+8-24+8-12+2-12+26+6-10-20+26+1
Для экономии сохраняются координаты деленные на 192.
Пример областей: 24+6+12-16+8-24+8-12+2-12+26+6-10-20+26+1
Для экономии сохраняются координаты деленные на 192.
Логика для генератора
• 1.Спавним области читая строку CityRect
• 2.Спавним постройки по областям.
Если размер области позволяет то будем спавнить дома.
Находим большую сторону области и относительно нее указываем направление для линии домов.
Рандомайзим длину линии.
Двигаемся вперед с шагом 192 и спавним дом (или палатки или тенты) или два дома влево вправо, либо делаем пропуск.
Спавним со сдвигом влево или вправо забор.
Спавним со сдвигом влево или вправо фонари бочки или другие декорации.
• 2.Спавним постройки по областям.
Если размер области позволяет то будем спавнить дома.
Находим большую сторону области и относительно нее указываем направление для линии домов.
Рандомайзим длину линии.
Двигаемся вперед с шагом 192 и спавним дом (или палатки или тенты) или два дома влево вправо, либо делаем пропуск.
Спавним со сдвигом влево или вправо забор.
Спавним со сдвигом влево или вправо фонари бочки или другие декорации.
• 3.Спавним стены читая CityWalls.
Спавним ассет стены (с условиями: тип стены, тип крыши, тип дверей).
На поворотах башня, на прямой лини стена.
Используем доп. условия. Например можно поставить ворота?, какой тип крыши? итд.
К каждой стене снаружи и внутри может быть заспанены декорации.
У декораций есть параметры:
шанс спавна, шанс на повторение в следующем блоке стены, особый поворот или офсет и прочие.
Спавним ассет стены (с условиями: тип стены, тип крыши, тип дверей).
На поворотах башня, на прямой лини стена.
Используем доп. условия. Например можно поставить ворота?, какой тип крыши? итд.
К каждой стене снаружи и внутри может быть заспанены декорации.
У декораций есть параметры:
шанс спавна, шанс на повторение в следующем блоке стены, особый поворот или офсет и прочие.
Ассеты и Видео
Для прототипирования мне требовались ассеты, и взял те модельки которые делал для HoV.
Но в какой то момент решил переделать в более приемлемое качество, и заодно разобраться для себя с только выходившими в тот момент нейронками.
Но в какой то момент решил переделать в более приемлемое качество, и заодно разобраться для себя с только выходившими в тот момент нейронками.
• Декорации
• Стаффажные НПС
На то время нейронок для генерации моделей было не так много, в итоге часть я делал сам и текстурил с помощью Krea.Ai, часть Luma.Ai и Tripo Ai.
Финальное видео с одной из вариаций получившегося города:
Планы
Потихоньку буду готовить тул для того, чтобы выложить в маркет.
Потестить как работает генерация можно непосредственно в HoV.
Потестить как работает генерация можно непосредственно в HoV.
Сконвертить их в вар и юзать на рефанде 😋