Генерация зданий с помощью Python и Blender
TL;DR - лучше использовать CityEngine - он подходит для нашей задачи
Blender - свободное ПО, у него есть встроенный полноценный интерпретатор Python, в который можно импортировать все нужные сторонние библиотеки
По умолчанию идет 3.7х версия, но спокойно обновляется до последней(3.9). Он поставляется с библиотекой
bpy
, которая предоставляет API для работы с Blender - мне кажется все действия, котороые делаются с через UI можно выполнить через API.
В моем случае важны основные операции - extrude, rotate, resize, move. Пока ничего сложного
Самое интересное, что из Blender можно сделать как сервер рендеринга (например https://www.flamenco.io/) или запустить его на машине не открывая само десктопное приложение:
Blender --background --python your_script.py
Я написал небольшой скрипт, который показывает, как можно брать файлы с диска (футпринт дома, окна, двери) и использовать их для генерации здания. После генерации - выгружать сгенерированный объект на диск.
https://github.com/radigost/arch_generator/blob/main/assemble_and_export_home.py Это решение проверяет эту архитектурную концепцию:
* сделать "словарь" элементов здания
* использовать словарь элементов здания для генерации здания (<-- вот что проверяется)
* брать пятно застройки с карты и генерировать здание для него
* брать сгенерированное здание и сохранять его с привязкой к географическим координатам
* брать данные по определенной географической точке и отображать их
Этот код логично расширять до "правил" по которым генерируются те или типы зданий
Ну и потом я сильно задумался, сколько времени на разработку это может занять. Сама задача очень интересная с точки зрения разработки, но создает риски для осуществления проекта, поэтому стал копать дальше
В итоге нашел то, что решает все задачи:
- Исползьовать существующие или исторические данные в общеиспользуемом формате (GIS, CAD), не только дома но и дороги, ландшафт, русла рек , мосты, трубы, столбы и пр.
- Возможность задавать правила генерации зданий и их генерировать здания
- Возможность экспортировать в необходимые форматы (чтобы например рендерить в Unity\Unreal Engine)
https://www.esri.com/en-us/arcgis/products/arcgis-cityengine/overview
Списался с компанией, наш проект не попадает под их программу НКО, но и лицензия не такая дорогая - 100$ в год. Так что проект генерации на Питоне будет развиваться параллельно с проектом :) .