Назначение и удаление модификаторов в Blender выполняется отдельно для каждого объекта. Однако, если требуется, например, удалить модификатор со многих объектов в сложной сцене, удалять их с каждого объекта по отдельности будет долго и неэффективно. При помощи Blender Ptyhon API можно написать простейший скрипт, который удалит модификаторы со всех выделенных объектов в сцене.
Для начала нам нужно определить тип модификатора, который мы ходим удалить с объектов.
Для текущего активного объекта в сцене тип его активного модификатора можно получить так:
1 2 3 |
bpy.context.object.modifiers.active.type # SUBSURF |
Или по его порядковому номеру в списке модификаторов (не забываем, что в списках порядок перечисления начинается с нуля):
1 2 3 |
bpy.context.object.modifiers[1].type # SUBSURF |
Пройдем в цикле по всем выделенным объектам сцены:
1 |
for obj in bpy.context.selected_objects: |
Получить список всех модификаторов объекта можно следующим образом:
1 2 3 |
all_modifiers = [_modifier for _modifier in obj.modifiers] # [bpy.data.objects['Suzanne.002'].modifiers["Triangulate"], bpy.data.objects['Suzanne.002'].modifiers["Subdivision"], ...] |
Однако нам нужно удалить модификаторы только одного типа, поэтому добавим в список фильтр.
1 2 3 |
subsurf_modifiers = [_modifier for _modifier in obj.modifiers if _modifier.type == 'SUBSURF'] # [bpy.data.objects['Suzanne.002'].modifiers["Subdivision"], ] |
Теперь мы можем удалить модификаторы с объекта по полученному списку.
1 2 |
for modifier in subsurf_modifiers: obj.modifiers.remove(modifier) |
Все вместе:
1 2 3 4 |
for obj in bpy.context.selected_objects: subsurf_modifiers = [_modifier for _modifier in obj.modifiers if _modifier.type == 'SUBSURF'] for modifier in subsurf_modifiers: obj.modifiers.remove(modifier) |
Обратите внимание, так как мы удаляем модификаторы по типу и списком, а не через порядковый номер, как можно было бы сделать, даже если на один объект наложены несколько модификаторов одного типа, все одни будут удалены.