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

AIGC笔记--Maya提取和修改FBX动作文件

目录

1--Maya数据解析

2--FBX SDK导出6D数据

3--6D数据映射和Maya可视化


完整项目代码:Data-Processing/FBX_SDK_Maya

1--Maya数据解析

在软件Maya中直接拖入FBX文件,可以播放和查看人体各个骨骼关节点的数据:

        对于上图来说,平移X、平移Y和平移Z表示关节点的Local Transaction的坐标,而旋转X、旋转Y、旋转Z表示关节点的Euler Rotation坐标;对于一个固定的人体模型,修改每一帧中各个关节点的上述六个坐标,即可改变人体表现的动作;

        在Maya中,可以通过以下脚本在Python编辑器(窗口→常规编辑器→脚本编辑器)中打印所有帧所有关节的上述6D坐标数据:

'''
@File    :   print_joint_6Ddata_maya.py
@Time    :   2024/03/07 20:05:00
@Author  :   Jinfu Liu
@Version :   1.0 
@Desc    :   print 6D data of joint in FBX file
'''import maya.cmds as cmdsjoint_names = ["root", "pelvis", "spine_00", "spine_01", "spine_02", "spine_03", "clavicle_l", "upperarm_l", "lowerarm_l", "hand_l", "index_01_l","index_02_l", "index_03_l", "middle_01_l", "middle_02_l", "middle_03_l", "pinky_01_l", "pinky_02_l", "pinky_03_l", "ring_01_l", "ring_02_l","ring_03_l", "thumb_01_l", "thumb_02_l", "thumb_03_l", "Slot_hand_L_bone", "clavicle_r", "upperarm_r", "lowerarm_r", "hand_r", "index_01_r","index_02_r", "index_03_r", "middle_01_r", "middle_02_r", "middle_03_r", "pinky_01_r", "pinky_02_r", "pinky_03_r", "ring_01_r", "ring_02_r","ring_03_r", "thumb_01_r", "thumb_02_r", "thumb_03_r", "Slot_hand_R_bone", "Slot_spine_bone", "neck_01", "head", "thigh_l", "calf_l","foot_l", "ball_l", "thigh_r", "calf_r", "foot_r", "ball_r", "Slot_waist_L_bone", "Slot_waist_R_bone", "Slot_pelvis_bone", "ik_foot_root", "ik_foot_l","ik_foot_r", "ik_hand_root", "ik_hand_gun", "ik_hand_l", "ik_hand_r"]for joint in joint_names:obj = cmds.ls(joint)print("process ", obj)keyframes = cmds.keyframe(obj, query=True)for frame in keyframes:local_trans_X = cmds.getAttr(joint + ".translateX", time = frame)local_trans_Y = cmds.getAttr(joint + ".translateY", time = frame)local_trans_Z = cmds.getAttr(joint + ".translateZ", time = frame)local_rotate_X = cmds.getAttr(joint + ".rotateX", time = frame)local_rotate_Y = cmds.getAttr(joint + ".rotateY", time = frame)local_rotate_Z = cmds.getAttr(joint + ".rotateZ", time = frame)print(local_trans_X, local_trans_Y, local_trans_Z)print(local_rotate_X, local_rotate_Y, local_rotate_Z)

2--FBX SDK导出6D数据

通过Python FBX SDK,我们可以提取和保存在一个原始FBX文件中对应于Maya可视化的6D坐标,具体的脚本如下:FBX_SDK_Maya/Extract_local_TR.py

3--6D数据映射和Maya可视化

        通过第2步的脚本可以提取人体运动的关键6D坐标数据,这些6D坐标数据可以进行一些动作生成任务,生成相同意义的坐标数据。原始6D或生成的6D坐标数据可以使用以下脚本,并在Maya中进行可视化:

