3DModelConvertToGltf: инструмент для преобразования моделей в единый формат GLTF
Документ
Китайский | Английский (README.md)
Основной причиной создания этого проекта стала необходимость демонстрации моделей STEP и IGES в веб-среде. Однако существующие веб-библиотеки 3D не поддерживают эти форматы, а прямая загрузка файлов STL приводит к значительному использованию полосы пропускания или трафика CDN. Преобразование в сжатый формат GLTF представляется более эффективным решением.
Примеры результатов сжатия представлены в таблице:
Тип файла | Имя файла | Время преобразования | Исходный размер | Размер после преобразования |
---|---|---|---|---|
STL | assets/test.stl | 2368.890 мс | 7.6 МБ | 86 КБ |
IGES | assets/test.iges | 1641.226 мс | 1 МБ | 111 КБ |
STP | assets/test.stp | 2969.200 мс | 5.1 МБ | 217 КБ |
FBX | assets/Samba Dancing.fbx | <1000 мс | 3.7 МБ | 614 КБ |
Поддерживаемые входные форматы: STL/IGES/STP/OBJ/FBX
Поддерживаемые выходные форматы: GLTF/GLB
Проект основан на идее, изложенной в блоге: «Преобразование моделей STEP и IGES в формат GLB, подходящий для использования в сети».
Состояние проекта: стабильное обслуживание.
Задачи, требующие завершения:
Пользователи проекта:
Версия описания
v1.7 (ожидает публикации)
Конвертер поддерживает опцию no-draco.
v1.6 (2021-10-10 13:08)
Уменьшен размер образа до 1,87 ГБ с 4,42 ГБ, исправлена проблема с невозможностью запуска образа.
v1.5 (2021-07-25 16:06)
Исправлена ошибка, добавлена поддержка преобразования без сжатия draco.
v1.4 (2021-06-11 17:20)
Обновлена поддержка gRPC, очищены aiohttp и конфигурационный код, переработана часть кода преобразования и исправлены ошибки BUG.
v1.3 (2020-06-24 17:19)
Добавлены документы на английском языке, исправлены ошибки, предпринята попытка использования aiohttp для написания интерфейса.
v1.0 (2020-05-21 19:08)
Базовая версия, основные функции разработки завершены, поддерживается вызов скрипта.
Почему не используется Assimp?
Я пробовал использовать Assimp, но результаты тестирования в сценариях преобразования STL/IGES/OBJ были не очень удовлетворительными. Я использовал предварительно упакованную среду Assimp от Dylankenneally/assimp на Docker Hub для тестирования. Если вам интересно, вы также можете попробовать.
Почему API не предоставляется непосредственно в этом проекте?
Преобразование модели является ресурсоёмкой и медленной услугой. Загрузка и скачивание моделей также требуют значительных затрат пропускной способности. Если напрямую развернуть его на собственном сервере, это будет ресурсоёмкая и дорогостоящая работа. Для общего использования больших файлов рекомендуется использовать OSS и CDN в сочетании с очередями и динамическим расширением серверной части. Но затраты на развёртывание и реализацию будут высокими, и коммерческие запросы должны быть направлены на admin@wj2015.com для получения коммерческой поддержки API.
Быстрое начало работы
Из-за проблем с настройкой среды командный режим по-прежнему требует зависимости от Docker. Командный режим подходит для простого вызова серверных приложений. Процесс преобразования блокирует процесс синхронизации и не может быть распределён для увеличения параллелизма. Рекомендуется использовать gRPC в сочетании с контейнеризацией для вызова, который может работать синхронно или асинхронно и легко расширяться.
Примечание: существует риск того, что сервер, предоставляющий услуги, будет заблокирован при одновременном преобразовании слишком большого количества моделей или одной очень большой модели.
Онлайн-предварительный просмотр
Вы можете использовать Modelbox-SDK для онлайн-преобразования моделей (<100 МБ). Ссылка: https://wangerzi.gitee.io/modelbox-sdk/examples/index.html.
Режим gRPC
На основе gRPC реализована внутренняя связь RPC для сервисов. Построение динамически расширяемого кластера служб становится более удобным. Поддерживается загрузка zip-файлов и исходных файлов моделей. Учитывая совместимость различных моделей, все ответы представляют собой zip-файлы, которые необходимо распаковать самостоятельно.
Сначала необходимо запустить сервер RPC с помощью Docker. Команда запуска выглядит следующим образом. Обратите внимание, что порт 8999 не должен использоваться и образ wj2015/3d-model-convert-to-gltf:latest должен быть последним.
$ docker pull wj2015/3d-model-convert-to-gltf:latest
$ docker run -d -p 8999:8999 wj2015/3d-model-convert-to-gltf:latest
При использовании скопируйте server/rpc/protos/converter.proto и сгенерируйте шаблоны на выбранном вами языке на основе вызова. Официальный сайт: поддерживаемые языки.
Примеры реализации
Если этот проект полезен для вас, вы можете продолжить добавлять другие примеры и отправлять PR, такие как часто используемые PHP, Golang и Nodejs.
Пример имени | Каталог | Примечание |
---|---|---|
Python вызывает пример | server/examples/python/rpc_client.py | Вызов упаковки и сохранения |
Командный режим
Скачайте файл convert.sh в коде и предоставьте ему разрешения на выполнение. Выполните следующую команду, где второй параметр может поддерживать stl|stp|iges|obj|fbx в зависимости от типа файла.
Сценарий зависит от среды Docker и использует функцию сопоставления томов Docker для импорта чертежей и моделей в контейнер для выполнения преобразования, поэтому он не принимает сжатые пакеты и требует прямого указания файлов модели для преобразования.
convert.sh stl inputpath.stl outputpath.glb # Создать двоичный файл glb
convert.sh stl inputpath.stl outputpath.gltf # Недвоичный файл gltf
В каталоге assets есть пять тестовых файлов test.stl, test.stp, test.igs, E 45 Aircraft_obj.obj и Samba Dancing.fbx. Скопируйте их в каталог проекта и выполните указанные выше команды, чтобы увидеть результаты. Текст запроса:
docker pull wj2015/3d-model-convert-to-gltf
* *В контейнере:*
* ```shell
conda run -n pythonocc python convert.py stl input.stl out.glb
docker pull wj2015/3d-model-convert-to-gltf
* В контейнере выполните:
* ```shell
conda run -n pythonocc python convert.py stl input.stl out.glb
для синхронного преобразования файла.
Перевод:
Выполнение:
docker pull wj2015/3d-model-convert-to-gltf
**В контейнере:**
* ```shell
conda run -n pythonocc python convert.py stl input.stl out.glb
На хост-компьютере при условии установки Docker выполните команду для загрузки образа (примерно 4 ГБ).
docker pull wj2015/3d-model-convert-to-gltf
В контейнере выполните следующую команду:
conda run -n pythonocc python convert.py stl input.stl out.glb
для синхронного преобразования файлов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )