Python

Как переключать flat – smooth шейдинг через Blender Python API

Режим отображения flat/smoot моделей регулируется через свойство “use_smooth” для каждого полигона модели.

Для того, чтобы включить режим сглаженного (smooth) отображения полигонов, нужно для каждого полигона установить свойство “use_smooth” равным True.

Для активного объекта:

Чтобы установить режим отображения флэт (flat) – для каждого полигона нужно установить “use_smooth” равным False.

Чтобы изменение отобразилось на экране, нужно вызвать обновление данных объекта.

Переключение на вид из камеры через Python API

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

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

Преобразование между системами координат

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

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

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

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

Куда пропало автозавершение кода в 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 можно сделать с помощью небольшого скрипта, как это показано в следующем видео:

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

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

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

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

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

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

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

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

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