Blender的Python编程介绍

在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。

在最近的一个项目中,我用Blender制作了一个动画,但是由于前期设计的时候,骨骼的大小设置的不对,现在想重新调整骨骼的大小,发现只能把缩放应用到增量中,否则的话会对物体的形体位置有破坏。例如下图是变换增量中xyz缩放为30,缩放xyz为0.01的3D物体:

如果我想调整变换增量xyz缩放为1时, 缩放xyz仍然为0.01,然后物体大小保持不变,那么我会做以下几步的修改:

  1. 设置变换增量xyz缩放为1, 缩放xyz为0.3,然后按ctrl-A应用缩放,把缩放xyz调整为1

  2. 设置缩放xyz为100,然后按Ctrl-A应用缩放,把缩放xyz调整为1

  3. 设置缩放xyz为0.01

做完以上操作后,物体的大小不变,但是骨骼的位置会发生变化,导致物体形变,如下图:

分析后得知,在进行以上调整时,对于一些有骨骼约束,例如IK约束的骨骼,其位置XYZ并没有机型相应的扩展。例如对于手部IK骨骼来说,假设调整前其XYZ分别为0.1m, 0.2m, 0.3m,则调整后应该放大30倍才对,即XYZ应为3m, 6m, 9m。考虑到这个设计里面有很多动画,每个动画都有很多关键帧,如果每个关键帧都手动修改骨骼的位置,工作量很大也容易出错,这时可以考虑用Python脚本来帮助我们完成这个调整。

在blender的菜单中点击脚本,即打开一个文本编辑的窗口,可以输入Python代码,点击菜单的窗口,打开系统控制台。然后在文本编辑中输入以下代码,就能自动调整所有动画中相关骨骼的位置数据:

python 复制代码
import bpy

bones = ["weapon", "mag", "bolt", "base", "bolt1", "hand_IK_L.L", "hand_IK_L.R", "shoulder_L.L"]

for action in bpy.data.actions:
    for fcurve in action.fcurves:
        for bone in bones:
            if fcurve.data_path == 'pose.bones["' + bone + '"].location':
                for keyframe in fcurve.keyframe_points:
                    x, y = keyframe.co 
                    fcurve.keyframe_points.insert(x, y*30) 

解释一下以上的代码, 在bpy.data.actions里面保存了所有的动画Action,每个action都有一个fcurves(函数曲线),这个对应的是每个骨骼的动画信息。我们可以通过fcurve.data_path来判断,例如fcurve.data_path为pose.bones["weapon"].location,这表明对应的furve是weapon骨骼的位置信息,这时可以通过fcurve.array_index来进一步判断对应的是xyz的哪一个。如果要查看动画里面每一个关键帧的骨骼的位置数据,可以通过遍历fcurve.keyframe_points来查看,通过keyframe.co获得一个(x,y)的tuple,其中x代表关键帧的帧数,y是对应的数值。例如对于一个fcurve是对应weapon这个bone的location,那么其keyframe.co为(12, 0.6)表示在第12帧,这个bone的location为0.6m。最后通过furve.keyframe_points.insert方法,即可更新或新增一个关键帧并设置数值。对于以上的应用,当运行这个脚本之后,可以看到现在骨骼的位置都调整正确了,如下图:

相关推荐
无人装备硬件开发爱好者2 天前
Python + Blender 5.0 几何节点全栈实战教程2
python·blender
哎呦哥哥和巨炮叔叔2 天前
2026年3D软件横向对比:SketchUp、Blender 与 3ds Max 如何选择?
blender·3ds max·建筑可视化·动画制作·3d软件·渲染101云渲染·sketchup
哎呦哥哥和巨炮叔叔2 天前
程序化纹理(Procedural Texture)详解:3D项目体积缩减90%,云渲染效率全面提升
blender·maya·渲染101云渲染·材质系统·arnold渲染·程序化纹理·cg工作流
成都渲染101云渲染66663 天前
渲染速度慢怎么办?如何将 Maya 渲染速度提升成百上千倍(通用方法)
人工智能·图形渲染·blender·maya·houdini
CG_MAGIC5 天前
用Blender创作鼹鼠怪兽
3d·blender·zbrush·建模教程·渲云渲染
陈陈爱java6 天前
Blender使用守则
数码相机·blender
CG_MAGIC6 天前
Blender 渲染降噪:Cycles 核心参数与 AI 降噪工具应用
3d·blender·贴图·建模教程·渲云渲染
CG_MAGIC9 天前
多软件协同工作流:ZBrush+SP+Blender角色资产全流程解析
3d·blender·zbrush·建模教程·渲云渲染·渲云
成都渲染101云渲染66669 天前
5090 显卡云端上线!Blender / Maya / UE5 渲染速度再提升,云渲染成主流选择
ue5·blender·maya
哎呦哥哥和巨炮叔叔15 天前
2026 年 Blender 与 Maya 对比分析:动画与渲染制作该如何选择?
blender·云渲染·maya·三维动画·blender vs maya·动画制作渲染·cg 动画