スポンサーリンク

| キーワード:

Blender Pythonでオブジェクトの面ごとに違うマテリアルを設定する

メッシュの面は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

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: