メッシュの面はmesh.polygonsに入っている。マテリアルは各面のmaterial_indexにindexの形で指定できるが、マテリアルのインデクスの取得はbpy.data.materials.findで行う。
import bpy # カラーテーブルを作っておく ctable = [] ctable.append( (0,0,1,1) ) ctable.append( (0,1,0,1) ) ctable.append( (0,1,1,1) ) ctable.append( (1,0,0,1) ) ctable.append( (1,0,1,1) ) ctable.append( (1,1,0,1) ) obj = bpy.context.active_object mesh = obj.data i = 0 for face in mesh.polygons: # 全ての面について処理する # マテリアルの存在確認 mat_name = "mat" + str(i) material = bpy.data.materials.get(mat_name) # マテリアルがなければ作成する if material is None: material = bpy.data.materials.new(mat_name) # マテリアルをオブジェクトに設定する obj.data.materials.append(material) material.use_nodes = True # 色を設定 pBSDF = material.node_tree.nodes["Principled BSDF"] pBSDF.inputs[0].default_value = ctable[i] # マテリアルのIndexを取得する matindex = bpy.data.materials.find(mat_name) # 面に使用するマテリアルを設定する face.material_index = matindex i += 1