マテリアルをソートする

マテリアルスロットをアルファベット順(文字コード順)に並び替えたい時がある。

スクリプト

import bpy

obj = bpy.context.active_object
ops_obj = bpy.ops.object

def sort_mat_slots():
    slots = obj.material_slots
    sorted_slots = []
    for slot in slots:
        sorted_slots.append(slot.name)
        
    sorted_slots.sort()

    for i in range(len(sorted_slots)):
        obj.active_material_index = i
        index = sorted_slots.index(obj.active_material.name)
        diff = index - i
        
        while diff != 0:
            diff = slot_move(diff)
    
def slot_move(diff):
    if diff < 0:
        ops_obj.material_slot_move(direction='UP')
        diff = diff + 1
    elif  diff > 0:
        ops_obj.material_slot_move(direction='DOWN')
        diff = diff - 1
    return(diff)

sort_mat_slots()

手順

  • Workspace を Scripting にする
  • 新しいテキストに上記のコードをコピペする(参考画像内①)
  • スクリプトを実行する(参考画像内②)

  • マテリアルがアルファベット順に並び替えられたことを確認する

所感

  • Vertex Groups のように、Material Slot にも Sort by Name をデフォルトの機能として追加してほしい。
  • スクリプトには最低限のコードしか書いていないので、適宜修正して使ってほしい。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です