1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wangerzi-model-convert-to-gltf

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

3DModelConvertToGltf — инструмент для преобразования моделей в унифицированный формат

Документ

Английский | 中文

Основная причина создания этого проекта заключается в том, что я столкнулся со сценарием, когда модели STEP и IGES необходимо отобразить в Интернете, но библиотеки web3d на рынке не поддерживают этот формат, а прямое отображение файлов 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.

PS: Мой блог написан на китайском языке, если вы не являетесь носителем китайского языка, вам следует воспользоваться инструментом Google Translate.

Статус проекта: стабильный

Функции

  • Базовое планирование структуры проекта и дизайн интерфейса
  • Реализация кода преобразования и сжатия
  • Добавление формата obj в darco gltf
  • Связанная реализация API (не очень полезно, отброшено)
  • Упаковка образа docker
  • Написание простого в использовании convert.sh
  • Предварительный просмотр онлайн-конвертации
  • [ошибка] Преобразование stp в gltf слишком большое
  • [ошибка] При преобразовании stl в gltf отсутствует узел (результат: формат stl не имеет информации об узле, https://en.wikipedia.org/wiki/STL_(file_format))
  • [ошибка] Отсутствует узел при преобразовании stp/iges в gltf
  • Поддержка grpc
  • Ответ rpc должен содержать подробную информацию об ошибке
  • api rpc должна поддерживать отсутствие draco
  • [ошибка] Проблемы с выводом журналов сервера docker в rpc

Использование этого проекта

  • Lexcent 3D Printing

    Вы можете отсканировать следующий qrcode через Wechat, это полезно для 3d-печати и предварительного просмотра везде. img

Обновление версии

v1.7 предварительная версия

convert.sh поддерживает опцию no-draco.

v1.6 2021-10-10 13:08

Меньшие образы docker, с 4,42 ГБ до 1,87 ГБ, исправлены проблемы с запуском docker.

v1.5 2021-07-25 16:06

Исправлены некоторые ошибки, поддерживается преобразование без draco.

v1.4 2021-06-11 17:20

Поддерживается GRPC, код преобразования переработан, исправлены ошибки.

v1.3 2020-06-24 17:19

Добавлен английский документ, исправлены ошибки.

v1.0 2020-05-21 19:08

Базовая фиксация, основные функции завершены, поддерживается оболочка convert.

Почему не assmip

Я попытался использовать assimp, но результат теста на преобразование stl/iges/obj оказался не очень хорошим. Я использовал https://hub.docker.com/r/dylankenneally/assimp среду docker для тестирования, вы можете попробовать её.

Зачем не реализовывать API в этом проекте

Преобразование моделей — это услуга, требующая больших затрат производительности и времени. Загрузка и скачивание модели будут потреблять трафик. Если он развёрнут непосредственно на вашем собственном сервере, это будет задача, которая требует больших затрат трафика и ресурсов процессора. Для наиболее распространённого метода загрузки и скачивания больших файлов необходимо внедрить OSS и CDN с динамическим расширением очередей и серверных служб, но затраты на развёртывание и реализацию будут относительно высокими.

Быстрый старт

Из-за проблем с настройкой среды и по другим причинам командный режим всё ещё должен полагаться на docker. Командный режим подходит для простого вызова на стороне сервера. Процесс преобразования блокирует синхронизацию процессов и не может быть развёрнут распределённым образом для увеличения Параллелизм

Наиболее рекомендуемый способ — использовать grpc с развёртыванием docker, чтобы сделать rpc, который может быть синхронным или асинхронным и будет легко расширяться.

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

Онлайн-просмотрщик конвертации

Вы можете преобразовать модель онлайн (<100 МБ) на основе modelbox-sdk, ссылка для предварительного просмотра: https://wangerzi.gitee.io/modelbox-sdk/examples/index.html.

Режим GRPC

На основе GRPC будет удобнее создавать динамически расширяемый сервисный кластер. Мы поддерживаем загрузку 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

При использовании grpc в этом проекте скопируйте server/rpc/protos/converter.proto и сгенерируйте шаблон кода в соответствии с языком вызывающей стороны и наслаждайтесь им. Официальный документ: Поддержка языков.

Примеры завершения

Если этот проект вам полезен, вы можете зафиксировать другие примеры и PR, например, примеры вызовов php/golang/Nodejs rpc.

name code comments
Пример использования клиента Python rpc server/examples/python/rpc_client.py конвертировать и сохранить

Командный режим

Скачайте convert.sh, предоставьте права на выполнение и выполните следующую команду, второй параметр должен быть выбран в stl|stp|iges|obj|fbx, пожалуйста, определите в зависимости от типа файла.

Скрипт зависит от среды docker, поэтому сначала необходимо подготовить среду Docker. Командный режим не поддерживает преобразование zip-файлов, поскольку объём данных docker автоматически синхронизирует изображения или активы mtl с контейнером 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. Скопируйте их в путь проекта, и вы увидите результат преобразования.

Если вы получили эту ошибку при использовании php-fpm или другого языка исполнителя для выполнения convert.sh, вы можете добавить своего пользователя-исполнителя в группу docker, чтобы избежать этой проблемы.

usermod -a -G docker nginx

docker: Получил отказ в доступе при попытке подключения к сокету демона Docker по адресу unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: разрешение отклонено.

Используя вызовы на других языках, вы можете синхронно определить, существует ли выходной файл, чтобы определить, успешно ли выполнено преобразование, например:

<?php
$out = 'out.glb';
$input = 'test.stl';
$type = 'stl';
// будьте осторожны с атаками выполнения
shell_exec('convert.sh '.$type.' '.$input.' '.$out);
if (file_exists($out)) {
    echo "результат конвертирования:" . $out;
} else {
    echo "преобразование не удалось";
}

Среда Docker

Под хост-машиной docker установите docker и выполните следующую команду для извлечения образа (около 4 ГБ).

docker pull wj2015/3d-model-convert-to-gltf

Внутри контейнера выполните conda run -n pythonocc python convert.py [stl|step|iges|obj|fbx] input.stl out.glb, чтобы синхронно преобразовать модель.

Простая схема загрузки

Если требуется многомашинная загрузка, можно использовать nginx proxy / контейнер docker с rpc для простой балансировки нагрузки или использовать очередь сообщений с производителем и потребителем. HTTP API или очереди должны Реализуйте собственную логику.

Присоединяйтесь к нам.

Среда разработки Docker

Сначала установите docker и docker-compose, обратитесь к официальным документам: Docker Desktop.

Затем перейдите в документы environment/, выполните команду docker-compose up, результат выполнения будет следующим, что указывает на успех.

user@MacBook-Pro environment % docker-compose up
Recreating 3d-model-convert-to-gltf-app ... done
Starting 3d-model-convert-to-gltf-redis ... done
Attaching to 3d-model-convert-to-gltf-redis, 3d-model-convert-to-gltf-app
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # Redis version=6.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 * Running mode=standalone, port=6379.
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 # Server initialized

Если возникают конфликты портов, сбои инициализации и другие ненормальные ситуации, пожалуйста, проверьте и найдите информацию в соответствии с информацией об ошибке.

Создайте новый терминал, выполните docker ps для этого текущего выполнения контейнеров docker, результат выполнения следующий, что указывает на успех.

user@MacBook-Pro 3d-model-convert-to-gltf % docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS               NAMES
69b684ed7755        wj2015/3d-model-convert-to-gltf   "conda run -n python…"   3 seconds ago       Up 2 seconds                            3d-model-convert-to-gltf-app

Далее войдите в контейнер, чтобы выполнить команду, и войдите в среду conda pythonocc. Выполнение скрипта в этой среде может облегчить изменение кода и отладку.

wangjie@MacBook-Pro 3d-model-convert-to-gltf % docker exec -it 3d-model-convert-to-gltf-app /bin/bash
(base) root@5efd6ef96814:/opt/3d-model-convert-to-gltf# conda activate pythonocc
(pythonocc) root@69b684ed7755:/opt/3d-model-convert-to-gltf# python server/convert.py 
Params not found, format: python convert.py [type] [file path] [out file path]

Недокерская среда разработки

В основном для разработчиков, которые не могут запустить docker, вы можете попробовать использовать этот метод для создания среды разработки.

Создайте виртуальную среду conda:

conda create -n 3d-model-convert-to-gltf-pythonocc -c dlr-sc -c pythonocc pythonocc-core=7.4.0rc1
conda activate 3d-model-convert-to-gltf-pythonocc
pip install -r server/requirements.txt

Ваш локальный узел версии должен быть 12.0.0, иначе вы получите ошибку при запуске команды gltf-pipeline, и вам следует установить пакеты gltf-pipeline и obj2gltf.

Руководство по установке локальной отладочной среды

Установите nvm с помощью этого скрипта (MacOs или Linux), вы можете загрузить исполняемый файл .exe из https://github.com/coreybutler/nvm-windows.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

Установите и используйте узел 12.0.0 с другими пакетами.

nvm install 12.0.0
nvm use 12.0.0
npm install -g gltf-pipeline obj2gltf

Затем загрузите FBX2glTf из https://github.com/facebookincubator/FBX2glTF и поместите его в каталог среды.

PS: вы должны переименовать FBX2Gltf в fbx2gltf для унифицированного вызова.

Разберитесь в коде и структуре файлов, отправьте PR после внесения изменений. Добро пожаловать на электронную почту admin@wj2015.com.

Лицензия

3DModelConvertToGltf лицензирован под... Apache License, версия 2.0. Полный текст лицензии смотрите в LICENSE.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Конвертируйте 3D-модель (STL/IGES/STEP/OBJ/FBX) в формат glTF и сожмите её. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wangerzi-model-convert-to-gltf.git
git@api.gitlife.ru:oschina-mirror/wangerzi-model-convert-to-gltf.git
oschina-mirror
wangerzi-model-convert-to-gltf
wangerzi-model-convert-to-gltf
master