基于 FBXSDK-Python 的动画操作

2023-11-11

PythonFBXSKD 01 - 基础的动画操作

1.0 下载安装 FBXSDK

我这里演示的是 FBXSDK_2020.2 只有 py37 版本的 ,FBXSDK_2020.1.1 版本有 py27 和py33 两个版本,根据自己的python环境选择合适的FBXSDK版本即可

在这里插入图片描述


1.1 引用 FBXSDK

  • 先将 FBXSDK 的安装路径添加到 sys.path 中
  • 然后导入 FbxCommon,fbx 这两个包
    在这里插入图片描述

参考:

GitHub-FBX_Scene.py

FBX_Scene.py 其中涉及加载FBX,查找对象,修改重命名之类的操作,本文都是基于该基础代码修改实现.

知乎-FBX SDK 介绍

FBX SDK Help

注意

FBXSDK-ptyhon 基本上是个残废,很多C++ API 都是没有的!!!
多用 dir(object) 查看对象的可用属性。


2.1 Node 的动画曲线 - take ,动画层 ,曲线

curve_type 参数 1 :位置,2:旋转,3:缩放 ,curves_name 就是XYZ 各轴曲线了,

先是遍历FBX中的 take ,3ds max 导出的fbx资源都只要一条take 001.

for i in range(self.scene.GetSrcObjectCount(FbxCriteria.ObjectType(FbxAnimStack.ClassId))):
    # Take 001 遍历 take
    lAnimStack = self.scene.GetSrcObject(FbxCriteria.ObjectType(FbxAnimStack.ClassId), i)
    print("Take: %s" % lAnimStack.GetName())

然后在take 取动画层,
下面代码中,我就不遍历动画了,直取 0 : BaseLayer 基础动画层

lAnimLayer = lAnimStack.GetSrcObject(FbxCriteria.ObjectType(FbxAnimLayer.ClassId), 0)

有了动画层就可以直取 对象的动画曲线了,代码写的很清楚了,

位移曲线:

lAnimCurve = node.LclTranslation.GetCurve(lAnimLayer, KFCURVENODE_T_X)

旋转曲线:

lAnimCurve = node.LclRotation.GetCurve(lAnimLayer, KFCURVENODE_T_X)

缩放曲线:

lAnimCurve = node.LclScaling.GetCurve(lAnimLayer, KFCURVENODE_T_X)

在这里插入图片描述


2.2 Node 修改动画曲线

这个测试的是把 role_node 对象的Y轴位移动画 转移到 root_node 对象的 Z轴

先取得动画曲线上的帧数

role_KeyCount = role_node_y_AnimCurve.KeyGetCount()

然后遍历这些帧

for lCount in range(role_KeyCount):
	lKeyValue = role_node_y_AnimCurve.KeyGetValue(lCount)
	lKeyTime  = role_node_y_AnimCurve.KeyGetTime(lCount)

start_key_value 是role_node 对象的第零帧动画位移数值 ,KeySetValue 是给帧设置新数值

new_value = lKeyValue - start_key_value
role_node_y_AnimCurve.KeySetValue(lCount,start_key_value)

给root_node 对象Z轴曲线添加帧,lKeyTime 是 FbxTime 对象,不是普通的数值

thetime = FbxTime()
thetime.SetFrame(帧数)

KeySetInterpolation 是设置帧的贝兹曲线类型

lKeyIndex = root_node_y_AnimCurve.KeyAdd(lKeyTime)[0]
root_node_y_AnimCurve.KeySetValue(lKeyIndex, new_value * -1 )
root_node_y_AnimCurve.KeySetInterpolation(lKeyIndex, FbxAnimCurveDef.eInterpolationCubic)

修改完成之后,SaveScene 保存即可。

在这里插入图片描述


2.3 Global,Local - Transform转换

拿到 node 不同时间的 Transform。

glTm = node.EvaluateGlobalTransform(fbxtime)
lcTm = node.EvaluateLocalTransform (fbxtime)

写入动画曲线的是LocalTransform,分别GetT,GetR,GetS 的前3个值。

#伪代码
nodeLcTm=node.glTm  * inverse node.parent.gltm 

完整代码
链接:https://pan.baidu.com/s/1GITx2pw0ev9GL4_l7Wb52g
提取码:6y5f


SDK 路径下面的 samples 文件夹 有很多官方的演示了,我也只是看看 ImportScene 路径下 ImportScene.py 打印出来的FBX信息来学习的

