Вопрос или проблема
В настоящее время я разрабатываю инструмент, который позволяет пользователям генерировать простые текстурированные 3D-модели на основе изображения и некоторых размеров в качестве входных данных. На основе этих данных мне нужно создавать простые геометрические формы с материалом, основанным на этой текстуре. В настоящее время это ограничивается кубоидами, но я хотел бы оставить возможность для генерации более сложных форм в будущем. Полученные файлы затем необходимо экспортировать в формате glb. Сервис в настоящее время написан на Golang, и я использую библиотеку gltf для ручной генерации полученных файлов. Это работает для моих простых кубоидов, но я чувствую, что это может быстро усложниться, если я захочу построить более сложные структуры. Поэтому я ищу уровень абстракции повыше. Для всех моделей, которые я планирую генерировать, было бы возможно заранее создать шаблоны в Blender. Эти шаблоны нужно будет только масштабировать, а изображения текстур нужно будет заменить. В резюме: Мне нужно:
Генерация или манипуляция 3D-моделями
Текстурирование 3D-моделей / манипуляция изображениями текстур
Управление программой
Экспорт в glb
Хорошо иметь:
Прямая интеграция с Golang (например, библиотека для go)
Экономия ресурсов (быстрое, низкое использование ЦП и ОЗУ)
Я не уверен, что это на 100% подойдет для вашего случая, но https://openscad.org/ — это программа для 3D-моделирования/CAD, которая позволяет вам определять формы более программным способом. У нее может быть довольно приличная кривая обучения, и я не уверен, что она может экспортировать в нужном вам формате, но это может быть неплохое начало.
Blender — это тот Мессия, которого вы ищете. Blender поддерживает выполнение Python-скриптов в окне сценариев. Почти все действия, которые вы выполняете в рабочем пространстве (выдавливание граней сетки, трансформация объектов, импорт моделей и т. д.), выполняются как Python-скрипты, с помощью которых вы можете копировать и создавать свои собственные скрипты или даже надстройки.
И, конечно, Blender по умолчанию поддерживает экспорт во множество форматов. Но есть множество загружаемых надстроек, которые предоставляют вам более широкий выбор. Говоря о скачиваемых вкусностях, не забудьте ознакомиться со всеми надстройками и видео по процедурной генерации сетки.
Blender + Python выглядит как отличное решение. Blender — это бесплатный 3D-редактор с множеством функций для создания и редактирования 3D-моделей. Python — это широко распространенный и простой в использовании язык программирования. Единственная трудность с Blender заключается в том, что его интерфейс трудно использовать и он контринтуитивен.
Ответ или решение
Инструменты и библиотеки для программной генерации 3D моделей
В современном мире разработки 3D контента существует множество инструментов и библиотек, позволяющих пользователям создавать и управлять 3D моделями. Если вам требуется генерация текстурированных 3D моделей из изображений, то использование Blender в сочетании с Python может стать оптимальным решением.
Blender как идеальный выбор
Blender – это мощный инструмент для 3D моделирования с открытым исходным кодом, который поддерживает широкий спектр функций для генерации, редактирования и экспорта 3D моделей. Рассмотрим более детально его ключевые возможности:
-
Программируемость через Python:
Blender позволяет выполнять скрипты на Python, что дает вам возможность автоматизировать процессы. Это означает, что вы сможете писать скрипты для создания 3D объектов, изменять их размеры и текстуры в соответствии с вашими потребностями. Python в Blender — это универсальный инструмент, который позволяет не только создавать механизмы для генерации моделей, но и управлять всеми аспектами сцены. -
Экспорт в GLB:
Blender поддерживает экспорт в формат GLB (GL Transmission Format), который вы можете использовать для вашего проекта. Это обеспечит вам сохранение всех текстур и материалов, что критически важно для приложений реального времени. -
Поддержка шаблонов и простота изменения текстур:
Вы можете заранее создать шаблоны в Blender, которые затем легко адаптировать под различные параметры, такие как размеры и текстуры. Это особенно полезно, если ваша цель — простота и скорость создания. -
Гибкость и расширяемость:
Вы можете создавать сложные структуры на основе простых геометрических фигур и постепенно усложнять ваши модели. Blender позволяет вам легко добавлять новые функции по мере роста ваших требований.
Альтернативы
Если вам важно оставаться в рамках языка Go и ищете решения с прямой интеграцией, то стоит рассмотреть следующие библиотеки:
-
GoGLTF: Это библиотека для работы с GLTF моделями. Хотя она не предоставляет высокоуровневых абстракций для 3D генерирования, она может быть полезна для управления и экспорта вашей модели.
-
OpenSCAD: Это программное обеспечение для создания 3D моделей на основе скриптового языка. Оно может не поддерживать прямой экспорт в формат GLB, но вы сможете создать сложные модели программным путем. Тем не менее, вам придется конвертировать полученные файлы в нужный формат с помощью сторонних инструментов.
Ресурсная эффективность
Blender может быть не самым легковесным решением, однако его мощные возможности часто оправдывают затраты ресурсов. Для обеспечения ресурсной эффективности вы можете:
- Оптимизировать ваши скрипты, чтобы минимизировать использование памяти и процессорного времени.
- Использовать возможности Blender для автоматизации работы с шаблонами, что позволит сократить время на итоговую обработку моделей.
Заключение
Исходя из ваших требований – программная генерация 3D моделей, текстурирование, экспорт в GLB и возможность использовать Go — Blender с Python выглядит как наиболее подходящее решение. Он предлагает мощные инструменты для управления 3D контентом и поддерживает множество возможностей для расширения функционала в будущем.
С учетом всех рассмотренных вариантов, рекомендую начать с Blender, освоить его API и создать необходимые скрипты для автоматизации вашего процесса. Это даст вам гибкость и возможности, которые могут значительно улучшить ваш подход к разработке 3D моделей.