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 cmds

joint_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 cmds

Joint_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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/450033.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

@Conditional注解详解

目录 一、Conditional注解作用 二、Conditional源码解析 2.1 Conditional源码 2.2 Condition源码 三、Conditional案例 3.1 Conditional作用在类上案例 3.1.1 配置文件 3.1.2 Condition实现类 3.1.3 Bean内容类 3.1.4 Config类 3.1.5 Controller类 3.1.6 测试结果 3…

ELK 日志分析系统

ELK (Elasticsearch、Logstash、Kibana)日志分析系统的好处是可以集中查看所有服务器日志,减轻了工作量,从安全性的角度来看,这种集中日志管理可以有效查询以及跟踪服务器被攻击的行为。 Elasticsearch 是个开源分布式…

酷柚易汛ERP - 采集助手使用文档说明

1、首先购买采集助手插件 2、管理员进入采集助手可配置对应的API KEY 3、到对应电商去复制商品链接,进行基础数据采集 4、采集成功后可对商品进行编辑,进行快速同步到ERP商品库中

CUDA环境配置在Ubuntu18

🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 1 NVIDIA CU…

FastAPI 学习笔记

FastAPI 学习笔记 0. 引言1. 快速开始2. 升级示例代码 0. 引言 在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。 无论你是一名有经验的 Python 开发人员,还是一…

ArcGIS学习(十四)OD分析

ArcGIS学习(十四)OD分析 1.上海市KFC与麦当劳的空间聚集度分析 本任务给大家带来的内容是网络节点关系分析。网络节点关系分析一般也叫OD分析。“O”指的是起点(ORIGIN),"D”指的是终点(DESTINATION),0D分析即为基于起点到终点的分析。 网络节点关系分析我们经常…

23-Java空对象模式 ( Null Object Pattern )

Java空对象模式 实现范例 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查Null 对象不是检查空值,而是反应一个不做任何动作的关系,这样的 Null 对象也可以在数据不可用的时候提供默认的行为…

1. OSPF 基础实验(三):邻接关系和 LSA

1.3 OSPF 的邻接关系和 LSA 1.3.1 实验介绍 1.3.1.1 学习目标 1. 阐明在多路访问网络中接入多台路由器时的邻居关系建立过程 2. 控制 OSPF DR 的选举 3. 描述 5 种类型的 LSA 的内容,以及它们的作用 1.3.1.2 实验组网介绍 设备互联方式及 IP 地址规划如图所示…

NASA数据集——亚马逊盆地与其大气边界层之间各种气溶胶和气体交换率的估计值数据

简介 Pre-LBA ABLE-2A and ABLE-2B Expedition Data ABLE 2A 和 2B(大气边界层实验)数据包括亚马逊盆地与其大气边界层之间各种气溶胶和气体交换率的估计值,以及这些气溶胶和气体在边界层和自由对流层之间的移动过程。前言 – 人工智能教程…

【五】【算法分析与设计】双指针的初见

167. 两数之和 II - 输入有序数组 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index(1)] 和 numbers[index(2)] ,则 1 &…

Java项目源码基于springboot的家政服务平台的设计与实现

大家好我是程序员阿存,在java圈的辛苦码农。辛辛苦苦板砖,今天要和大家聊的是一款Java项目源码基于springboot的家政服务平台的设计与实现,项目源码以及部署相关请联系存哥,文末附上联系信息 。 项目源码:Java基于spr…

[计算机效率] 便笺的使用

2.4 便笺 便笺程序是一种方便用户记录、查看和编辑便签的简单应用程序。在Windows系统中,便笺通常作为系统自带的实用工具之一,可以帮助用户快速创建、编辑和组织便签,以便随时记录重要的信息、任务或提醒事项。 便笺程序通常具有以下特点&a…

岩土工程监测中振弦采集仪的选型指南与市场概况

岩土工程监测中振弦采集仪的选型指南与市场概况 振弦采集仪是岩土工程监测中常用的一种设备,用于测量土体的振动特性。它的选型指南和市场概况如下: 选型指南: 1. 测量参数:振弦采集仪可用于测量土体的振动振幅、频率、相位等参数…

美团2025春招第一次笔试题

第四题 题目描述 塔子哥拿到了一个大小为的数组,她希望删除一个区间后,使得剩余所有元素的乘积未尾至少有k个0。塔子哥想知道,一共有多少种不同的删除方案? 输入描述 第一行输入两个正整数 n,k 第二行输入n个正整数 a_i,代表…

OpenHarmony开发—购物示例应用

介绍 本示例展示在进场时加载进场动画,整体使用Tabs容器设计应用框架,通过TabContent组件设置分页面,在子页面中绘制界面。通过Navigation完成页面之间的切换。在详情页中通过 Video组件加载视频资源,使用CustomDialogController…

力扣刷题日记——L66.加一

1. 前言: 从今天开始打卡力扣,每天一道力扣题,然后将解题思路分享出来,纯原创。 2. 题目描述 给定一个由 整数 ****组成的 ****非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位&#…

使用API有效率地管理Dynadot域名,使用API设置域名隐私保护

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

SiT技术报告阅读

论文链接:SiT: Exploring Flow and Diffusion-based Generative Models with Scalable Interpolant Transformers 报告链接:https://scalable-interpolant.github.io/ 文章目录 IntroFlow and DiffusionDiffusion-Based ModelsStochastic Interpolant an…

GPT出现Too many requests in 1 hour. Try again later.

换节点 这个就不用多说了,你都可以上GPT帐号了,哈…… 清除cooki 然后退出账号,重新登录即可

应用工程中获取Shapefile文件的图形信息并显示

本文用纯前端获取shp文件以及前后端交互的方式获取Shapefile文件中的图形信息 1.案例说明 在日常的WebGIS开发中,我们往往会面对,需要用户选择矢量数据,通过矢量数据中的空间范围信息,显示在界面上,并给用户的下一步…