1004. Blender 2.8: Изменения в Python API. Опыт апгрейда аддонов

Ключевые изменения, связанные со структурой аддонов, описаны в посте “1003. Написание аддонов для Blender 2.8“.

Этот же пост станет неким дневником, в котором я буду описывать изменения в API, с которыми я столкнулся и сложностями перевода аддонов на новую версию.

Сразу скажу, что в целом, старый код работает. А теперь подробнее про изменения:

Изменения в оформлении панелей

#Было
layout.label("Texture Size:")

#Стало. Теперь нужно явно указывать атрибут Text="" 
layout.label(text="Texture Size:")
#Было
split = row.split(percentage=0.85)

#Стало. percentage заменили на factor, обязательное указание align
split = row.split(factor=0.85, align=True)

Изменения Python API

#Выпилили вот этот метод для обращения к активному объекту
bpy.context.scene.objects.active

#Теперь необходимо использовать только вот этот метод
bpy.context.active_object
#Выбор объекта
#Было
bpy.context.scene.objects[0].select = True

#Стало
bpy.context.scene.objects[0].select_set(True)
#ОЧЕНЬ ВАЖНО: Помимо синтаксиса изменилась немного логика работы метода.
#Раньше при выборе объекта это НИКАК не влияло на текущий активный объект.
#Теперь же при выборе объекта он СТАНОВИТСЯ активным. Будьте внимательны.
#Установить текущий активный объект
#Было
bpy.context.scene.objects.active = object
#Стало
bpy.context.view_layer.objects.active = object
# У UV/Image Editor появилось несколько режимов работы. Если необходимо работать с UV, то необходимо проверить, что UV/Image Editor находится в нужном режиме
if bpy.context.space_data.mode != 'UV':
    bpy.context.space_data.mode = 'UV'
#Опция Pivot Point - Center Points Only
#Было
bpy.context.space_data.use_pivot_point_align
#Стало
bpy.context.scene.tool_settings.use_transform_pivot_point_align

#Pivot Point Mode
#Было
bpy.context.space_data.pivot_point = 'MEDIAN_POINT'
#Стало
bpy.context.scene.tool_settings.transform_pivot_point = 'MEDIAN_POINT'
#Минорное изменение в FBX-экспортере. Выпилили атрибут version. Раньше можно было выбрать Binary или ASCII версию. Теперь всегда будет Binary.
bpy.ops.export_scene.fbx(filepath=str(path + name + '.fbx'), ui_tab='MAIN', use_selection=True, global_scale=1, apply_unit_scale=True)

Небольшой отчёт по переносу аддонов на 2.8

Аддон Texel Density Checker был успешно переведён на 2.8. Особых проблем не возникло. В общем всё ограничилось теми изменения, что описаны выше. Теперь важно отслеживать изменения API и вовремя подправлять аддон.

С Asset Creation Toolset всё сложнее. Вот несколько проблем, которые вылезли сходу:

  • Функция по запеканию текстуры-палитры для Low-Poly Art моделей была написана под Blender Render. Теперь же её надо перерабатывать под Cycles. Подробнее о том, как реализовано запекание текстуры-палитры, можно прочитать в этом посте.
  • Встроенный аддон для запекания текстуры в Vertex Color еще не доступен в 2.8. И неизвестно, будет ли он вообще. На нём основана аналогичная функция в аддоне, но для всех выбранных объектов сразу.
  • Самое неприятное. Баг с применением трансформаций на объектах, имеющих связь родитель-потомок. Из-за этого не получается полноценно перенести функцию экспорта FBX для Unity. 

Пост я буду обновлять по мере появления/обнаружения новых изменений. Чтобы не пропускать обновлений в блоге, подписывайтесь на группу ВК или канал в Телеграмме.

Вернуться к энциклопедии