BlendPyBridge – расширение Microsoft Visual Studio Code для разработки аддонов в Blender

BlendPyBridge  – это расширение, предназначенное упростить разработку аддонов для Blender. Для тех разработчиков, кто пользуется расширением “Blender Development”, оно может стать интересной альтернативой.

Необходимая ремарка: Хотя данный обзор написан по предложению автора расширения, он не является рекламой, призывом или рекомендацией использовать его при написании аддонов. Этот обзор – мои личные впечатления, как разработчика аддонов для Blender, от первого знакомства с расширением. Версия расширения: v2402.7.0.

Установка расширения

Установка расширения производится стандартным для Microsoft Visual Studio Code образом:

  • открываем редактор Visual Studio Code;
  • открываем Extensions Marketplace;
  • вводим название расширения и нажимаем кнопку “Install”.

Предварительная настройка

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

Нажимаем F1 (или Ctrl + Shift + p) и вводим Select Blender Executable. Нажимаем на пункт в меню и выбираем файл blender.exe в директории установки Blender на вашем компьютере.

Здесь у расширения есть определенный недостаток: настройки не пишутся в общий конфигурационный файл Visual Studio Code, а хранятся в конфигурации самого расширения. Это затрудняет синхронизацию настроек Visual Studio Code, если пользователь работает на разнымх компьютерах.

Проверить, указан ли путь к Blender можно нажав F1 (или Ctrl + Shift + p) и введя команду Print path Blender. Во всплывающем окне будет показан установленный путь.

Пробуем расширение в работе с Blender

Запускаем прослушивание команд:

Нажимаем F1 (или Ctrl + Shift + p) и вводим Start Blender with socket server. Также возможен быстрый запуск нажатием клавиш Shift+F7.

Отдельным окном открывается Blender, а Visual Studio Code включает прослушивание на порту 3264.

Для выхода из режима можно просто закрыть окно Blender.

Это действие обязательно нужно выполнить для того, чтобы стартовать сессию с Blender. Без этого дальше ничего работать не будет.

Выполнение команд

К сожалению, аддон в текущей версии не предоставляет функционала прямого проброса команд из Visual Studio Code в Blender с получением обратного ответа. То есть нельзя в терминале Visual Studio Code написать что-нибудь вроде:

И получить там же ответ от Blender:

Для ввода быстрых команд нужно переключаться на открытое окно Blender.

Выполнение скриптов

Расширение позволяет запускать отдельные скриптовые блоки кода. Для того чтобы выполнить скрипт, нужно чтобы:

  • файл с кодом был сохранен с расширением .py в определенной директории
  • эта директория была открыта в Workspace редактора.

Для примера создадим новый файл (Ctrl + n), введем в него простейший код, добавляющий в сцену меш “Suzanne”, назовем файл simple.php и сохраним в директории d:/BlendPyBridge.

Откроем Explorer в Visual Studio Code и откроем нужную директорию в Workspace нажатием на кнопку, или просто перетащим папку BlendPyBridge в рабочую область редактора.

Нажмем F1 (или Ctrl + Shift + p) и введем Run the current script in Blender, или, что быстрее, вызовем эту команду нажатием Shift + F9.


Код скрипта будет проброшен и выполнен в Blender.

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

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

Если мы просто создадим новый файл (Ctrl + n), введем в него код, и попытаемся отправить его в Blender, нажав Shift + F9, мы получим ошибку

Выбран не *.py файл

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

Также следует отметить, что расширение работает лишь с сохраненным кодом. Если вы внесли изменения в ваш код, но еще не сохранили его, нажатие Shift + F9 пробросит и выполнит в Blender сохраненную, еще не исправленную версию кода.

Работа с аддонами

Наконец мы переходим к основной фишке расширения, с которой оно раскрывает все свои возможности  – быстрый проброс разрабатываемых аддонов в Blender.

Для примера создадим в директории d:/BlendPyBridge минимальный набор файлов для аддона Blender:

__init__.py – стартовый файл для инициализации аддона

test_ops.py – в этом файле мы разместим главный оператор аддона. Пусть в простейшем случае он опять же добавляет в сцену меш “Сюзанна”.

И файл test_panel.py – здесь мы разместим UI нашего тестового аддона: панель с кнопкой вызова оператора.

Еще раз проверяем что файлы сохранены, директория открыта в Visual Studio Code Workspace и запущен сеанс связи с Blender (Shift + F7).

