Python

Динамические описания в операторах

Обычно при создании оператора в Blender Python API его описание задается через параметр “bl_description”. Однако достаточно часто один и тот же оператор выполняет различные действия в разных случаях и единое описание не отражает всех возможностей оператора. В этом случае оператору можно задать динамическое описание.

Поиск пересечений

Одной из частых задач при построении сцены в Blender является контроль пересечения мешей. Определить пересекаются ли два меша между собой можно, используя технологию ограничивающих объемов (Bounding Volume).

Список выделенных в Аутлайнере коллекций

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

Указание параметров в макросах

Макросы в Blender отличаются от операторов тем, что не требуют жесткого задания последовательности выполняемых действия при регистрации. В операторах действия определяются в функции “execute”, для макросов же действия добавляются при помощи метода “define”.

BPY plus v 1.6.0.

Обновление BPY plus до версии 1.6.0.

  • Добавлен новый модуль output для получения выходных данных о рендере
  • Добавлен новый модуль vse для упрощения работы с Video Sequence Editor (VSE)
  • Добавлен новый модуль collections для упрощения работы с коллекциями
  • Добавлен новый модуль context для работы с контекстов

Как добавить кнопку в хедер окна в Blender

С помощью Python API в Blender можно кастомизировать интерфейс, настроив его удобным для себя образом. Например, можно вынести наиболее часто используемые операторы в хедер (верхнее меню) любой рабочей области Таким образом можно собрать собственный риббон из “быстрых” кнопок.

Рендер отдельного кадра для превью при рендере анимации

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

Получение номера свободного канала в Sequence Editor через Blender Python API

Для того, чтобы программно добавить новый стрип в Sequence Editor, необходимо знать номер канала для его размещения. Получить номер свободного канала в Sequence Editor через Blender Python API можно пройдя по списку секвенций, уже размещенных в Sequence Editor.

Как добавить видео в sequencer VSE при помощи Blender Python API

Blender Python API может оказаться очень полезным не только для работы с мешами или нодами, но и при монтаже готовых видео в Video Sequence Editor.

Переключение вкладок в окне Properties при помощи Blender Python API

Переключится на нужную вкладку в окне Properties при помощи Blender Python API можно, изменив значение context в нужной рабочей области.

Доступ к свойству face_strength из Blender Python API

Параметр “face_strength” используется в модификаторе Weighted Normal для расчета нормалей. Задавать и изменять его значение можно, вызывая специальный оператор, или напрямую получая и записывая его значения через Blender Python API.

Выключение ноды по ее типу

Если необходимо исключить из расчета шейдера все ноды определенного типа, их можно заглушить (mute). Заглушенные ноды остаются в дереве нодов, сохраняя все связи, но не влияют на итоговый результат.

Динамическое задание Max и Min значений для свойства в Blender Python API

Для кастомных свойств в Blender Python API можно задать определенные максимальное и минимальное значения. В этом случае пользователь, вводя нужное значение в поле, не сможет указать для него величину, выходящую за указанные пределы.

Для того, чтобы задать минимальное и максимальное ограничения нужно указать в создаваемом свойстве параметры “min” и “max” и присвоить им нужные ограничивающие значения.

Как связать значение атрибута Geometry Nodes с выходным узлом его нодового дерева

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

get, set, update

set – это, условно говоря, ты наливаешь коньяк в стакан,
а update – это такое – “Вау, в стакане появился коньяк, надо его выпить!”,
а get – это у тебя товарищ спрашивает – “А что в стакане?”, и ты отвечаешь – “Коньяк”. Или – “Чай”.

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

Для применения (apply) модификатора объекта с помощью Blender Python API можно воспользоваться оператором bpy.ops.object.modifier_apply. Однако он обрабатывает только один активный объект.

Если нужно применить модификатор, например Subdivision Surface, для нескольких выделенных объектов, нужно сделать каждый из них активным, и после этого вызвать указанный оператор.

Как импортировать в сцену все объекты из внешнего файла при помощи Blender Python API

Для того, чтобы добавить в сцену все объекты из внешнего blend-файла, можно воспользоваться механизмом BlendDataLibraries.

Как получить все возможные значения EnumProperty для передачи в функцию

При передаче в параметры функции значения типа EnumProperty, точно так же, как и при непосредственном присваивании, всегда нужно точно указывать значение из заданного списка, иначе Blender выдаст ошибку.

Например, если при указании иконки для кнопки в параметр icon функции layout.operator задать неверное значение ее идентификатора,

Blender выдаст ошибку:

TypeError: UILayout.operator(): error with keyword argument “icon” – enum “ICON” not found in (‘NONE’, ‘QUESTION’, ‘ERROR’,…)

Создание одинаковых панелей UI в разных окнах Blender без дублирования кода

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

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

Создание скрытого оператора

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