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

BVH、FBX 文件学习

一、BVH

BVH(Biovision Hierarchy)是一种用于表示动作捕捉数据的文件格式。它是一种文本文件格式,用于描述人体骨骼结构和动作的层次关系。BVH 文件以层次结构的方式组织数据,其中包含骨骼层次关系、关节的旋转角度和动作帧的时间信息。每个关节在文件中被定义为一个节点,并通过层次结构的父子关系连接起来。每个节点包含关节的名称、旋转顺序和旋转角度等信息。动作帧的时间信息确定了每个动作帧的时刻。

优点:简单性和易于解析,由于是文本文件,可以轻松地阅读和编辑。

缺点:只描述了关节的旋转信息,而没有提供关节的位移和缩放等其他变换信息。

           对于复杂的动作和人体运动,可能需要大量的节点和旋转数据,导致文件大小较大。

           细节和精确度的描述可能有限,无法捕捉到一些细微的动作变化

 1、文件内容

HIERARCHY
ROOT Hips
{OFFSET  0.00    0.00    0.00CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation YrotationJOINT Chest{OFFSET   0.00    5.21    0.00CHANNELS 3 Zrotation Xrotation YrotationJOINT Neck{OFFSET   0.00    18.65   0.00CHANNELS 3 Zrotation Xrotation YrotationJOINT Head{OFFSET   0.00    5.45    0.00CHANNELS 3 Zrotation Xrotation YrotationEnd Site {OFFSET   0.00    3.87    0.00}}}JOINT LeftCollar{............................}}
MOTION
Frames:    2
Frame Time: 0.0333338.03    35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   7.81    35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00   

(该数据例子描述了 腰部hips一直到 头部head 的关系 和 2帧的动作数据)

1、bvh文件内容包含两大块内容,骨架信息,运动信息。

        1)骨架信息(层级结构):将人体骨骼按照层级关系,形成一个带有位置和旋转分量的结构

HIERARCHY # 标记了层级结构部分的开始(定义T pose)
ROOT Hips # Root 这表示第一个节点是根节点。第一个节点总是根节点 该节点名字为 Hips (臀部)
{ # 括号 {..} 下包含该节点Hips的信息及子节点OFFSET  0.00    0.00    0.00  # OFFSET 表示该节点相对于父节点的偏移,理解为从父节点到该节点连线所表征的向量CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation # CHANNELS 表示自由度的关键字,Xrotation Yrotation Zrotation表示了三个旋转自由度,Xposition Yposition Zposition 表示三个平移自由度(注意:以上信息都是 Hips 节点的信息)JOINT Chest # JOINT 表示这是一个节点,因为它在 Hips的{}里,所以他是 Hips 的子节点,节点名为 Chest{OFFSET   0.00    5.21    0.00CHANNELS 3 Zrotation Xrotation YrotationJOINT Neck{OFFSET   0.00    18.65   0.00CHANNELS 3 Zrotation Xrotation YrotationJOINT Head{OFFSET   0.00    5.45    0.00CHANNELS 3 Zrotation Xrotation YrotationEnd Site # End Site 无名节点,表示树形结构到这里就是叶节点啦,后面再也没有子节点了。End Site没有子节点,所有也就没有自由度信息,只有相对父节点的偏移信息。{OFFSET   0.00    3.87    0.00} # } 该节点结束 ,下面再出现JOINT标记的节点时,我们回去找它在谁的括号内,它就是谁的子节点,以此类推}} JOINT LeftCollar{............................}} # 根节点} 说明层级结构结束

        2)运动信息:记录了人体在每帧中各个关节点的旋转信息

MOTION                  # MOTION 代表着运动信息的部分开始了
Frames:    2           # 表示帧数
Frame Time: 0.033333   #  0.033333 表示每一帧的持续时间,这里1/30=0.033333,也就是这个文件是30FPS
# 下面 每行为一帧。这些信息按照 HIERARCHY 部分的自由度出现的顺序一一对应。其中角度的单位是度8.03    35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.007.81    35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00

2、注意:

        1)bvh坐标系,每个节点都有自己的局部坐标系,它的原点是该节点的位置,它的方向是由该节点的旋转角度决定的。每个节点的局部坐标系可以通过从根节点开始,依次将父节点的旋转和平移应用到子节点上,得到其相对于世界坐标系(即根节点的局部坐标系)的变换矩阵。

        2)运动信息:通常是先平移后旋转,先z轴后x轴后y轴。这些值都是相对于父节点的局部坐标系的,而不是世界坐标系的。旋转角度的单位是度 °,平移距离的单位是长度单位(通常是厘米或米)。

        3)bvh被定义为右手坐标系,Y轴为世界向上矢量。因此BVH的骨骼段是沿着Y轴或负Y轴排列的

        4)解析运动数据时,根据层次信息计算每个关节的局部变换矩阵,再依次与其父关节矩阵相乘,可以得到世界坐标系下的最终变换矩阵

        5)BVH使用的是YXZ欧拉角旋转顺序。可以分别计算XYZ三个轴的旋转矩阵然后乘积,或者直接计算出完整的旋转矩阵

