Python

Быстрая синхронизация отображения объектов во вьюпорте и для рендера

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

Положение вьюпорта

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

Перерисовка экрана

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

Как определить был ли переопределен системный оператор

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

Печать текста на экран 3D вьюпорта

При помощи модуля gpu в Blender Python API на рабочую область 3D вьюпорта можно выводить не только изображения, но и печатать произвольный текст. Печать текста осуществляется при помощи модуля blf – обертки над OpenGl.

Удаление цветов вершин со всех выделенных объектов

Информация о раскраске вершин меша хранится в его свойстве с именем vertex_colors, а также в его цветовых атрибутах color_attributes. Для того чтобы удалить с меша информацию о цветах его вершин, нужно очистить эти его свойства.

Переопределение списка выбранных объектов для оператора transform.translate

Для того чтобы оператор, вызванный из непредназначенного для него контекста, правильно выполнил свою работу, для него необходимо переопределить контекст при помощи bpy.context.temp_override.() Однако при помощи temp_override можно переопределять не только контекст вызова оператора, но и, например, стек выбранных объектов.

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

У вертексов нет свойства “цвет”. Цвета вертексов, задаваемые раскраской в режиме Vertex Paint или любым другим способом, хранятся в атрибуте – отдельном списке значений. Для того чтобы выделить точку по цвету, назначенному ей в атрибуте, нужно связать индексы атрибута с индексом вертекса.

Создание кастомных иконок для инструментов Blender

Базовые иконки, использующихся в UI и операторах, прошиты внутри Blender, и поэтому мы не можем отредактировать или добавить новые иконки без полной перекомпиляции Blender. Иконки для панелей инструментов не привязаны сборке Blender, хранятся в отдельных файлах, и мы можем заменять или создавать и добавлять в Blender новые иконки инструментов.

Получение id для иконок инструментов

Id иконок инструментов соответствуют называниям файлов, в которых они хранятся и их можно получить просто посмотрев в соответствующую папку Blender. Однако идентификаторы иконок можно получить и через Blender Python API при помощи класса ToolSelectPanelHelper.