Ссылки на объекты ломаются при использовании отмены ctrl+z

В линейке Blender 2.8x система отмены операций undo/redo (ctrl+z / ctrl+shift+z) была полностью переделана по сравнению с линейкой 2.7x. Одним из результатов такого изменения API является то, что при выполнении операции отмены все объекты в сцене перестраиваются заново – текущий объект уничтожается, а вместо него создается совершенно новый объект. Ссылки, которые указывали на старый объект, до выполнения операции отмены, после нее указывают на невалидный объект с которым больше нельзя работать.

Читать далее «Ссылки на объекты ломаются при использовании отмены ctrl+z»

Куда пропало автозавершение кода в python-консоли Blender 2.82

В Blender 2.81 и более ранних версиях в python-консоли можно было просмотреть возможные варианты завершения набираемого кода, нажав “ctrl + пробел”. В Blender 2.82 эта возможность исчезла.

На самом деле этот функционал в 2.82 не удален, его просто перенесли на нажатие клавиши “tab“.

Выравнивание элементов пользовательского интерфейса по колонкам

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

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

Читать далее «Выравнивание элементов пользовательского интерфейса по колонкам»

Как получить полный список коллекций

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

Читать далее «Как получить полный список коллекций»

Глобальная замена материалов в сцене для рендер-движка EEVEE

Часто бывает нужно получить рендер всей сцены с одним материалом. Например для “глиняных” рендеров (clay render) или рендеров сетки (wireframe render). Если для рендер-движка Cycles в настройках View Layer Properties – Override предусмотрена возможность глобально заменить все материалы на один, то для рендер-движка EEVEE такой возможности нет.

Быстрое переопределение материалов для рендер-движка EEVEE можно сделать с помощью небольшого скрипта, как это показано в следующем видео:

Автор скрипта и видео Виталий Сокол

Читать далее «Глобальная замена материалов в сцене для рендер-движка EEVEE»

Особенности задания параметров оператора

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

Например, нам нужно вызвать оператор “transform_apply” – применение трансформаций к объекту, указав применить только масштаб.

Если мы вызовем оператор следующим образом:

К объекту все равно будут применены все трансформации (масштаб, вращение и положение).

Читать далее «Особенности задания параметров оператора»

Рендер из консоли только на определенных GPU-картах

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

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

Читать далее «Рендер из консоли только на определенных GPU-картах»

Как определить направление кривой Безье

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

Индексы точек кривой Безье всегда идут по возрастанию в направлении кривой.

Имея две точки на кривой, через их индексы можно получить направление:

 

Обновление модулей для автокомплита fake-bpy-modules для Blender Python API

Обновление модулей автокомплита Blender Python API от Nutti – добавлена ветка для Blender 2.81a.

Последний релиз от 2020.01.11.

GitHub автора: https://github.com/nutti/fake-bpy-module

Файлы отдельно (без установки через pip) https://github.com/Korchy/blender_autocomplete

Назначение вертексам дополнительных свойств

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

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

Читать далее «Назначение вертексам дополнительных свойств»

Как разделить и объединить окна в Blender через python API

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

Чтобы разделить текущее (с текущим context) окно на два в заданном соотношении, нужно выполнить оператор:

Где:

  • direction указывает на направление разбиения – по горизонтали ‘HORIZONTAL’ или по вертикали ‘VERTICAL’
  • factor – процентное соотношение разделенный окон по выбранному направлению

Читать далее «Как разделить и объединить окна в Blender через python API»

Как сохранить данные меша в текст

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

Можно экспортировать меш в один из открытых форматов, например в *.obj, но если нужны только данные по вертексам и полигонам, можно использовать следующий несложный скрипт:

Читать далее «Как сохранить данные меша в текст»

Создание кастомного свойства

API Blender предоставляет для использования набор простых типов свойств, описанных в bpy.props (IntProperty,  BoolProperty и т.д.). Но базовых типов не всегда хватает, иногда нужны более сложные. API Blender позволяет группировать простые свойства, создавая таким образом более сложные.

Рассмотрим создание такого свойства на примере матрицы 3х3.

Читать далее «Создание кастомного свойства»

Как узнать текущую версию Blender через Python API

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

или

Читать далее «Как узнать текущую версию Blender через Python API»

Рисование в окне вьюпорта

API Blender предоставляет возможность рисовать в окне вьюпорта (3D Viewport) при помощи модуля gpu.

Для примера нарисуем в центре сцены упрощенный виджет системы координат, состоящий из трех линий разного цвета.

Читать далее «Рисование в окне вьюпорта»

Как привязать к нажатию кнопки вызов функции, а не оператора

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

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

Читать далее «Как привязать к нажатию кнопки вызов функции, а не оператора»

Как получить все возможные значения свойства Enum

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

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

TypeError: bpy_struct: item.attr = val: enum “xxx” not found in (‘value_001′, value_002’, …)

где:

xxx – значение, которые мы попытались задать свойству EnumProperty

value_001, value_002, … – возможные значения, которые может принимать данное свойство EnumProperty

Читать далее «Как получить все возможные значения свойства Enum»

Как переместить курсор к нужному вертексу

Для того, чтобы передвинуть курсор к определенному вертексу меша нужно выполнить следующий код:

Умножение на матрицу мира должно осуществляться именно в таком порядке (матрица слева).

Добавление объекта в сцену в Blender 2.80 Python API

В API Blender 2.79 созданный объект добавляется в сцену через:

Попытка добавить объект в сцену таким образом в Blender 2.80, приводит к ошибке:

‘bpy_prop_collection’ object has no attribute ‘link’

В Blender 2.80 API добавлять объект нужно не в саму сцену, а в ее коллекции.

Добавить объект в активную коллекцию:

Добавить объект в коллекцию по ее имени:

 

Как поставить курсор в начало или в конец активного стрипа в Blender VSE

Чтобы поставить курсор в начало активного стрипа в Blender VSE нужно выполнить команду:

Чтобы переместить курсор в конец активного стрипа:

 

Передача параметров в оператор

При создании собственных операторов иногда бывает нужно передавать в них определенные значения – вызывать операторы с параметрами.

Передаваемый параметр должен быть определен, как свойство оператора.

Читать далее «Передача параметров в оператор»

Перенос выделения с UV-развертки на меш

Для переноса выделения с UV-развертки на меш достаточно вспомнить, что развертка напрямую связана с мешем через мешлупы.

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

Читать далее «Перенос выделения с UV-развертки на меш»

Как получить список вертексов, входящих в группу в Vertex Groups

Список вертексов, входящих в группу с определенным именем можно получить следующим образом:

 

Создание точки на кривой Безье

Кривая Безье строится по четырем точкам: две основные точки (p0, p1) и две опорные (p0_hr, p1_hl).

Для того, чтобы построить на кривой дополнительную точку p2 в какой-то момент t, где t изменяется от 0 до 1 и представляет собой соотношение положения строящейся точки p2 к общей длине кривой, нужно проделать следующие вычисления:

Читать далее «Создание точки на кривой Безье»

Fake-bpy-module

Автокомплит кода сильно упрощает работу при написании скриптов или разработке аддонов для Blender. Один из лучших на сегодня модулей автокомплита разрабатывается Nutti. Последнее обновление: 20190718.

Проект размещается на GitHub автора: https://github.com/nutti/fake-bpy-module

Для удобства установки модули распространяются через pip или в виде pre-generated zip-архива. Так же автор предоставляет генератор модулей, с помощью которого можно собрать модули автокомплита самостоятельно.