Импорт FBX с использованием bpy внезапно дает сбой

У меня есть скрипт, который пакетно обрабатывает fbx для меня, и у меня возникают проблемы, когда определенные сетки не импортируются при вызове bpy.ops.import_scene.fbx() (27 из 73). Скрипт внезапно рухнет без вывода какой-либо ошибки.

Я использую блендер, созданный как модуль Python в моем скрипте.

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

import bpy

mesh_path = "my/path/here"

print("import started")
bpy.ops.import_scene.fbx(filepath=mesh_path)
print("import finished")

Запуск, который приводит к:

WARN (bgl): C:\blender-git\blender\source\blender\python\generic\bgl.c:2656 BPyInit_bgl: 'bgl' imported without an OpenGL backend. Please update your add-ons to use the 'gpu' module. In Blender 4.0 'bgl' will be removed.
importing started
FBX version: 7300

Затем процесс завершается без ошибок или вывода после этого.

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

Любая помощь или идеи будут очень признательны, спасибо.

Обновлять: Я смог обнаружить, что мой встроенный модуль bpy на самом деле использует новейшую альфа-версию блендера 3.6.0. Но тестирование в редакторе, которое я проводил, было в 3.5.0, поэтому я создал версию редактора 3.6.0 и столкнулся с той же проблемой, что и выше, но теперь в редакторе, так что это должно быть ошибка в этой новейшей сборке.

Я настроил эту сборку на использование 3.5.0, и импорт работает! Но у меня странная ошибка, из-за которой все полигоны сетки, которые я импортирую, возвращаются в виде списка из 0.

Я не уверен, следует ли мне продолжать поиск исправления здесь или мне следует создать новый вопрос.

Обновление 2: Я смог импортировать сетку в редакторе в моей ручной сборке 3.5.0, но она импортировалась только как вершины. Я просмотрел журнал сборки и нашел пару предупреждений, одно касалось импортера сетки. Поэтому я попробовал другую сборку, выполняющую «сделать импорт» и «сделать». В итоге это сработало, и сетка импортировалась правильно, я сделал то же самое для ветки bpy, и это тоже сработало.

Вы пробовали обновить модуль bpy? Похоже, что bgl устарел и заменен более новым модулем gpu. Может быть, обратитесь сюда github.com/IfcOpenShell/IfcOpenShell/issues/2897?

Anony Mous 15.04.2023 02:15

Могу я также спросить, вы используете AMD или macOS (используя архитектуру M1/M2)?

Anony Mous 15.04.2023 02:21

@AnonyMous Нет, кажется, я видел всплывающую ошибку, но решил, что она нужна только в том случае, если я пытаюсь отобразить окно просмотра. Я постараюсь обновить это, когда я выйду на работу в понедельник. Также я не совсем уверен насчет ПК, так как это рабочая машина. Я могу вернуться к вам по этому поводу.

Zane Jensen 16.04.2023 03:37

Ага, попробуй. Это может решить вашу проблему. Если вы работаете на Mac (M1/2) или используете графические процессоры AMD, ранее сообщалось об ошибке, связанной с ошибкой, связанной с OpenGL.

Anony Mous 16.04.2023 15:09

@AnonyMous У меня графический процессор Nvidia, но у меня процессор AMD. Я запускаю новое обновление make и пробую новую сборку с нуля, чтобы посмотреть, исправит ли это что-то.

Zane Jensen 17.04.2023 21:34

@AnonyMous Сборка только что завершена, и она все еще падает прямо при импорте сетки. Я также все еще получаю вывод «WARN (bgl)», когда вызывается «import bpy».

Zane Jensen 17.04.2023 21:41

'bgl', импортированный без бэкенда OpenGL, можно ли это изменить? Также старайтесь избегать графического процессора AMD, ранее сообщалось о некоторых связанных ошибках. Возможно, bgl не может получить доступ к API блендера.

Anony Mous 18.04.2023 04:52

похоже, что эта ошибка появляется только потому, что bpy автоматически импортирует bgl где-то в своих зависимостях, поэтому на самом деле это не проблема. Просто предупреждение, не относящееся к делу. @AnonyMous Я смог откатиться до 3.5.0 и обновить свои сборки, и теперь все работает нормально. Вот я и ответил на свой вопрос, спасибо за помощь!

Zane Jensen 18.04.2023 22:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
8
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне пришлось вернуться к версии 3.5 вместо альфа-версии 3.6.0 в моей ручной сборке bpy. И не забудьте сделать «обновление», чтобы получить последние версии этой сборки. Затем я смог добиться успеха, и все снова заработало.

Другие вопросы по теме