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

news2024/12/24 22:14:33

目录

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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【傻瓜文档】鼎利测试软件Pilot Pioneer-① Pioneer界面介绍

Pioneer界面分布 工具栏 自定义快速访问工具栏 根据需求,自行制定工具栏选项 菜单栏 文件 语言 配置 工具 工具栏的补充内容,常用的有:合并/分割数据、GPS轨迹补偿等等。 帮助

亿发定制:中小型生产制造工厂为什么需要建设企业信息化管理?

随着互联网行业的迅猛发展,越来越多的加工制造业企业将互联网作为核心枢纽,这一关键核心枢纽即为企业信息化管理。 在企业信息化管理中,主要包括三个关键方面:企业变革过程管理、企业运作管理,以及信息技术、信息资源…

【YUNBEE云贝技术分享】如何定位postgreSQL数据库中未被使用过的索引

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 前言 在生产环境上,由于不规范的优化措施,数据库中可能存在大量的索引,并且相当一部分的索引…

jeecgboot 开放页面权限,免登录访问

前端需要配置路由和添加白名单 1、配置路由 2、 在permission.js里,把刚才的路由添加到白名单 3、 后端需要把该页面涉及到的接口排除权限拦截 比如我这个页面涉及到两个接口: 那么就在后端的excludeUrls把这两个接口加进去。 前端后端都设置好了&…

idea实现ssh远程连接服务器

1. 首先,打开idea,点击左上角File->settings 2. 点击tools->SSH Configurations->填写必要的信息,Host就是访问服务器的ip地址,Username就是服务器的用户账户,比如root,Password账户对应的密码&am…

智慧城市与绿色出行:共同迈向低碳未来

随着城市化进程的加速,交通拥堵、空气污染、能源消耗等问题日益凸显,智慧城市与绿色出行成为了解决这些问题的关键途径。智慧城市利用信息技术手段,实现城市各领域的智能化管理和服务,而绿色出行则强调低碳、环保的出行方式&#…

【Golang】golang使用三方SDK操作容器指南

【Golang】golang使用三方SDK操作容器指南 大家好 我是寸铁👊 总结了一篇 golang使用三方SDK操作容器✨ 喜欢的小伙伴可以点点关注 💝 这应该是目前全网最全golang使用三方SDK操作容器的指南了✌️ CreateConfig 主要是创建容器的配置信息,常…

【Java从发入门到精通】Java StringBuffer 和 StringBuilder 类

Java StringBuffer 和 StringBuilder 类 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 在使用 Stri…

#QT(QSpinBox,QDoubleSpinBox)

1.IDE:QTCreator 2.实验:实现一个计价工具,进制转换工具。 教程来自:阿西拜编程 QT C 5.9 3.记录 设置进制的第二种方法 ui->hex_tx->setDisplayIntegerBase(16); //设置显示进制为16进制 4.代码 widget.cpp #include "wi…

NOIP2018-S-DAY1-3-赛道修建(洛谷P5021)的题解

目录 题目 原题描述: 题目描述 输入格式 输出格式 输入输出样例 主要思路: check: 真正的code: 原题描述: 题目描述 C 城将要举办一系列的赛车比赛。在比赛前,需要在城内修建 条赛道。 C 城一共有 个路…

天梯赛的赛场安排(Python)

作者 陈越 单位 浙江大学 天梯赛使用 OMS 监考系统,需要将参赛队员安排到系统中的虚拟赛场里,并为每个赛场分配一位监考老师。每位监考老师需要联系自己赛场内队员对应的教练们,以便发放比赛账号。为了尽可能减少教练和监考的沟通负担&#…

打造私人云笔记,创造舒适的写作空间

搭建Minio 图片文件服务器 (树莓派4B搭建Minio公网云服务器用nps内网穿透)Typora 安装客户端 --> 可以利用免费gitee管理文档利用Typora 图像自定义文件上传功能 Minio强大的API功能 一、树莓派4B 64bit raspberry 操作系统 Docker Minio 图片文件…

CentOS本地部署Tale博客并结合内网穿透实现公网访问本地网站

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale,Tale…

Python 配置信息的添加和获取

1.效果如下: 2.代码如下: from configparser import ConfigParser import threadingclass Config():_instance_lock threading.Lock()classmethoddef instance(cls, *args, **kwargs):if not hasattr(Config, "_instance"):with Config._ins…

ELK 基本操作

文章目录 1.Elasticsearch-head2.Kibana2.1.功能简介2.2.Management2.3.Discover2.4.Dev Tools 开源中间件 # Elastic Stackhttps://iothub.org.cn/docs/middleware/ https://iothub.org.cn/docs/middleware/elk/elk-use/1.Elasticsearch-head 2.Kibana 2.1.功能简介 2.2.Man…

电脑桌面便签下载,电脑桌面便签软件哪个好

电脑桌面便签下载,电脑桌面便签软件哪个好?在日常工作生活中,我们经常会遇到许多琐碎的事情需要记录和安排,这时候电脑桌面便签就成为了一个不可或缺的工具。而如今,在电脑时代的今天,电脑桌面便签软件更是…

扭蛋机小程序,扭蛋与互联网结合下的商机

扭蛋机作为一种娱乐消费模式,受众群体不再局限于儿童,也吸引了众多的年轻消费者。扭蛋机具有较大的随机性,玩具商品随机掉落,在购买前消费者完全不知道扭蛋中的商品是什么,这种未知性带来的惊喜感是吸引众多消费者的主…

MyBatis框架2

目录 一、Sql编写高级特性-批量增删 1.SQL-foreach-批量删除 1.1.批量删除方法 1.2编写SQL 1.3.编写测试 2.动态SQL-foreach-批量插入 2.1.映射器批量插入方法 2.2.编写SQL 2.3.编写测试 二、Sql编写高级特性-多对一 1.多对一保存 1.1.创建员工部门Domain 1.2.创建员…

远程同声传译如何实现?哪里提供专业的远程同声传译?

远程同传声传译,即线上同传翻译,是指翻译员通过非现场的网络方式进行的同声传译(实时翻译)。远程同声传译的实现依赖于一系列先进的技术手段和高效的协作流程。这一服务模式的出现,不仅打破了传统同声传译的地域限制,还为全球范围…

【JavaEE Spring 项目】消息队列的设计

消息队列的设计 一、消息队列的背景知识二、需求分析核心概念⼀个⽣产者, ⼀个消费者N 个⽣产者, N 个消费者Broker Server 中的相关概念核⼼ API交换机类型 (Exchange Type)持久化⽹络通信消息应答 三、 模块划分四、 项⽬创建五、创建核心类创建 Exchange创建 MSGQUeue创建 B…