将 ImportScene.py 如下这样修改,即可运行打印出FBX文件中的各种信息。

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 FBXSDK-Python 的动画操作 的相关文章

  • 无法在我的 Django 项目中使用 Sphinx 生成自动文档

    我正在向我的 Django 项目添加文档 github链接 https github com augustakingfoundation queryjane app 该项目是开源的 使用sphinx 但是当尝试生成python文件的auto
  • 使用单个文件的 Python 日志记录(函数名、文件名、行号)

    我正在尝试了解应用程序的工作原理 为此 我将调试命令插入作为每个函数主体的第一行 目的是记录函数的名称以及向日志输出发送消息的行号 代码内 最后 由于这个应用程序由许多文件组成 我想创建一个日志文件 以便我可以更好地理解应用程序的控制流 这
  • Keras ZeroDivisionError:整数除法或以零为模

    我正在尝试使用 Keras 和 Tensorflow 实现卷积神经网络 我有以下代码 from keras models import Sequential from keras layers import Conv2D MaxPoolin
  • 区分大小写的实体识别

    我的关键字全部以小写形式存储 例如 折扣耐克鞋 我正在尝试对其执行实体提取 我遇到的问题是 spaCy 在 NER 方面似乎区分大小写 请注意 我不认为这是 spaCy 特有的 当我跑步时 doc nlp u i love nike sho
  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • Python设置1和True的解释

    在 IPython 3 交互式 shell 中 In 53 set2 1 2 True hello In 54 len set2 Out 54 3 In 55 set2 Out 55 hello True 2 是因为 1 和 True 得到
  • 如何使用我自己的自定义表单覆盖 django-rest-auth 中的表单?

    我正在使用 django rest auth 并尝试通过覆盖表单的方法之一来修复密码重置视图中的错误 尽管我已经使用不同的 django rest auth 表单成功完成了类似的操作 但我无法让它在这个表单上工作 无论我做什么 都会使用旧的
  • 如何在seaborn热图标签中使用科学计数法?

    我正在尝试在 python 中使用seaborn 获取热图 不幸的是 即使数字非常大 它也没有使用科学记数法 我想知道是否有任何简单的方法可以转换为科学记数法或任何其他合理的格式 这是显示问题的一段代码 import seaborn as
  • 检查子字符串是否在字符串列表中?

    我之前已经找到了这个问题的一些答案 但它们对于当前的Python版本来说似乎已经过时了 或者至少它们对我不起作用 我想检查字符串列表中是否包含子字符串 我只需要布尔结果 我找到了这个解决方案 word to check or wordlis
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 如果另一列中的值为空,则删除重复项 - Pandas

    我拥有的 df Name Vehicle Dave Car Mark Bike Steve Car Dave Steve 我想从 名称 列中删除重复项 但前提是 车辆 列中的相应值为空 我知道我可以使用 df dropduplicates
  • 从字典中绘制直方图

    我创建了一个dictionary计算 a 中出现的次数list每个键的内容 我现在想绘制其内容的直方图 这是我想要绘制的字典的内容 1 27 34 1 3 72 4 62 5 33 6 36 7 20 8 12 9 9 10 6 11 5
  • Jupyter笔记本突然变得很慢

    我以前在anaconda环境下运行jupyter运行得很好 显示警告后 IOPub data rate exceeded The notebook server will temporarily stop sending output to
  • 在 pygame 中,我如何创建一个数据结构来跟踪调整大小事件和对象的坐标?

    我希望在调整屏幕大小后使鼠标事件与对象保持同步 有人告诉我需要创建一个数据结构来跟踪 调整事件大小 新坐标以匹配调整大小 如何使用简单的代数方程来完成此操作并将其集成到调整大小事件中以进行准确更新 反过来做 创建一个虚拟游戏地图 在绘制场景
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 如何在 Python 中跟踪日志文件?

    我想在 Python 中提供 tail F 或类似内容的输出 而无需阻塞或锁定 我找到了一些非常旧的代码来做到这一点here http code activestate com recipes 436477 filetailpy 但我认为现
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来
  • 当训练和测试的特征数量不同时,如何处理生产环境中的One-Hot Encoding?

    在做某些实验时 我们通常在 70 上进行训练 在 33 上进行测试 但是 当您的模型投入生产时会发生什么 可能会发生以下情况 训练集 Ser Type Of Car 1 Hatchback 2 Sedan 3 Coupe 4 SUV 经过
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin

随机推荐

  • SpringCloud搭建分布式服务架构(通俗易懂,步骤清晰)(转载)

    问题引入 什么是SpringCloud 在了解这个之前需要有微服务的概念 基于springBoot的一套实现微服务的框架 提供了微服务所需的配置管理 基于Http协议的restful风格 返回异步数据 SpringCould组件架构图 在这
  • python如何安装sklearn库_1.sklearn库的安装

    sklearn库 sklearn是scikit learn的简称 是一个基于Python的第三方模块 sklearn库集成了一些常用的机器学习方法 在进行机器学习任务时 并不需要实现算法 只需要简单的调用sklearn库中提供的模块就能完成
  • 微信小程序:canvas生成图片分享

    背景 小程序通常会开发生成图片 分享到朋友圈的功能 如图所示该图片由 背景图 用户上传图片 用户昵称 小程序码构成 首先 在小程序里进行绘图操作需要用到
  • java 方法引用无效_java – 方法引用 – 无效的方法引用 – 不能从静态上下文引用...

    因为StringJoiner length占用零个参数 所以方法引用总是需要一个StringJoiner 任意实例 并返回一个整数 换句话说 第一个分配的方法ref等效于 Function lengthFunc new Function O
  • Ubuntu12.0.4 安装xmpp 服务器ejabberd

    http www cnblogs com dyingbleed archive 2013 04 04 2999885 html
  • 计算机图形学常用算法实现3 多边形扫描转换算法-扫描线算法

    运行环境 vs2015 winform 其他环境只需要替换对应的画点画线算法即可 这个算法其实很复杂的 实现起来需要有耐心 一步一步按照算法思路来写代码 在算法中 我使用的是静态链表 c 没有指针 下面的AET为活性边表 NET存储新边表
  • JS 数组转其他格式

    let arr 1 2 const arr 1 2 const newArr arr map item gt return key item value item console log newArr key 1 value 1 key 2
  • PyTorch学习笔记9

    PyTorch学习笔记9 整理笔记视频来源 问答系统 文本摘要系统 大规模预训练语言模型 一 问答系统 SQuAD数据集 给定一段文字作为context 给定一个问题question 从context中寻找一段连续的文字 text span
  • 毕业三周年,又一个离别季

    今天应该算是一个特别的日子 2011年的6月23日 我正式离校了 当时分别的场景还依稀在眼前展现 虽然我们没有跟别人一样哭的稀里哗啦 但是谁心里都明白 以后见面的日子真的不会太多 今天是2014年6月23日 看着很多人在空间发表大学生涯结束
  • 【超分顶会详解+部署】ESRT:Transformer for Single Image Super-Resolution

    文章目录 ESRT 1 超分基本知识 1 1 SRF 1 2 xxx img 1 3 裁剪 1 4 超分模型评估标准 2 LCB LTB 模块 2 1 序列模型 3 损失函数 4 部署运行 4 1 数据集 4 1 1 训练集 4 1 2 验
  • [专利与论文-19]:江苏省南京市2022年电子信息申报通知(中、高级)

    官网地址 南京人力资源和社会保障学会 官网通知 南京人力资源和社会保障学会 申报时间 2022 6 21到2022 07 29 过时不候 2021年申报地址 网上学习 江苏人社网办大厅 南京人社网上办事大厅 2022年申报地址 江苏省人力资
  • 华为OD机试 - We Are A Team

    题目描述 总共有 n 个人在机房 每个人有一个标号 1 lt 标号 lt n 他们分成了多个团队 需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中 具体的 消息构成为 a b c 整数 a b 分别代表两个人的标号 整数 c 代
  • 计算机日期函数公式大全,常用的Excel日期函数大全

    Excel日期大家都会用 但是你知道Excel中有多少日期和时间函数吗 Excel为我们提供了大约20个日期和时间函数 这些函数对于处理表格中的日期数据都是非常有用的 下面介绍几个常用的Excel日期函数及其实际应用案例 1 处理动态日期
  • 对区块链的分析理解

    概述 狭义来讲 区块链是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构 并以密码学方式保证的不可篡改和不可伪造的去中心化共享总账 Decentralized shared ledger 能够安全存储简单的 有先后关系的 能在系统内
  • PowerOJ2512: 小红灌溉【染色】

    题目链接 划重点 每个有菜的点只能浇一次且恰好一次 所以意思就是 譬如某个菜的位置是 x y 那么 行x 列y的浇水方案只能使用其中的一个 以此类推 我们给每个有蔬菜的位置的 x y 的x点与y点链接一条无向边 代表x和y只能选择其中的一个
  • MySQL5.7.xx安装卡在Staring the server解决方案--亲测有效

    安装mysql时卡在Staring the server 一般是两个问题 之前安装过mysql 卸载不彻底 你的电脑名称中有中文 我当时用在网上查找的方法 将mysql删除之后 依旧卡在Staring the server这个地方 接着重新
  • 《数据分析原理》:6步解决业务分析难题

    点击上方卡片关注我 回复 8 加入数据分析 领地 一起学习数据分析 持续更新数据分析学习路径相关资料 精彩数据观点 学习资料 数据课程分享 读书会 分享会等你一起来乘风破浪 回复 小飞象 领取数据分析知识大礼包 读书交流 7期 数据分析原理
  • IntelliJ IDEA 下载安装教程,超详细图文教程

    1 IDEA 下载 1 打开浏览器输入https www jetbrains com 进入 Jetbrains官网 点击 Developer Tools 再点击 Intellij IDEA 2 点击中间的 Download 进入IDEA下载
  • 分割预研 -- 2022.5

    MMSegmentation MMSegmentation 标准统一的语义分割框架 非常好的分割开源集成框架 https link zhihu com target https 3A github com open mmlab mmsegm
  • 基于 FBXSDK-Python 的动画操作

    PythonFBXSKD 01 基础的动画操作 1 0 下载安装 FBXSDK 我这里演示的是 FBXSDK 2020 2 只有 py37 版本的 FBXSDK 2020 1 1 版本有 py27 和py33 两个版本 根据自己的pytho