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

相关文章:
Blender的Python编程介绍
在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。 在最近的一个项目中,我用Blender制作了一个动…...
树莓派4/5:运行Yolov5n模型(文末附镜像文件)
〇、前言 因国内网络问题,可直接烧录文末镜像文件,或者按照本教程进行手动操作。 一、实验目的 在树莓派4B运行Yolov5n模型。 二、实验条件 1、Windows 11计算机:安装了Mobaxterm 2、树莓派4B:64Bit Lite OS,安装了…...
【学习笔记】Day 9
一、进度概述 1、inversionnet_train 试运行——成功 二、详情 1、inversionnet_train 试运行 在经历了昨天的事故后,今天最终成功运行了 inversionnet_train,运行结果如下: 经观察,最开始 loss 值大概为 0.5 左右 随着训练量的增…...
Linux网络案例
网络配置基础 WIN10上安装虚拟机,虚拟机里安装CENTOS6.5。 1)网络配置的步骤 (1)CENTOS6.5C网络设置: su root //切换root用户 cd /etc/sysconfig/network-scripts //进入网卡配置文件所在目录 vi ifcfg-eth0 //修改网卡配置文件 …...
苹果离线打包机配置和打包
1、虚拟机安装 macOS虚拟机安装全过程(VMware)-腾讯云开发者社区-腾讯云 给 windows 虚拟机装个 mac 雪之梦 1、安装苹果镜像 去网上下载,打包机的镜像要和自己mac电脑上的保持一致。 同时打包机的用户名也需要和自己的mac保持一致。 2、…...
【C++ Primer Plus】学习笔记 5【指针 下】
文章目录 前言一、指针1.使用new创建动态结构例子:使用new和delete 2.自动存储、静态存储和动态存储1.自动存储2.静态存储3.动态存储 总结 前言 依旧是指针部分ヾ(◍∇◍)ノ゙ 一、指针 1.使用new创建动态结构 将new用于结构由两步组成:创建…...
Phpstorm实现本地SSH开发远程机器(或虚拟机)项目
适用场景: 1、windows系统想要运行仅支持linux、mac系统的项目,可将项目运行在本地虚拟机,但是在虚拟机里使用vim编辑很麻烦,如何实现在本地用Phpstorm来编辑虚拟机中的代码? 下面的说明都是以本地虚拟机为例ÿ…...
API 的多分支管理,让 Apifox 帮你轻松搞定!
在产品迭代的过程中,对 API 的更新和维护是必然的,也是至关重要的。当产品需要引入新功能或对现有功能进行调整时,相应的 API 往往也需要进行升级或修改,这种情况在快速迭代的产品中很是常见。 然而,API 的迭代更新并非…...
线上预约陪诊平台医院陪诊系统源码就医陪护小程序APP开发
项目分析 随着医疗行业的数字化转型和人们对健康需求的日益增长,线上预约陪诊系统作为一种新兴的医疗服务模式,正逐渐受到市场的关注和认可。本文将从市场前景、使用人群、盈利模式以及竞品分析等多个角度,全面探讨线上预约陪诊系统的技术性…...
240806-在Linux/RHEL开机中自动启动bash脚本
A. 常规方法 要在Red Hat Enterprise Linux (RHEL) 中设置开机启动的bash脚本,可以使用以下方法之一: 方法1:使用/etc/rc.d/rc.local 打开/etc/rc.d/rc.local文件: sudo vi /etc/rc.d/rc.local在文件末尾添加你想要执行的bash脚…...
【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁
文章目录 乐观锁和悲观锁重量级锁和轻量级锁挂起等待锁和自旋锁公平锁和非公平锁可重入锁和不可重入锁读写锁相关面试题 锁:非常广义的概念,不是指某个具体的锁,所有的锁都可以往这些策略中套 synchronized:只是市面上五花八门的锁…...
31_逻辑漏洞、水平垂直越权、垂直越权漏洞测试、水平越权
概述 如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。 一般越权漏洞容易出现在权限页面(需要登录的页面࿰…...
css写一个按钮流光动画效果
规则说明 按钮实现一个简易的流光动画 streamer.css.pay_button{width: 281*2px;height: 104px;border-radius: 80px;color: rgba(255, 255, 255, 1);background: linear-gradient(90deg, #FFA023 0%, #FF2B87 100%);margin-bottom: 20px;font-size: 32px;position: relative;o…...
AxMath保姆级安装教程(word联用)及使用TIPS
一、软件介绍 AxMath是一款数学公式编辑器软件。它提供了一个直观的界面,使用户可以轻松创建和编辑数学公式。AxMath支持多种数学符号、方程式、函数、矩阵等的输入和编辑,并提供了丰富的数学符号库和模板,方便用户快速创建复杂的数学公式。…...
Vue-03.指令-v-on
v-on 为HTML标签绑定事件 代码演示: 在下面的代码中,在input标签中定义了一个按钮,并且使用v-on为input标签绑定了一个事件click,当鼠标点击该按钮时,会触发指定的方法handle,如果…...
接口基础知识6:详解http request body(一篇讲完常见请求体)
课程大纲 一、定义 HTTP请求体(HTTP Request body):HTTP请求消息的可选部分,仅在请求方法支持且需要发送数据时使用。 POST方法、PUT方法有请求体,GET和HEAD方法没有请求体。 请求头和请求体之间会有一个空行&#…...
Windows Server 安装Web,DHCP,DNS,FTP四大服务及其配置和监控方式
以Windows Server 2022为例 1.安装Web服务 添加角色->Web服务器勾选 添加Web服务器后会有一个interpub文件夹,其中wwwroot为网站根目录 工具->IIS->网站 ,这里可以将风险服务停掉 2.安装DHCP服务 添加角色->DHCP服务器勾选 右击IPv4->新建作用域 …...
创意指南丨VR游览沉浸式空间体验
欢迎来到我们制作的VR幻想世界。玩家的起点是一条蓝色水晶大道,让我们一起探索这个如梦似幻的境地。 在这条大道的两侧,漂浮着半透明的大水晶水母。它们轻盈地在空中飘动,仿佛在欢迎我们的到来。这条道路上方,一个个半圆环不停地…...
【iOS】—— autoreleasePool以及总结
【iOS】—— autoreleasePool以及总结 1. 什么是autoreleasePool2. autoreleasePoolPageobjc_autoreleasePoolPush方法:objc_autoreleasePoolPop方法:tokenkill()方法 3. 总结3.1 autoreleasePool的原理3.2 autoreleasePool的问题3.2.1 autoreleasepool的…...
培训第二十五天(python中执行mysql操作并将python脚本共享)
mysql下载路径: MySQL :: MySQL Community Downloads [root2 ~]# vim py001.pya3b4print(ab)print(a**2b**2)[root2 ~]# python py001.py 725[root2 ~]# python3>>> import random>>> random<module random from /usr/lib64/python3.6/random…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
matlab实现DBR激光器计算
DBR激光器计算程序。非常值得参考的程序。DBR激光器程序 DBR计算/1.txt , 2056 DBR计算/4.asv , 22 DBR计算/4.txt , 32 DBR计算/GetDeviceEfficiency.asv , 2012 DBR计算/GetDeviceEfficiency.m , 2014 DBR计算/GetOneLayerArray.asv , 837 DBR计算/GetOneLayerArray.m , 836…...
