一、BVH

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

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

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

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

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

 1、文件内容

HIERARCHY
ROOT Hips
{
    OFFSET  0.00    0.00    0.00
    CHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation
    JOINT Chest
    {
        OFFSET   0.00    5.21    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT Neck
        {
            OFFSET   0.00    18.65   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT Head
            {
                OFFSET   0.00    5.45    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00    3.87    0.00
                }
            }
        }
        JOINT LeftCollar
        {
			............................
        }

}
MOTION
Frames:    2
Frame Time: 0.033333
 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.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.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT Neck
        {
            OFFSET   0.00    18.65   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT Head
            {
                OFFSET   0.00    5.45    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End 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.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
                        

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):用于创建虚拟和增强现实环境中的三维对象。
    • 影视制作:用于制作电影和电视中的三维特效和动画
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