背景
事情是这样的,上次做了个web页面给角色添加动画,就是用threejs 将bvh 和 fbx组合一下,播放动画,然后导出glb模型,最终是利用blender导出fbx。后来发现在blender中直接导出成fbx,模型会有一些冗余的数据,应该是three的导出的解析导致的。后来了解到可以直接给骨骼模型重定向向动画,就开整。
涉及到的内容
1. 骨骼绑定
这事儿上B站搜一个视频就明白了。就是将动捕数据和模型绑定的行为。需要使用blender的相关插件,多方对比之下选择了Auto Rig Pro,一个专门的骨骼绑定插件。
2. blender脚本的调试
blender 里面内置了一个python,在里面可以成为bpy 。
但是这个东西基本没法调试,想获取打印信息千难万难。没办法还得上vscode
启动和执行
3.blender插件
下载插件压缩包,然后在编辑>偏好设置中勾选启动
右侧边栏上就可以找到
主要的绑定流程:上b站搜个ARP重定向的视频,都明白了。分配源骨架和目标骨架、然后构建两个骨架的映射,需要指定根骨骼
复制初始姿态,很关键
执行重定向
4. 脚本
blender的脚本先看看相关的Blender Api 要注意版本。 然后打开信息窗口。blender的界面设计真的可以,国产的那些做编辑器的好好学学。
当然了,在刚刚的调试环节中看见了,可以在vscode中开发,用上ai辅助工具,事半功倍。
然而,在第三方的插件中中仅仅靠上述的方式写脚本还是有点不够分量,遇到复杂的操作,又没有提供API的直接上源码查了
5. 插件的源码
直接找到相关模块,控制UI 的这部分,方法和参数都能找到。
然后在blender中,按照相关的操作顺序实现写出脚本。再逆向的通过调试工具还原效果就可以了
6. 导出
参照一下Api。
常规的导出这这几个选项,使用默认的,会有一堆叶骨,像个刺猬
7.演示
上一段单个功能的调试代码。如果模型没有面向舞台,需要将目标骨骼沿着Z轴旋转180
import bpy
from mathutils import Vector
import math
def get_bone_direction(armature_obj):
# 检测Hips是否存在,若不存在则使用R_eye
if "Hips" in armature_obj.data.bones:
bone_name="RightFoot"
else:
bone_name="thigh_r"
# 进入姿态模式
bpy.context.view_layer.objects.active = armature_obj
bpy.ops.object.mode_set(mode='POSE')
# 获取指定骨骼的姿势骨骼
pose_bone = armature_obj.pose.bones[bone_name]
# 获取骨架对象的世界矩阵
world_matrix = armature_obj.matrix_world
# 计算骨骼在世界坐标系中的位置
bone_matrix = world_matrix @ pose_bone.matrix
bone_tail = bone_matrix @ Vector((0, pose_bone.length, 0))
bone_head = bone_matrix @ Vector((0, 0, 0))
# 计算骨骼在地面上的投影
ground_projection = Vector((bone_tail.x, bone_tail.y, 0)) - Vector((bone_head.x, bone_head.y, 0))
# 规定的正方向
positive_direction = Vector((0, -1, 0))
# 计算夹角
angle = math.degrees(ground_projection.angle(positive_direction))
# 切换回对象模式
bpy.ops.object.mode_set(mode='OBJECT')
return angle < 90
# 获取骨架对象
armature_name = "test.001" # 替换为你的骨架对象名称
armature_obj = bpy.data.objects[armature_name]
# 调用函数检查朝向
check_hip_dir = get_bone_direction(armature_obj)
if check_hip_dir:
print("Hip orientation is 正.")
else:
print("Hip orientation is 负.")
8.启动脚本
"C:\Program Files\Blender Foundation\Blender 4.2\blender.exe" -b -P
后面可以加上相关模型的路径信息
总结
前端的路是越走越宽了,最近都弄上UE5了。两年前开始弄数字仿真,三四年前开始弄的低代码,更久远之前的画页面,适配。走过很多路,踩过很多坑,有过爱的人,行业都衰退了,还是一方荒岛上的顽石,生活给予每个人的都不一样,以后多爱自己,也不问前程