当前位置: 首页 > news >正文

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代码,点击菜单的窗口,打开系统控制台。然后在文本编辑中输入以下代码,就能自动调整所有动画中相关骨骼的位置数据:

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方法,即可更新或新增一个关键帧并设置数值。对于以上的应用,当运行这个脚本之后,可以看到现在骨骼的位置都调整正确了,如下图:

http://www.lryc.cn/news/420610.html

相关文章:

  • 树莓派4/5:运行Yolov5n模型(文末附镜像文件)
  • 【学习笔记】Day 9
  • Linux网络案例
  • 苹果离线打包机配置和打包
  • 【C++ Primer Plus】学习笔记 5【指针 下】
  • Phpstorm实现本地SSH开发远程机器(或虚拟机)项目
  • API 的多分支管理,让 Apifox 帮你轻松搞定!
  • 线上预约陪诊平台医院陪诊系统源码就医陪护小程序APP开发
  • 240806-在Linux/RHEL开机中自动启动bash脚本
  • 【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
  • 31_逻辑漏洞、水平垂直越权、垂直越权漏洞测试、水平越权
  • css写一个按钮流光动画效果
  • AxMath保姆级安装教程(word联用)及使用TIPS
  • Vue-03.指令-v-on
  • 接口基础知识6:详解http request body(一篇讲完常见请求体)
  • Windows Server 安装Web,DHCP,DNS,FTP四大服务及其配置和监控方式
  • 创意指南丨VR游览沉浸式空间体验
  • 【iOS】—— autoreleasePool以及总结
  • 培训第二十五天(python中执行mysql操作并将python脚本共享)
  • LVS实战项目
  • 笔记小结:《利用python进行数据分析》之层次化索引
  • Linux的线程篇章 - 线程池、进程池等知识】
  • 汇昌联信做拼多多运营正规吗?
  • 240810-Gradio自定义Button按钮+事件函数+按钮图标样式设定
  • 排序算法--快速排序
  • springMVC -- 学习笔记
  • 修复本地终端(windows)连接服务器使用zsh出现乱跳的问题
  • 【扒代码】regression_head.py
  • vue2 使用axios 请求后台返回文件流导出为excel
  • MATLAB数据可视化:在地图上画京沪线的城市连线