夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

BlenderでPythonを使用してマテリアルスロットごとにペイントマスクを設定する

本日はBlenderPython枠です。

今回は頂点ペイントモードでのユーティリティを改善するためのちょっとしたツールを作ります。(prototype)

〇ペイントマスク

頂点ペイントモードでは頂点カラーを設定することができますが、Blender3.xではctrlキー+Kキー、Blender4.xではctrlキー+Xキーでオブジェクト全体に指定したカラーの塗りつぶしを行うことができます。

ペイントマスクはモード切替メニューの隣の面、頂点、のアイコンを選択することで可能です。

この状態で頂点もしくは面を選択することで選択された部分のみペイントを行い頂点カラーを設定することができます。

今回はこのマスクをマテリアルスロットごとに自動で選択できるようにしていきます。

編集モードではマテリアルスロットから選択を行うことでマテリアルを使用しているメッシュのみを選択が可能です

頂点ペイントでも同じような挙動を期待して実装します。

〇コード

今回は次のコードを使用します。

import bpy

# メッシュオブジェクトを取得
obj = bpy.context.object

# メッシュオブジェクトが選択されていることを確認
if obj.type == 'MESH':
    # 頂点ペイントモードに切り替え
    bpy.ops.object.mode_set(mode='VERTEX_PAINT')

    # メッシュのすべてのポリゴンに対して
    for poly in obj.data.polygons:
        # ポリゴンが1番目のマテリアルを使用している場合
        if poly.material_index == 1:
            # ポリゴンを選択
            poly.select = True
        else:
            # それ以外の場合、ポリゴンの選択を解除
            poly.select = False


else:
    print("メッシュオブジェクトが選択されていません。")

poly.material_index == 1:で指定した番号のマテリアルを使用しているメッシュがペイントマスクされます。

これによって頂点ペイントモードでもマテリアルごとの選択が可能となりました。

本日は以上です。