Старый Саратов

Старый Саратов

Генерация зданий с помощью 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$ в год. Так что проект генерации на Питоне будет развиваться параллельно с проектом :) .