import bpy,math
# 清空场景中原有的所有对象
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
# 导入 BVH 文件
bpy.ops.import_anim.bvh(filepath=r"D:\zrx\EDGE\SMPL-to-FBX\fbx_retarget\test_gaoji.fbx_rtg.fbx.bvh")
# 缩小骨骼尺寸
# 遍历场景中的所有对象,查找骨骼结构
for obj in bpy.data.objects:
if obj.type == 'ARMATURE':
# 切换到编辑模式以修改骨骼
bpy.context.view_layer.objects.active = obj
bpy.ops.object.mode_set(mode='EDIT')
# 遍历骨骼,缩小尺寸
for bone in obj.data.edit_bones:
bone.head *= 0.01 # 缩小骨骼头部的尺寸
bone.tail *= 0.01 # 缩小骨骼尾部的尺寸
# bone.head.z = -bone.head.z
# bone.tail.z = -bone.tail.z
# 切换回对象模式
bpy.ops.object.mode_set(mode='OBJECT')
# 删除多余谷骨骼点
# 选择 BVH 对象并切换到编辑模式
obj = bpy.context.object
bpy.context.view_layer.objects.active = obj
bpy.ops.object.mode_set(mode='EDIT')
# 列出你想要删除的骨头
data = ['Bip001_R_Toe0Nub','Bip001_L_Toe0Nub','Bone_sk007_Mq_00','Bip001_HeadNub']
# 删除不需要的骨头
for bone in obj.data.edit_bones:
if '_Twist' in bone.name or bone.name in data:
obj.data.edit_bones.remove(bone)
# 使地板点为 脚下 而不是 腰部
# 获取一只脚的骨头/节点(这里我们假设它的名字是 "foot")
foot_bone = obj.data.edit_bones.get("Bip001_R_Toe0")
if foot_bone is not None:
# 计算需要移动的量,让脚的尾部移到原点 (0, 0, 0)
offset = -foot_bone.tail
# 移动骨架使得脚部位于原点
for bone in obj.data.edit_bones:
bone.head += offset
bone.tail += offset
bpy.ops.object.mode_set(mode='OBJECT')
# 旋转整个 模型
armature = bpy.context.object
armature.rotation_euler = (0, math.radians(-90), math.radians(180)) # X轴旋转90度,Z轴旋转180度
# 切换回对象模式
# 应用旋转
bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
# 导出新的 BVH 文件
bpy.ops.export_anim.bvh(filepath=r"D:\zrx\EDGE\SMPL-to-FBX\fbx_retarget\test_s_r_g.bvh")
python 调用 blender 脚本实现缩放,旋转,删除多余节点,重心点修改
最新推荐文章于 2024-09-11 15:48:53 发布