Чаще всего необходимость очистить кастомные нормали возникает при импорте объектов из внешних сцен. Удалить кастомные нормали можно вручную, последовательно выбирая меши в сцене и нажимая на кнопку Clear Custom Split Normals Data в панели Properties на вкладке Data объекта. Однако если таких объектов много, можно написать простейший скрипт на Blender Python API, который быстро очистит нормали на всех выделенных объектах.
За удаление кастомных нормалей в Blender Python API отвечает оператор customdata_custom_splitnormals_clear().
Для начала получим список выделенных в сцене объектов:
1 2 3 |
selection = bpy.context.selected_objects # [bpy.data.objects['Suzanne'], bpy.data.objects['Suzanne.002'], ...] |
После чего пройдем в цикле по всем объектам из списка и вызовем оператор очистки кастомных нормалей.
1 2 3 |
for obj in selection: bpy.context.view_layer.objects.active = obj bpy.ops.mesh.customdata_custom_splitnormals_clear() |
Обратите внимание, оператор удаления кастомных нормалей при вызове обрабатывает только один текущий активный объект. Поэтому сначала во второй строчке мы делаем каждый текущий обрабатываемый объект из списка активным, и после этого вызываем оператор удаления кастомных нормалей.
Если вы работаете со старой версией Blender (2.7x) то, для того чтобы сделать текущий объект активным, используется немного другая команда.
1 2 3 4 5 |
# for Blender 2.7x for obj in selection: bpy.context.scene.objects.active = obj bpy.ops.mesh.customdata_custom_splitnormals_clear() |
Сам вызов оператора ничем не отличается.