Monster Forge: как устроена воспроизводимая сборка 3D-персонажей

Сохранённый персонаж должен сохранять выбор частей, настройки внешности и связь с исходниками. В открытом конструкторе Monster Forge это решается через версионированные рецепты геометрии, инструкции сборки и отдельный кеш производных файлов. Расскажу, как устроена эта граница и что она даёт разработчику расширений.

Monster Forge: как устроена воспроизводимая сборка 3D-персонажей

Что делает конструктор

Monster Forge работает локально: Python рассчитывает геометрию и веса, браузер показывает результат и позволяет менять внешность. В репозитории включены 33 расы и типа существ, 193 пресета, варианты лиц, волос, одежды, конечностей и аксессуаров. Код и перечисленные в поставке исходные ресурсы доступны под Apache-2.0.

В Body Parts выбираются части и материалы, в Assembly сохраняются сборки. Предпросмотр обновляется при изменении настроек. Для шаблонов с ригом экспорт содержит скелет и веса; существующие авторские шаблоны без рига экспортируются статически.

Инструкция сборки и один GLB

Готовый результат состоит из assembly.json с schema_version=2 и одного model.glb. Инструкция фиксирует выбранные части и настройки, а GLB содержит собранную геометрию. Для оснащённых ригом шаблонов в нём также находятся скелет и веса.

Это даёт понятную точку сохранения: можно открыть выбор персонажа повторно и проверить результат сборки программно. Для постоянной коррекции геометрии выпускается новая ревизия самой части. Историю сохранённых сборок при этом можно сохранить.

Что хранится постоянно

Постоянная библиотека содержит рецепты геометрии, метаданные, версионированные пресеты и необходимые исходные изображения. Эти входы включены в поставку вместе с описанием лицензии. Исходники привязаны к хешам и идентификаторам ревизий.

Производные GLB частей, веса и карточки интерфейса восстанавливаются в /tmp/monster-forge. При пересборке конструктор читает постоянные источники. Это позволяет держать промежуточные результаты за пределами Git и сохранять необходимые входы для другого разработчика.

Один сервис и численные проверки

Сборка, проверка настроек, предпросмотр и хранение проходят через ConstructorService. В документации также описаны ConstructorRegistry и SourceBundle. Такой интерфейс даёт разработчику способ проверять результат через Python независимо от ручной работы в браузере.

В проверках полезны конкретные свойства: конечность координат, разрешённые кости для частей, нормализованные веса, согласованность bind-матриц, общая плоскость ног, исходные хеши и повторное открытие настроек. Художественную пригодность персонажа нужно оценивать отдельно.

Браузер отображает полученную модель. Расчёты геометрии и весов остаются в Python, поэтому расширение интерфейса использует тот же результат сборки, что и программные проверки.

Запуск и расширение

Проверенный сценарий использует Linux, Python 3.12, uv и make. Команды запуска:

cd monster-forge

make run

Первый запуск установит зафиксированные зависимости. Интерфейс: http://127.0.0.1:5050/characters/ — работа с включённой библиотекой выполняется по рецептам геометрии и не требует ключа генерации изображений.

Новые источники для поддерживаемого производственного расширения используют контракт humanoid_v1. Существующие дополнительные шаблоны сохранены. Завершённый игровой Playground и автоматическая генерация готового персонажа по тексту остаются будущими задачами. Часть сохранённых позиционных референсов создана с помощью ИИ.

Репозиторий, документация и исходники: https://github.com/QoobIY/monster-forge

Автор проекта: Mr Q. Публичный контакт: https://github.com/QoobIY

Материал подготовлен ИИ-агентом от имени автора проекта; описанные возможности сверены с исходниками и проверками проекта.

11