메쉬에 두 개 이상의 재료가있는 경우 메쉬에서 추가 재료를 제거하는 방법은 무엇입니까?

Nov 15 2020

메시에 두 개 이상의 머티리얼이 있는지 확인하는 스크립트를 작성하고 있다면 머티리얼이 하나만 남을 때까지 머티리얼을 제거합니다. 지금까지 내가 가진 것은 다음과 같습니다.

import bpy
for ob in bpy.data.objects:
    number_of_mats = len(ob.material_slots.items())
    if number_of_mats > 1:
        for i in range(number_of_mats-1):
            # remove material here?

이 시점에서 매트를 제거하는 방법을 알아낼 수없는 것 같습니다. 어떤 제안?

답변

2 brockmann Nov 15 2020 at 21:10

목록의 색인을로 설정하고 1다음 슬롯을 반복하고 의 컨텍스트 를 호출하고 재정 의 할 수 material_slot_remove()있습니다. 모든 슬롯 을 제거하는 방법에 대한 데모 > 0 :

for obj in bpy.context.selected_editable_objects:
    obj.active_material_index = 1
    for i in range(1, len(obj.material_slots)):
        bpy.ops.object.material_slot_remove({'object': obj})
Koen Nov 15 2020 at 21:03

UI에서 재질을 제거하면 다음과 같이 표시됩니다.

bpy.context.object.active_material_index = 2
bpy.ops.object.material_slot_remove()

문서가 여기에있는 것 같습니다.

도움이되는 희망, Koen

scurest Nov 27 2020 at 01:33

운영자 없이도 할 수 있습니다.

import bpy
for ob in bpy.data.objects:
    # Skip things without materials (armatures, etc.)
    if not hasattr(ob.data, 'materials'):
        continue

    while len(ob.data.materials) > 1:
        ob.data.materials.pop()