VRMにパーツを追加するPythonコード
コードのオブジェクトとボーンの名前を変更して実行すれば、
あっという間にくっ付けられます。
import bpy
# アタッチしたいオブジェクトの名前(アタッチしたいオブジェクトの名前に変更)
ATTACH_OBJECT_NAMES = ['sakura_tree', 'sakura_flower']
# アタッチするボーンの名前(アタッチするボーンの名前に変更)
BONE_NAMES = ['J_Bip_C_Head', 'J_Bip_C_UpperChest']
for attach_object_name, bone_name in zip(ATTACH_OBJECT_NAMES, BONE_NAMES):
# ボーンにアタッチ
attach_object = bpy.data.objects[attach_object_name]
armature = bpy.data.objects['Armature']
original_matrix_world = attach_object.matrix_world.copy()
bpy.ops.object.select_all(action='DESELECT')
attach_object.select_set(True)
armature.select_set(True)
bpy.context.view_layer.objects.active = armature
bpy.ops.object.parent_set(type='ARMATURE_NAME', xmirror=False, keep_transform=True)
armature.select_set(False)
attach_object.parent_type = 'BONE'
attach_object.parent_bone = bone_name
attach_object.matrix_world = original_matrix_world
# 頂点グループの割り当て
vertex_group_name = bone_name
if vertex_group_name not in attach_object.vertex_groups:
vertex_group = attach_object.vertex_groups.new(name=vertex_group_name)
else:
vertex_group = attach_object.vertex_groups[vertex_group_name]
vertices = attach_object.data.vertices
for vertex in vertices:
vertex_group.add([vertex.index], 1.0, 'ADD')
アタッチしたいオブジェクトの名前とアタッチするボーンの名前に合わせて
下記コードを変更します。
# アタッチしたいオブジェクトの名前(アタッチしたいオブジェクトの名前に変更)
ATTACH_OBJECT_NAMES = ['sakura_tree', 'sakura_flower']
# アタッチするボーンの名前(アタッチするボーンの名前に変更)
BONE_NAMES = ['J_Bip_C_Head', 'J_Bip_C_UpperChest']
例えば、オブジェクトcubeをボーンJ_Bip_C_Headにアタッチしたい場合は、
下記コードになります。
# アタッチしたいオブジェクトの名前(アタッチしたいオブジェクトの名前に変更)
ATTACH_OBJECT_NAMES = ['cube']
# アタッチするボーンの名前(アタッチするボーンの名前に変更)
BONE_NAMES = ['J_Bip_C_Head']
cube1をJ_Bip_C_Head、cube2をJ_Bip_C_Head、cube3をJ_Bip_C_UpperChestに
アタッチしたい場合は、下記コードになります。
# アタッチしたいオブジェクトの名前(アタッチしたいオブジェクトの名前に変更)
ATTACH_OBJECT_NAMES = ['cube1', 'cube2', 'cube3']
# アタッチするボーンの名前(アタッチするボーンの名前に変更)
BONE_NAMES = ['J_Bip_C_Head', 'J_Bip_C_Head', 'J_Bip_C_UpperChest']
blenderでpythonコードを実行する方法
1 上部のScriptingをクリック
2 上部の+ Newをクリック
3 コードを入力
4 上部の三角形のボタン▷(Run Script)をクリック