上海城市建设网站,境外企业网站推广,怎样创建企业网站,wordpress 安装 godaddy在哪里 上传的根目录在Blender这个免费的开源3D设计软件中#xff0c;最值得称道的一点是可以用Python程序来辅助进行3D设计#xff0c;我们可以通过Python来调整物体的属性#xff0c;生成新的物体#xff0c;甚至生成新的动画等等。
在最近的一个项目中#xff0c;我用Blender制作了一个动…在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代码点击菜单的窗口打开系统控制台。然后在文本编辑中输入以下代码就能自动调整所有动画中相关骨骼的位置数据
import bpybones [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方法即可更新或新增一个关键帧并设置数值。对于以上的应用当运行这个脚本之后可以看到现在骨骼的位置都调整正确了如下图