Вставить 3D-модель

:information_source: Краткое описание Плагин Insert Model 3D добавляет кнопку в редактор, упрощающую вставку 3D-моделей в посты Discourse.
:hammer_and_wrench: Репозиторий https://github.com/Beholder-Vision/discourse-insert-model-3d
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

Всем привет,

Этот компонент позволяет вашим пользователям добавлять 3D-модели в свои посты, используя компонент Google Model Viewer. Я создал этот плагин, чтобы пользователи моего SaaS-сервиса для фотограмметрии Beholder могли делиться созданными ими моделями на нашем новом форуме Discourse. Решил также поделиться им здесь, на случай если он окажется полезен и другим. Я не нашел похожих компонентов, но, возможно, я просто провел очень быстрый поиск…

Ниже приведены инструкции и скриншоты, показывающие, как использовать компонент.

Буду очень признателен за любую обратную связь или мысли по поводу этого компонента. Компонент Model Viewer, который я использую для отображения моделей, обладает множеством функций, поэтому, вероятно, есть значительный потенциал для расширения возможностей этого плагина, предоставив пользователям доступ к некоторым из этих функций. Я создал этот компонент, скопировав, вставив и модифицировав компоненты insert video и mermaid, поэтому буду также очень благодарен, если кто-то с большим опытом написания компонентов Discourse взглянет на код и подскажет, какие ошибки я допустил. :slight_smile:

С уважением,
Алан

Использование

После установки компонента пользователи смогут добавлять 3D-модели в свои посты, нажав на новый значок куба в редакторе.

composer_toolbar

В настоящее время 3D-просмотрщик не загружает и не отображает 3D-модель сразу. Вместо этого он показывает постер (который можно настроить) и загружает модель только после того, как пользователь нажмет кнопку «Загрузить 3D-модель». Такая логика была выбрана для помощи пользователям с ограниченным интернет-трафиком.

Настройки администратора

Чтобы пользователи могли загружать модели с помощью этого компонента, необходимо добавить расширения .gltf и .glb в список разрешенных расширений.

Также, скорее всего, потребуется увеличить лимит максимального размера вложений.

settings_max_attachment_size

Это, вероятно, основное ограничение при использовании этого компонента на хостинге Discourse, так как там на более дешевых тарифных планах максимальный размер ограничен 30 МБ. Однако справедливости ради стоит отметить, что вам, вероятно, и не нужно, чтобы пользователи загружали огромные файлы. Размер файлов .glb и .gltf можно значительно уменьшить, если они созданы программой, поддерживающей сжатие сеток Draco.

20 лайков

Спасибо, всё работало несколько дней, но теперь кнопка загрузки не работает (проверено в Firefox, Chrome и мобильном Firefox)

2 лайка

О нет! Это нехорошо. Спасибо, что сообщили мне.

У меня на форуме произошло то же самое. Просматривая пост, я думаю, что произошло следующее: через несколько дней Discourse решил, что загруженное изображение постера и 3D-модель больше не нужны, и удалил их с сервера. :frowning:

Я временно «исправил» это на своём сайте, загрузив модель и постер заново, но теперь собираюсь изучить документацию по темам Discourse, чтобы понять, как исправить это правильно. При беглом просмотре, который я сделал во время написания компонента темы, я видел в документации утверждение, что если актив упоминается в посте, он остаётся на сервере. Однако, очевидно, что URL-адреса, которые этот компонент вставляет в пост, по какой-то причине не обеспечивают этого. Если любой другой разработчик плагинов сможет дать совет по этому вопросу, я буду очень признателен… :slight_smile:

2 лайка

Это странное поведение.

1 лайк

Да, моя текущая теория заключается в том, что когда я создаю Markdown-разметку для ссылки на модель-просмотрщик, URL загруженной модели каким-то образом не имеет правильного формата для логики, которая сканирует сообщения, чтобы определить использованные загрузки.

Сейчас я изучаю ещё два места в Discourse, где загружаются файлы. В модальном окне загрузки изображений/файлов хранится ссылка на «short_url», который имеет формат upload://, а не конечный URL, который будет использоваться браузером для загрузки ресурса. Возможно, мне придётся разобраться, как использовать именно его? Альтернативно, компонент GitHub - discourse/discourse-insert-video · GitHub, на основе которого я создал свой собственный, использует прямой URL ресурса. Либо этот компонент страдает от той же ошибки (маловероятно :)), либо эти URL распознаются, потому что они вставляются в сообщение Markdown как HTML-теги (я не могу использовать тег model-viewer таким образом, так как он не входит в белый список разрешённых HTML-тегов).

Вот моё текущее предположение, хотя это может быть и что-то совершенно иное. Теперь пойду поищу код, который определяет «сиротские» загрузки на сайте Discourse…

2 лайка

Привет,

Извините за задержку с ответом. На прошлой неделе я был занят работой по контракту.

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

Я не разработчик на Ruby, но, насколько я понимаю, он ищет URL-адреса, на которые ссылаются предопределённые HTML-теги. Таким образом, для компонента темы «вставка видео», который я скопировал, атрибут src любого HTML-элемента <source> распознаётся как загрузка, а атрибут poster любого HTML-элемента <video> также распознаётся как загрузка. Однако для моего компонента «вставка модели 3D» HTML-элемент <model-viewer> отсутствует в этом списке, поэтому ресурсы, на которые он ссылается, не распознаются как загрузки, и через несколько дней они будут удалены.

Долгосрочным решением может быть изменение серверного кода так, чтобы атрибуты model-viewer распознавались как источник загрузок, но я думаю, что пока можно обойти эту проблему, добавив явные HTML-теги <a>, ведущие к загрузкам.

Я собираюсь опубликовать сообщение в категории bug, чтобы проверить, верно ли я понял ситуацию, но на случай, если я прав, я уже отправил исправление для компонента темы «Insert Model 3D», которое добавляет скрытые теги <a> в пост, ссылающиеся на загруженную модель и постер. @patrickemin, если у вас есть время, не могли бы вы проверить, решает ли это проблему? Вам нужно будет обновить компонент, а затем повторно загрузить любые ресурсы 3D-моделей, которые были удалены.

Алан, не уверен, что это решит загадку, но в прошлом это уже влияло на нас, когда в этой области возникали ошибки.

Осиротевшие загрузки периодически удаляются. В процессе загрузки у вас должна появиться запись в таблице uploads. Если по какой-то причине этой записи нет, загрузка в конечном итоге будет удалена.

Это может быть направлением для расследования.

Чтобы проверить модель Upload, можно зайти в консоль Rails из директории Discourse, например:

./launcher enter app
rails c
Upload.last(3)

С уважением

1 лайк

А, это полезно знать, спасибо, Роберт. Знаете ли вы, возможно ли выполнить эту проверку или что-то подобное на размещённом Discourse? Я предполагаю, что нет, поэтому @patrickemin, если ваш сервер размещён самостоятельно, это может быть хорошим поводом для проверки.
Или же у меня есть локальная установка Discourse на основе Docker, над которой я работал, пока не сдался и не перешёл на размещённый Discourse. Это может стать хорошим поводом вернуться к ней. :slight_smile:

2 лайка

Это вопрос, который нужно адресовать в службу поддержки.

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

Привет, я вернулся спустя несколько месяцев… Я воспользовался моментом, когда Microsoft выпустила свою модель Copilot для преобразования 2D в 3D, чтобы протестировать её, и ваш TC теперь работает корректно. После добавления кода модель больше не исчезает. Подробнее здесь.

1 лайк