'''
@File    :   set_joint_6Ddata_maya.py
@Time    :   2024/03/07 20:10:00
@Author  :   Jinfu Liu
@Version :   1.0 
@Desc    :   set 6D data of joint in FBX file
'''# you must install numpy by: mayapy.exe -m pip install numpy
import numpy as np
import maya.cmds as cmdsJoint_to_idx = {"root": 0,"pelvis": 1,"spine_00": 2,"spine_01": 3,"spine_02": 4,"spine_03": 5,"clavicle_l": 6,"upperarm_l": 7,"lowerarm_l": 8,"hand_l": 9,"index_01_l": 10,"index_02_l": 11,"index_03_l": 12,"middle_01_l": 13,"middle_02_l": 14,"middle_03_l": 15,"pinky_01_l": 16,"pinky_02_l": 17,"pinky_03_l": 18,"ring_01_l": 19,"ring_02_l": 20,"ring_03_l": 21,"thumb_01_l": 22,"thumb_02_l": 23,"thumb_03_l": 24,"Slot_hand_L_bone": 25,"clavicle_r": 26,"upperarm_r": 27,"lowerarm_r": 28,"hand_r": 29,"index_01_r": 30,"index_02_r": 31,"index_03_r": 32,"middle_01_r": 33,"middle_02_r": 34,"middle_03_r": 35,"pinky_01_r": 36,"pinky_02_r": 37,"pinky_03_r": 38,"ring_01_r": 39,"ring_02_r": 40,"ring_03_r": 41,"thumb_01_r": 42,"thumb_02_r": 43,"thumb_03_r": 44,"Slot_hand_R_bone": 45,"Slot_spine_bone": 46,"neck_01": 47,"head": 48,"thigh_l": 49,"calf_l": 50,"foot_l": 51,"ball_l": 52,"thigh_r": 53,"calf_r": 54,"foot_r": 55,"ball_r": 56,"Slot_waist_L_bone": 57,"Slot_waist_R_bone": 58,"Slot_pelvis_bone": 59,"ik_foot_root": 60,"ik_foot_l": 61,"ik_foot_r": 62,"ik_hand_root": 63,"ik_hand_gun": 64,"ik_hand_l": 65,"ik_hand_r": 66
}Local_Trans_data = np.load("C:/Users/jinfullliu/Desktop/test_maya/Local_Trans.npy", allow_pickle = True)
local_Rotate_data = np.load("C:/Users/jinfullliu/Desktop/test_maya/local_Rotate.npy", allow_pickle = True)for joint in Joint_to_idx:joint_idx = Joint_to_idx[joint]obj = cmds.ls(joint)print("process ", obj)for frame in range(Local_Trans_data.shape[0]):cmds.setKeyframe(joint + '.translateX', value = Local_Trans_data[frame, joint_idx, 0], time=frame)cmds.setKeyframe(joint + '.translateY', value = Local_Trans_data[frame, joint_idx, 1], time=frame)cmds.setKeyframe(joint + '.translateZ', value = Local_Trans_data[frame, joint_idx, 2], time=frame)cmds.setKeyframe(joint + '.rotateX', value = local_Rotate_data[frame, joint_idx, 0], time=frame)cmds.setKeyframe(joint + '.rotateY', value = local_Rotate_data[frame, joint_idx, 1], time=frame)cmds.setKeyframe(joint + '.rotateZ', value = local_Rotate_data[frame, joint_idx, 2], time=frame)

相关文章:

AIGC笔记--Maya提取和修改FBX动作文件

目录 1--Maya数据解析 2--FBX SDK导出6D数据 3--6D数据映射和Maya可视化 完整项目代码:Data-Processing/FBX_SDK_Maya 1--Maya数据解析 在软件Maya中直接拖入FBX文件,可以播放和查看人体各个骨骼关节点的数据: 对于上图来说,…...

【刷题训练】LeetCode125. 验证回文串

验证回文串 题目要求 示例 1: 输入: s “A man, a plan, a canal: Panama” 输出:true 解释:“amanaplanacanalpanama” 是回文串。 示例 2: 输入:s “race a car” 输出:false 解释:“rac…...

optee默认安全配置

OP-TEE(Open Portable Trusted Execution Environment)是一个开源的可移植的可信执行环境(TEE),用于提供安全和受保护的执行环境。它旨在为基于 ARM 架构的设备提供强大的安全性和隔离能力。 OP-TEE 主要由两部分组成…...

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…...

【C++初阶】C++入门(上)