Нажимаем F1 (или Ctrl + Shift + p) и вводим Run the entrie package in Blender. Или же можно нажать шорткод Shift + F8. Расширение пробрасывает все файлы аддона в Blender.

Переключившись на окно Blender мы увидим появившуюся панель TEST нашего аддона с кнопкой. Нажав на нее мы запустим выполнение оператора и добавим “Сюзанну” в сцену.

Внесем изменения в файл test_ops.py. Заменим добавление в сцену “Сюзанны” на добавление в сцену дефолтного куба. Для этого поменяем тело функции “execute” оператора на следующий код:

Сохраним изменения и опять нажмем Shift + F8. Расширение снова сделает проброс кода, и нажав на кнопку нашего аддона снова, мы получим новый результат – в сцену добавится куб вместо “Сюзанны”.

Таким образом расширение позволяет нам вести разработку аддона в Visual Studio Code, сразу тестировать его в Blender, а также нажатием одной кнопки вносить изменения и получать измененную работу аддона в Blender.

О технической стороне и дополнительных плюсах

Интересной особенностью расширения является то, что пробрасывая разрабатываемый код в Blender, оно не имитирует и не выполняет программную установку аддона в Blender.

Обычно, подобные инструменты действуют следующим образом: код аддона упаковывается архиватором zip в архив. После этого из Blender программно вызывается установщик аддонов, которому передается созданный ранее архив и Blender выполняет установку аддона в стандартную директорию, в которую устанавливаются все аддоны. Происходит программная активация аддона, после чего разработчик может вызывать и тестировать разрабатываемый аддон в Blender.

Однако, если мы сейчас откроем директорию, в которой в Blender устанавливаются аддоны,

мы не найдем в ней папки с нашим тестовым аддоном.

Как так получается? Аддон есть и работает, а в директории с аддонами его нет.

Вся магия (черная или белая?) расширения BlendPyBridge заключается в манипуляции с модулем sys. Этот модуль в Python отвечает за переменные и пути, с которыми работает интерпретатор.

Если мы в Python-консоли в Blender наберем следующие команды:

Мы увидим что в путях среды прописан указатель на само расширение, а в модулях – прописаны абсолютные пути ко всем модулям аддона.

Этот трюк и позволяет аддону функционировать, не будучи установленным в Blender физически.

И здесь проявляется самый большой плюс использования данного расширения.

Если вы разрабатываете большой аддон и включаете в него большие по объему модули или предоставляете много встроенного контента, стандартный способ установки аддонов в Blender потребует постоянной упаковки в архив, копирования и обратного разорхивирования всего этого объема данных. А если вы делаете аддон в связке с какой-нибудь нейросетью, весом в 10 Гб, сколько времени займет стандартная переустановка аддона для исправления простых синтаксических ошибок в коде?

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

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

Когда мы включаем в разрабатываемый аддон какие-то сторонние модули, при простой перерегистрации аддона в Blender они не обновляются. Интерпретатор Python устроен таким образом, что обновляет только то, что указано явно, остальной же код берется из py-кэша, если модуль там уже есть. В результате получается, что при перерегистрации аддона в Blender обновляются только основные модули аддона, а дополнительные остаются в кэше и берутся из кэша, оставаясь неизмененными, даже если разработчик обновил в них что-то. Полное обновление аддона со всеми модулями происходит только при полном перезапуске Blender.

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

Выводы и замечания

В целом расширение BlendPyBridge для Visual Studio Code может оказаться очень удобным и полезным для разработки аддонов для Blender.

Хотя его основные цели и качества направлены на работу опытных разработчиков, пишущих большие объемы кода и использующих много стороннего кода или объемного контента, быстрота установки/переустановки аддонов в Blender “одним действием” будет полезна на любом уровне работы.

Из минусов расширения, как отмечалось выше, можно указать на невозможность проброса в Blender отдельных команд, несохраненного в файл кода, а также несохраненных в файл изменений кода. Также некоторую неинтуитивность поведения расширения, “пока не разберешься”.

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

Еще из недостатков я бы отметил возможность вызывать шорткоды только если фокус Visual Studio Code стоит на окне с кодом (впрочем это скорее уже особенности самого редактора) и блокировка системной консоли Blender (главное меню – window – toggle system console).

5 1 голос
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии