Python

Получаем значение свойства в Blender через контекст

Для определения текущего активного объекта в сцене в Blender мы обычно используем контекст и его свойство context.object (или context.active_object). Точно так же и при работе с интерфейсом мы можем обратиться к контексту, чтобы получить текущее активное свойство – значение поля в Blender UI над которым мы позиционируем курсор или по которому мы сделали клик мышкой. Для этого служит свойство context.property.

Быстрое переименование дата-блоков в соответствии с именами объектов в Blender

Когда мы присваиваем или изменяем имя объекта в Blender, мы работаем на уровне объекта. Однако у любого объекта есть еще и так называемый дата-блок – указатель на собственно данные объекта, у которого тоже есть имя. Имя дата-блока можно увидеть, кликнув на угловую стрелочку слева от имени объекта в аутлайнере.

Назначение индексов точкам, созданным в bmesh

Когда для создания новой геометрии мы работаем через Blender Python API с объектом bmesh, все создаваемые вертексы получают индекс равный -1. Хотя мы можем полноценно взаимодействовать и управлять созданными вертексами, отсутствие у них номерного индекса может несколько затруднить восприятие геометрии и отладку кода.

Блокируем вынос развертки за границы области UV

В большинстве случаев острова развертки можно беспрепятственно перемещать в рабочей области UV Edit в любое место. Однако иногда бывает нежелательно выносить развертку за границы базовой области UV, например, чтобы гарантировать, что развертка не “уедет”, при запекании в атласы.

Делаем отменяемый оператор в Blender неотменяемым

Проектируя новые операторы в Blender, мы можем делать их отменяемыми и не отменяемыми, указывая значение “UNDO” в параметре bl_options оператора. Но как быть, если нам нужно исключить из очереди отмены какой-либо уже существующий, например, системный оператор? Это очень просто сделать, переопределив оператор на собственный, без указания “UNDO” в его параметрах.

Операторы с возможностью отмены (Ctrl + z) и без нее

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

Кастомные иконки в EnumProperty в Blender

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

Онлайн расширения Blender

В Blender версии 4.1 и ниже, все аддоны устанавливались локально. Чтобы установить аддон, нужно было скачать его на компьютер, открыть рабочую область Preferences, перейти на вкладку Add-ons и инсталлировались аддон нажав на кнопку Install. Начиная с версии 4.2 открылись Extensions – для установки стали доступны аддоны, размещенные онлайн.

Вынос регуляторов Max/Min сокетов в Geometry Nodes на пользовательскую панель

Для того чтобы в Blender вынести значение сокета на панель модификатора Geometry Nodes нужно просто создать линк и соединить нужный сокет на нужном ноде с пустым сокетом на ноде Group Input. После этого в панели модификатора появляется поле, в котором можно менять значение нужного сокета. Далее это поле мы можем вынести на пользовательскую панель, обратившись к нему как к динамическому свойству.

Изменение порядка сокетов в нодовых группах Geometry Nodes

Изменить порядок сокетов в нодовой группе вручную можно простым перетаскиванием – в N-панели во вкладке Group – Interface зажимаем нужный сокет и перетягиваем его мышкой на нужное место. Переместить сокет в групповом ноде на новое место при помощи Blender Python API можно, используя функцию move объекта interface.