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…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...