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

スクリプト
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 をデフォルトの機能として追加してほしい。
- スクリプトには最低限のコードしか書いていないので、適宜修正して使ってほしい。