import bpy
import bmesh
obj = bpy.context.object
# マテリアル名と同名のfacemapを生成してマテリアルスロット番号->FaceMap番号を紐付ける
mat_to_fm = {}
for slot in obj.material_slots:
mat = slot.material
fm = obj.face_maps.get(mat.name)
if fm is None:
fm = obj.face_maps.new(name=mat.name)
mat_to_fm[slot.slot_index] = fm.index
# 面に割り当てられているマテリアルスロット番号(material_index)をfacemapに反映
bm = bmesh.new()
bm.from_mesh(obj.data)
fm = bm.faces.layers.face_map.verify()
for face in bm.faces:
face[fm] = mat_to_fm[face.material_index]
bm.to_mesh(obj.data)
aW1wb3J0IGJweQppbXBvcnQgYm1lc2gKCm9iaiA9IGJweS5jb250ZXh0Lm9iamVjdAoKIyDjg57jg4bjg6rjgqLjg6vlkI3jgajlkIzlkI3jga5mYWNlbWFw44KS55Sf5oiQ44GX44Gm44Oe44OG44Oq44Ki44Or44K544Ot44OD44OI55Wq5Y+3LT5GYWNlTWFw55Wq5Y+344KS57SQ5LuY44GR44KLCm1hdF90b19mbSA9IHt9CmZvciBzbG90IGluIG9iai5tYXRlcmlhbF9zbG90czoKICAgIG1hdCA9IHNsb3QubWF0ZXJpYWwKICAgIGZtID0gb2JqLmZhY2VfbWFwcy5nZXQobWF0Lm5hbWUpCiAgICBpZiBmbSBpcyBOb25lOgogICAgICAgIGZtID0gb2JqLmZhY2VfbWFwcy5uZXcobmFtZT1tYXQubmFtZSkKICAgIG1hdF90b19mbVtzbG90LnNsb3RfaW5kZXhdID0gZm0uaW5kZXgKICAgIAojIOmdouOBq+WJsuOCiuW9k+OBpuOCieOCjOOBpuOBhOOCi+ODnuODhuODquOCouODq+OCueODreODg+ODiOeVquWPtyhtYXRlcmlhbF9pbmRleCnjgpJmYWNlbWFw44Gr5Y+N5pigCmJtID0gYm1lc2gubmV3KCkKYm0uZnJvbV9tZXNoKG9iai5kYXRhKQpmbSA9IGJtLmZhY2VzLmxheWVycy5mYWNlX21hcC52ZXJpZnkoKQpmb3IgZmFjZSBpbiBibS5mYWNlczoKICAgIGZhY2VbZm1dID0gbWF0X3RvX2ZtW2ZhY2UubWF0ZXJpYWxfaW5kZXhdCmJtLnRvX21lc2gob2JqLmRhdGEpCg==