本日は Blender の技術調査枠です。
Blenderで利用可能なpythonスクリプトを作ります。
bluebirdofoz.hatenablog.com
頂点カラーのベイクを実行
シーン中の全てのメッシュオブジェクトに対して、テクスチャカラーを頂点カラーにベイクします。
シーン名は'Scene'で指定しています。
・bake_vertexcolor.py
# bpyインポート import bpy # 頂点カラーのベイク(全メッシュオブジェクト) # 全メッシュオブジェクトの頂点カラーにベイク処理を行う # 対称シーンの名称は"Scene"で固定 # 引数 # 戻り値 def bake_vertexcolor_all(): # シーン中の全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # 一旦全てのオブジェクトを非選択状態に設定する ob.select=False # [頂点カラーにベイク]を有効にする bpy.data.scenes['Scene'].render.use_bake_to_vertex_color = True # ベイクモードを「テクスチャ」に設定する bpy.data.scenes['Scene'].render.bake_type = "TEXTURE" # シーン中の全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # オブジェクトがメッシュならベイク処理の対象とする if ob.type == 'MESH': # オブジェクトをアクティブにする bpy.context.scene.objects.active = ob # オブジェクトを選択状態にする ob.select = True # 頂点ペイントモードに移行する bpy.ops.object.mode_set(mode='VERTEX_PAINT', toggle=False) # ベイクを実行する bpy.ops.object.bake_image() # オブジェクトを非選択状態にする ob.select = False return # 関数の実行例 bake_vertexcolor_all()
オブジェクトを頂点カラーで表示
全てのメッシュオブジェクトのマテリアル設定を頂点カラーによる表示に切り替えます。。
全マテリアルの参照を切るため、プロジェクトの保存には注意が必要です。
・show_vertexcolor.py
# bpyインポート import bpy # 全てのメッシュオブジェクトで頂点カラー表示 # 全てのマテリアルを削除してメッシュオブジェクトに # 頂点カラー表示のマテリアルを設定し直す # (全マテリアルの参照を切るため、保存には要注意) # 引数 # 戻り値 def show_vertexcolor_all(): # シーン中の全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # 一旦全てのオブジェクトを非選択状態に設定する ob.select=False # シーン中の全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # オブジェクトがメッシュなら一旦マテリアルスロットを初期化する if ob.type == 'MESH': # オブジェクトをアクティブにする bpy.context.scene.objects.active = ob # マテリアルスロットを走査する for material_slot in ob.material_slots: # マテリアルスロットをアクティブにする ob.active_material = material_slot.material # マテリアルスロットを削除する bpy.ops.object.material_slot_remove() # 新規マテリアルの作成 bpy.ops.material.new() # 新規マテリアルの参照を取得する # (新規マテリアルはリストの終端に追加されている) vertexmaterial = bpy.data.materials[-1] # 頂点カラー表示の設定 vertexmaterial.use_vertex_color_paint = True # シーン中の全てのオブジェクトを走査する for ob in bpy.context.scene.objects: # オブジェクトがメッシュならベイク処理の対象とする if ob.type == 'MESH': # 頂点カラーのマテリアルを設定する ob.active_material = vertexmaterial return # 関数の実行例 show_vertexcolor_all()