Blender使用Rigify和Game Rig Tool基础

做动画需要的几个简要步骤:
1.建模
2.绑定骨骼
3.绘制权重
4.动画

有一个免费的插件可以处理好给引擎用:Game Rig Tool
3.6和4.0版本的 百度网盘 提取码:vju8

1.Rigify是干嘛用的? =》 绑定骨骼
2.Game Rig Tool干嘛用的? =》 修复Rigify动画导入游戏引擎的问题,如果Rigify自身修复了就不需要这个插件了,
你也可以自己手动操作,有插件为啥不用那,又不要钱

基本步骤:
1.准备好模型、插件
2.添加Rigify骨架,需要哪个添加哪个
3.调整好位置,别忘了Ctrl+A应用一下Transform,否则位置不正确,点击生成
4.做动画
5.点开Game Rig Tool面板,选择上面生成的骨架,选择修复层级选项(有的版本默认就是),再点击生成最终使用的骨架
6.烘培动画,把做好的动画烘培到最终使用的骨架上,可以选择骨骼烘培(选择最终骨架的骨骼),默认是烘焙所有骨骼
7.导出,勾选NLA,取消全部动画,不想导出某个动画,可以在NLA编辑器取消打勾,或者删掉

下面的内容不用看了,是刚发现问题的发的

导入到Unity的问题:
1.有多余的骨骼(非形变骨)
2.层级错误

这两个问题是一个问题:
1.第一个问题是因为有形变骨是非形变骨的子骨骼导致的,所以只需要把形变骨放到对应的父级形变骨下即可,Ctrl+P即可
2.第二个问题:第一个问题解决了,就没有第二个问题了

如下图是修改好的,找到这四个,放到相应的父级下即可,注意的是肩膀和上臂原来是同级的也要建立子级即可

Blender使用Rigify和Game Rig Tool基础_第1张图片
如下图,把不需要的形变骨删除,否则导出会把父级无用的骨骼导出去,用到的话就放到形变骨下
Blender使用Rigify和Game Rig Tool基础_第2张图片
总之就是形变骨放到相应的形变骨下
导出时,勾选仅形变骨,就会把所有形变骨和其父级导出,如下图:
Blender使用Rigify和Game Rig Tool基础_第3张图片

还有一种方法:Unity模型Rig导入设置里,动画类型选择通用,也就是非人形,也没问题,唯一的问题就不能骨骼重定向,如果不需要骨骼重定向的话,通用也是没问题的,只是多了一些无用的骨骼,要求不高也是可以用的

更新:还有第三个问题:
有的形变骨竟然没有添加对应骨的约束,这个需要额外处理,还是用下面给出的插件搞起

Rigify使用教程

但是,上面的连接有一点没有说(可能版本不一样,默认就修复了),如下图,要选择修复层级这个选项,否则导出到Unity还是层级报错,不能使用人形Rig
Blender使用Rigify和Game Rig Tool基础_第4张图片

自己写了个脚本,设置父子节点脚本

import bpy

# 设置父级方法
def SetParent(child_bone_name, parent_bone_name, connect):
    # 获取骨骼
    child_bone = armature.data.edit_bones[child_bone_name]
    parent_bone = armature.data.edit_bones[parent_bone_name]
    
    # 子骨骼如果已有父级,去除父级骨骼
    if child_bone.parent:
        child_bone.parent = None
    # 设置父级
    child_bone.parent = parent_bone
    # 设置是否保持连接
    child_bone.use_connect = connect   

# 进入编辑模式
bpy.ops.object.mode_set(mode='EDIT')

# 根据名字获取骨架,这里名字要填对,默认Rigify生成的是rig名字,
# 如果不是,需要修改这里,或者修改骨架名字都可以
armature = bpy.data.objects['rig']

# 这里的名字是Rigify形变骨默认的名字,如果名字变了,这里需要修改正确的名字
# 设置左大腿到臀部
SetParent('DEF-thigh.L','DEF-spine',False)
# 设置右大腿到臀部
SetParent('DEF-thigh.R','DEF-spine',False)
# 设置左上臂到左肩膀
SetParent('DEF-upper_arm.L','DEF-shoulder.L',False)
# 设置右上臂到右肩膀
SetParent('DEF-upper_arm.R','DEF-shoulder.R',False)
# 设置左肩膀到胸部
SetParent('DEF-shoulder.L','DEF-spine.003',False)
# 设置右肩膀到胸部
SetParent('DEF-shoulder.R','DEF-spine.003',False)

# 返回物体模式
bpy.ops.object.mode_set(mode='OBJECT')

你可能感兴趣的:(Blender,blender,unity)