C的认识 ①什么是C? ​ C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。 ​ 于是1982年,Bjarne Stroustrup(本…...

Vue.js+SpringBoot开发校园疫情防控管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生2.2 老师2.3 学校管理部门 三、系统展示四、核心代码4.1 新增健康情况上报4.2 查询健康咨询4.3 新增离返校申请4.4 查询防疫物资4.5 查询防控宣传数据 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBoot…...

客服销冠偷偷用的提效神器!无广很实用

近期发现我的同事每天上班必登录的一款软件——客服宝聊天助手,用过才发现:真客服办公的提效神器!感兴趣的小伙伴请往下看~一、客服宝的简介:客服宝聊天助手,是一款跨平台快捷回复工具。自带多种功能,有效帮…...

蓝桥杯刷题|02入门真题

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题? 输入格式 输入一行包含三个整数…...

Jenkins cron定时构建触发器

from: https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax 以下内容为根据Jenkins官方文档cron表达式部分翻译过来,使用机翻加个人理解补充内容,包括举例。 目录 介绍举例:设置方法方法一:方法二&#xf…...

【编程向导】JavaScript-创建对象一期讲解

工厂模式 工厂模式 是用来创建对象的一种最常用的设计模式。工厂模式不暴露创建对象的具体逻辑,而是将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂。工厂模式常见于大型项目,例如 jQuery 的 $ 对象,我们创建选择器对…...

【MySQL性能优化】- 一文了解MVCC机制

MySQL理解MVCC 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff…...

性能测试-Redis

一、测试注意点 1、缓存预热 如果程序初次运行,此时由于数据尚未加载到缓存,则程序的响应时间会明显变长 注意事项: 性能测试的时候 出现 非常不稳定的现象程序刚启动,它的性能 明显 低于 已经运行一段时间的 1.1 测试缓存没…...

浅析C++的指针与引用

浅析C的指针与引用 文章目录 浅析C的指针与引用一、对比引用与指针二、引用左值引用右值引用引用折叠 三、指针与引用的性能差距总结 一、对比引用与指针 总论: 引用指针必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标 引用必须初始化&#xff…...

【消息队列开发】 实现消息删除逻辑

文章目录 🍃前言🌲实现步骤🚩检验参数的合法性🚩读取Message数据🚩二进制转为message🚩isValid 设置为无效🚩写入文件🚩更新统计文件🚩特别注意🚩完整代码 ⭕…...

【golang】28、用 httptest 做 web server 的 controller 的单测

文章目录 一、构建 HTTP server1.1 model.go1.2 server.go1.3 curl 验证 server 功能1.3.1 新建1.3.2 查询1.3.3 更新1.3.4 删除 二、httptest 测试2.1 完整示例2.2 实现逻辑2.3 其他示例2.4 用 TestMain 避免重复的测试代码2.5 gin 框架的 httptest 一、构建 HTTP server 1.1…...

296.【华为OD机试】污染水域 (图的多源BFS—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-污染水域二.解题思路三.题解代码Python题解代码…...

C语言——动态内存分配

前言:通过前面的学习,我们知道C语言中在内存中开辟空间的方法有:变量和数组。既然拥有了开辟空间的方法,我们为什么还要学习动态内存分配呢? int val 20; //在内存中开辟四个字节的空间 int arr[10] { 0 }; //在内…...

瑞_23种设计模式_策略模式

文章目录 1 策略模式(Strategy Pattern)★1.1 介绍1.2 概述1.3 策略模式的结构1.4 策略模式的优缺点1.5 策略模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析(Comparator) &#x1f64a…...

使用 OpenAI 的 text-embedding 构建知识向量库并进行相似搜索

OpenAI的embedding模型的使用 首先第一篇文章中探讨和使用了ChatGPT4的API-Key实现基础的多轮对话和流式输出,完成了对GPT-API的一个初探索,那第二步打算使用OpenAI的embedding模型来构建一个知识向量库,其实知识向量库本质上就是一个包含着一…...

设计模式学习笔记 - 规范与重构 - 5.如何通过封装、抽象、模块化、中间层解耦代码?

前言 《规范与重构 - 1.什么情况下要重构?重构什么?又该如何重构?》讲过,重构可以分为大规模高层重构(简称 “大型重构”)和小规模低层次重构(简称 “小型重构”)。大型重构是对系统…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...