blender2.8 python脚本控制骨骼做动作

blender 能干什么

blender是一个开源,且功能十分强大的3d软件,可以建模,可以修改视频,可以动作跟随。最强大的是允许用户通过python脚本控制任何用户可见的东西。

The Blender/Python API can do the following:

  1. Edit any data the user interface can (Scenes, Meshes, Particles etc.).
  2. Modify user preferences, key-maps and themes.
  3. Run tools with own settings.
  4. Create user interface elements such as menus, headers and panels.
  5. Create new tools.
  6. Create interactive tools.
  7. Create new rendering engines that integrate with Blender.
  8. Subscribe to changes to data and it’s properties.
  9. Define new settings in existing Blender data.
  10. Draw in the 3D view using Python.

利用blender操作骨骼

  1. fbx文件为例,我引用mixamo生成的模型(如果有自己的模型,可以使用自己的,需要带骨骼)
  2. 直接上代码
# -*- coding: UTF-8 -*-
import bpy
import math


#input_fbx_path="E:/workspace/python/blender/gObj/Hip Hop Dancing.fbx"#模型输入文件路径,blender中运行需要指定绝对路径
#output_fbx_path="E:/workspace/python/blender/result/t1.fbx"#模型输出文件路径,blender中运行需要指定绝对路径

input_fbx_path="./Hip Hop Dancing.fbx" #模型输入文件路径,ubuntu终端运行脚本,可以写模型相对路径
output_fbx_path="./t1.fbx"#模型输出文件路径,ubuntu终端运行脚本,可以写模型相对路径

bpy.ops.import_scene.fbx(filepath=input_fbx_path)#导入fbx文件
bpy.context.scene.tool_settings.lock_object_mode = False #关闭 Edit->Lock Objects modes 选项

def createKeyFrame():
    ob = bpy.data.objects['Armature'] 
    bpy.context.view_layer.objects.active = ob #相当于鼠标左键选中
    bpy.ops.object.mode_set(mode='POSE') #切换为pose更改模式
    hip=ob.pose.bones['Hips'] #选中其中一块骨骼,根据自己模型中骨骼的名称,名称可以在Outliner(大纲)视图找到
	#对骨骼进行旋转
    hip.rotation_mode = 'XYZ'
    # select axis in ['X','Y','Z']  <--bone local
    axis = 'Z'
    angle = 120
    hip.rotation_euler.rotate_axis(axis, math.radians(angle))
    bpy.ops.object.mode_set(mode='OBJECT')
    #insert a keyframe
    hip.keyframe_insert(data_path="rotation_euler" ,frame=1)    

createKeyFrame()

bpy.ops.export_scene.fbx(filepath=output_fbx_path) #导出操作之后的模型
  1. 运行
    • 无界面运行,ubuntu中通过终端在命令行运行,指令如下

      blender --enable-autoexec -noaudio --background --python loadFBX.py [-- 参数] (loadFBX.py为脚本文件名称)

    • blender界面运行,在文本编辑器页面打开脚本,点击run script按钮即可
  2. 注意事项
    • 文件头需要加编码格式说明# -*- coding: UTF-8 -*-,否则中文报错
    • 如果对命令不熟悉,可以在blender交互式命令窗口输入命令,按ctrl+space bar获得提示
    • blender必须支持引用的fbx模型,否则会在导入的时候报错,可以先用blender界面导入一下fbx文件,在info窗口查看是否有报错信息
    • blenderpython脚本基本上可以操作所有可以看到东西,可以参考blender官方文档做相关的操作
    • ubuntu下安装blender,自行百度,很多博客都有说
  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
创建骨骼Blender插件脚本编写步骤如下: 1. 创建骨骼对象:使用Blender Python API中的bpy.data.armatures.new()函数创建一个骨骼对象,并将其添加到场景中。例如: ``` import bpy # 创建骨骼对象 arm = bpy.data.armatures.new('Armature') obj = bpy.data.objects.new('Armature', arm) bpy.context.scene.collection.objects.link(obj) # 设置对象为活动对象 bpy.context.view_layer.objects.active = obj ``` 2. 添加骨骼:在骨骼对象中添加骨骼。使用Blender Python API中的bpy.ops.object.mode_set()函数将对象设置为EDIT模式,然后使用bpy.ops.armature.add()函数添加骨骼。例如: ``` # 将对象设置为EDIT模式 bpy.ops.object.mode_set(mode='EDIT') # 添加骨骼 bone = arm.edit_bones.new('Bone') bone.head = (0, 0, 0) bone.tail = (0, 0, 1) ``` 3. 设置骨骼约束:可以使用Blender Python API中的bpy.ops.object.mode_set()函数将对象设置为POSE模式,并使用bpy.ops.pose.constraint_add()函数添加约束。例如: ``` # 将对象设置为POSE模式 bpy.ops.object.mode_set(mode='POSE') # 添加约束 pose_bone = obj.pose.bones[0] const = pose_bone.constraints.new('COPY_TRANSFORMS') const.target = obj const.subtarget = 'IK_Target' ``` 4. 设置骨骼动画:可以使用Blender Python API中的bpy.ops.object.mode_set()函数将对象设置为OBJECT模式,并使用bpy.ops.anim.keyframe_insert()函数添加动画关键帧。例如: ``` # 将对象设置为OBJECT模式 bpy.ops.object.mode_set(mode='OBJECT') # 添加动画关键帧 obj.location = (0, 0, 0) obj.rotation_euler = (0, 0, 0) bpy.ops.anim.keyframe_insert(type='Location', confirm_success=True) bpy.ops.anim.keyframe_insert(type='Rotation', confirm_success=True) ``` 以上就是创建骨骼Blender插件脚本编写步骤,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值