ボーンと同じ位置にある頂点にウェイトを割り当てる

ボーンの Tail と同じ位置にある頂点に、そのボーンのウェイトを割り当てる。
まず、アーマチュアとメッシュで Armature Deform With Empty Groups を実行して、メッシュに空の頂点グループ(Vertex Groups)を追加する。

次に、アーマチュアとメッシュを選択した状態で、以下のスクリプトを実行する。

import bpy

def assign_weight_to_overlapping_vertices():
    
    if bpy.context.mode != 'OBJECT':
        bpy.ops.object.mode_set(mode='OBJECT')
    
    if bpy.context.selected_objects[0].type == 'ARMATURE':
        obj = bpy.context.selected_objects[1]
        arm = bpy.context.selected_objects[0]
    else:
        obj = bpy.context.selected_objects[0]
        arm = bpy.context.selected_objects[1]
    
    bone_names = obj.vertex_groups.keys()
    
    for vert in obj.data.vertices:
        for bone_name in bone_names:
            tail_co = arm.data.bones[bone_name].tail_local
            length = (vert.co - tail_co).length
            if length < 0.0001:
                vert_group = obj.vertex_groups[bone_name]
                vert_group.add([vert.index], 1.0, 'REPLACE')

assign_weight_to_overlapping_vertices()

スクリプトの length < 0.0001 の箇所の数値を調整すれば、ボーンの Tail が頂点から少し離れている場合でも、ウェイトを割り当てられる。

コメントする

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