blender瞎玩5:自制刚性绑定插件(二) 一键创建骨骼

保定/设计爱好者/6年前/485浏览
blender瞎玩5:自制刚性绑定插件(二) 一键创建骨骼
钢水壶

连夜赶制出 Rigid Bind Tool v1.3 版!加入了一键创建骨骼功能



(1)


昨天发的v1.2版有个缺陷,就是骨骼要自己手摆,62根骨骼每次都要手摆想想还有点麻烦,

于是我就想把这部分自动化了,结果实行起来还真不容易,毕竟我没学会几个命令,

不过边看老外教程边做了一天,终于完成了




(2)


现在界面是这样的,新增了一个添加骨架按钮


现在绑定就方便多了,先准备一个人型角色,身体各部位都是分离的物体


点击添加骨架后,效果如下

我这里骨骼和模型的尺寸都是 180m ,因为这是daz3d和marvelousdesigner的默认尺寸。


然后稍微调整一下骨骼


然后就可以绑定了,点一下物体,点一下按钮


加个动作试试看

似模似样嘛






(3)


我发现做这种简单脚本,最困难的是找命令

以下贴出需要的命令




[1]

定义变量


armature_name="human" 


bone_name,parent_bone,head_position,tail_position的值写在一个组里了

需要提前定义好的数据有,本层骨头名称,上层骨头名称,骨头根位置坐标,骨头尖位置坐标

b_p=(

("","hip",(0,3.6,105),(0,0.1,117.8)),

("hip","stom",(0, 0.1, 117.8),(0, -1.3, 126.6)),

...

...

)


以下为需要用“保持偏移”模式的骨头

offset_bone=(

"shoulder.r",

...

...

)




[2]

创建骨头写成一个函数:add_bone(parent_bone,bone_name,head_position,tail_position)



bpy.ops.armature.bone_primitive_add(name=bone_name) # 在编辑模式增加骨头

data_editbone=bpy.data.armatures[armature_name].edit_bones[bone_name] # 一个bone TYPE

bpy.data.armatures[armature_name].edit_bones.active=data_editbone # 给骨头命名,超麻烦

bpy.context.active_bone.head = head_position # 骨头根位置

bpy.context.active_bone.tail = tail_position # 骨头尖位置


data_editbone=bpy.data.armatures[armature_name].edit_bones[parent_bone]

bpy.data.armatures[armature_name].edit_bones.active=data_editbone # 激活某根骨头

bpy.ops.armature.parent_set(type='OFFSET') # 骨头间连接,类型为保持偏移


经验:这里有个很坑爹的问题,在连接骨头时,本来应该选中本层骨头,加选上层骨头,执行连接,这时本层骨头仍保持激活状态。        但是代码里是反着的,对本层骨头操作完后,需要“激活”上层骨头,而使用“选择”命令则是无效的



[3]

这个函数要加入条件,当遇到hip即最上层骨头时,不赋予父级。然后遇到肩膀,手指,大腿等位置是选择保持偏移模式


    if bpy.context.active_bone.name != "hip":

        

        if bone_name in offset_bone:

            #bpy.data.objects[armature_name].data.edit_bones[parent_bone].select = True

            #bpy.data.objects[armature_name].data.edit_bones[bone_name].select_tail = True

            #bpy.data.objects[armature_name].data.edit_bones[bone_name].select_head = True

            data_editbone=bpy.data.armatures[armature_name].edit_bones[parent_bone]

            bpy.data.armatures[armature_name].edit_bones.active=data_editbone

            bpy.ops.armature.parent_set(type='OFFSET')

            

        else :

            data_editbone=bpy.data.armatures[armature_name].edit_bones[parent_bone]

            bpy.data.armatures[armature_name].edit_bones.active=data_editbone

            bpy.ops.armature.parent_set(type='CONNECTED')



[4]

其他命令写成另一个函数:add_armature()


bpy.ops.object.armature_add() # 创建骨架

bpy.context.active_object.name = armature_name # 命名骨架

bpy.data.objects[armature_name].data.name = armature_name # 命名下一层级

bpy.ops.object.editmode_toggle()

data_basebone=bpy.data.objects[armature_name].data.edit_bones["Bone"]

bpy.data.objects[armature_name].data.edit_bones.remove(data_basebone) # 删除默认骨头




[5]

这个函数要加入循环,自动生成所有62个骨骼


x=0

length=len(b_p)

for x in range(length):

    add_bone(b_p[x][0],b_p[x][1],b_p[x][2],b_p[x][3],) # 执行上一个函数

    x=x+1



[6]

最后把下面这个class添加到按钮里


class AddArmature(bpy.types.Operator):

    bl_idname = "add.armature"

    bl_label = "Add Armature"

    def execute(self, context):

        add_armature()

        return {'FINISHED'}


大功告成!


关于省略的步骤,请自行参考文章右下角的附件代码

关于class或函数怎么使用,插件怎么制作,请参考上一篇文章“blender瞎玩4:自制刚性绑定插件”




(4)


贴上新版代码以供参考


取名为 Rigid Bind Tool v1.3 版!


6
Report
|
4
Share
相关推荐
评论
in to comment
Add emoji
喜欢TA的作品吗?喜欢就快来夸夸TA吧!
推荐素材
You may like
一梦大唐·长恨歌
Homepage recommendation
相关收藏夹
3D类
3D类
3D类
3D类
作品收藏夹
白酒包装 酒产品
白酒包装 酒产品
白酒包装 酒产品
白酒包装 酒产品
精选收藏夹
作品收藏夹
IP形象及IP内容
IP形象及IP内容
IP形象及IP内容
IP形象及IP内容
精选收藏夹
作品收藏夹
IP形象设计
IP形象设计
IP形象设计
IP形象设计
精选收藏夹
作品收藏夹
作品集
作品集
作品集
作品集
精选收藏夹
作品收藏夹
地产VI
地产VI
地产VI
地产VI
精选收藏夹
作品收藏夹
大家都在看
Log in