二、FBX

FBX(Filmbox)是 Autodesk 公司开发的一种通用文件格式,被广泛应用于计算机图形和游戏开发领域。FBX 文件可以包含多个对象,包括模型、材质、动画、灯光和相机等。它支持多种数据类型,包括几何数据、纹理坐标、法线信息、骨骼动画、关键帧动画等。FBX 文件还可以存储层次结构、物理属性、约束等相关信息,以便于在不同的软件和平台之间进行数据交换和共享。FBX 文件格式适用于各种需要存储、交换和展示三维数据的应用场景,例如在游戏开发、电影动画制作中用于模型、动画和场景的导入和导出;在虚拟现实(VR)和增强现实(AR)应用中保存虚拟场景的几何数据、交互元素和动画效果等。
优势:FBX 文件能够保存包括几何数据、材质贴图、动画效果、灯光设置、复杂的三维模型和动画效果等在内的多种元素,提供了丰富的功能和特性,且具有较好的跨平台兼容性。
缺点:由于 FBX 文件格式保存了较多的元素和数据,所以文件大小通常较大,且 FBX 文件格式在使用和处理上可能需要一定的学习和熟悉。比bvh小、可以使用二进制格式文本格式压缩大

  1. 数据表示:FBX文件可以使用二进制格式或ASCII文本格式来表示数据。
    • 二进制格式更紧凑,适合传输和存储;
    • ASCII格式则更易于阅读和调试。
  2. 支持的数据类型:FBX格式支持多种3D数据类型,包括但不限于
    • 几何(Geometry):顶点、边、面、法线、UV坐标等。
    • 材质(Materials):颜色、纹理、反射率等。
    • 动画(Animation):关键帧动画、骨骼动画、变形动画等。
    • 骨骼(Skeletons):骨骼结构、关节、权重等。
    • 灯光(Lights):点光源、聚光灯、环境光等。
    • 摄像机(Cameras):透视摄像机、正交摄像机等。
  3. 文件结构:FBX文件的结构相对复杂,包含多个层次的节点,每个节点可以包含不同类型的数据。以下是FBX文件的一些主要结构元素
    • Header:文件头部,包含文件版本等基本信息。
    • Objects:定义了文件中的所有对象,如几何、材质、动画等。
    • Connections:定义了对象之间的关系和连接。
    • Takes:包含动画数据。
  4. 应用领域:
    • 3D建模和动画:用于创建和编辑三维模型和动画。
    • 游戏开发:用于导入和导出游戏中的三维模型和动画。
    • 虚拟现实(VR)和增强现实(AR):用于创建虚拟和增强现实环境中的三维对象。
    • 影视制作:用于制作电影和电视中的三维特效和动画

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 黑马微服务—Docker
  • 外企面企必备:IT技术面试英文高频面试题
  • 【C语言】qsort函数的介绍和使用
  • 《kubernetes权威指南第五版》读书笔记
  • RISC-V竞赛|第二届 RISC-V 软件移植及优化锦标赛报名正式开始!
  • 【OpenCV C++20 学习笔记】提取图片中的水平和垂直对象
  • K8s部署篇之手动部署二进制高可用集群架构
  • Windows 系统学习之路
  • 【机器学习西瓜书学习笔记——神经网络】
  • C++第三十一弹---C++继承机制深度剖析(下)
  • 【网络编程】网络原理(一)
  • 政务服务技能竞赛规则流程方案
  • WINDOWS搭建nps/npc服务器
  • dpdk实现udp协议栈
  • 各地级市能源消费总量、夜间灯光值数据(2000-2022年)
  • 【技术性】Search知识
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • flutter的key在widget list的作用以及必要性
  • gcc介绍及安装
  • GraphQL学习过程应该是这样的
  • Java多线程(4):使用线程池执行定时任务
  • LeetCode算法系列_0891_子序列宽度之和
  • Linux各目录及每个目录的详细介绍
  • PHP的类修饰符与访问修饰符
  • spring security oauth2 password授权模式
  • webgl (原生)基础入门指南【一】
  • XForms - 更强大的Form
  • 目录与文件属性:编写ls
  • 浅谈web中前端模板引擎的使用
  • 如何使用 JavaScript 解析 URL
  • 写给高年级小学生看的《Bash 指南》
  • 一份游戏开发学习路线
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # Redis 入门到精通(一)数据类型(4)
  • (27)4.8 习题课
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (九)信息融合方式简介
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)Linux下编译安装log4cxx
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .Net 8.0 新的变化
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET Framework杂记
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Autowired和@Resource的区别
  • @synthesize和@dynamic分别有什么作用?
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [Angular] 笔记 8:list/detail 页面以及@Input