BVH文件格式解析

BVH文件解析


简介

BVH是BioVision等设备对人体运动进行捕获后产生文件格式的文件扩展名。

BVH文件包含角色的骨骼和肢体关节旋转数据。BVH 是一种通用的人体特征动画文件格式,广泛地被当今流行的各种动画制作软件支持,如3DMax。

人的骨架肢体图


文件格式

文件主要部分

骨架信息 和 数据块

  • 骨架信息:按照层次关系,定义了如root hip leg等位置和旋转分量,从而形成一个完整的骨架
  • 数据块:对应上面的骨架各部位标出每帧的数据信息

一个BVH文件包含两部分,头部部分和数据部分,头部部分描述了骨架的层次关系和初始姿势,数据部分包含了动作(motion)的数据.

文件示例

可以参考文件示例

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
        {
            OFFSET   1.12    16.23   1.87
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT LeftUpArm
            {
                OFFSET   5.54    0.00    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                JOINT LeftLowArm
                {
                    OFFSET   0.00   -11.96   0.00
                    CHANNELS 3 Zrotation Xrotation Yrotation
                    JOINT LeftHand
                    {
                        OFFSET   0.00   -9.93    0.00
                        CHANNELS 3 Zrotation Xrotation Yrotation
                        End Site 
                        {
                            OFFSET   0.00   -7.00    0.00
                        }
                    }
                }
            }
        }
        JOINT RightCollar
        {
            OFFSET  -1.12    16.23   1.87
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT RightUpArm
            {
                OFFSET  -6.07    0.00    0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                JOINT RightLowArm
                {
                    OFFSET   0.00   -11.82   0.00
                    CHANNELS 3 Zrotation Xrotation Yrotation
                    JOINT RightHand
                    {
                        OFFSET   0.00   -10.65   0.00
                        CHANNELS 3 Zrotation Xrotation Yrotation
                        End Site 
                        {
                            OFFSET   0.00   -7.00    0.00
                        }
                    }
                }
            }
        }
    }
    JOINT LeftUpLeg
    {
        OFFSET   3.91    0.00    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT LeftLowLeg
        {
            OFFSET   0.00   -18.34   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT LeftFoot
            {
                OFFSET   0.00   -17.37   0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00   -3.46    0.00
                }
            }
        }
    }
    JOINT RightUpLeg
    {
        OFFSET  -3.91    0.00    0.00
        CHANNELS 3 Zrotation Xrotation Yrotation
        JOINT RightLowLeg
        {
            OFFSET   0.00   -17.63   0.00
            CHANNELS 3 Zrotation Xrotation Yrotation
            JOINT RightFoot
            {
                OFFSET   0.00   -17.14   0.00
                CHANNELS 3 Zrotation Xrotation Yrotation
                End Site 
                {
                    OFFSET   0.00   -3.75    0.00
                }
            }
        }
    }
}
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   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116

头部部分

  1. 头部部分开头包含”HIERARCHY“关键词

  2. 接着一行开头为”ROOT”关键词,后面跟着root的名字.当然,一个root段(segment)之后,允许再定义另一个段,也可以定义为”ROOT”.原理上,BVH文件能够包含任何数量的骨架段.

  3. BVH文件的格式为递归的格式,层次结构的每一个segment包含了一些相关数据,该segment要递归定义它的子segment.

  4. 关键词”ROOT“后以大括号开头,下行以tab填充,能够增加可读性.

  5. segment的第一个信息是该segment相对于父segment的偏移量(OFFSET), 如果是根ROOT segment则偏移量OFFSET则通常为0,OFFSET指定了X,Y,Z方向上与父segment的偏移量,偏移量也指示用于绘制父segment的长度和方向.

  6. BVH文件中没有明确的信息能够描述一个segment该怎样画,通常通过从第一个segment的偏移量来定义父segment,典型的,只有ROOT和上部主体的segment将有多个子segment.

  7. 接下来一是”CHANNEL“头部信息,后面跟着的数字表明channels的数目,后面的标签表明每一个channel的类型.

  8. 一个BVH文件解析器必须跟踪channel的数目和channel的类型,在后面MOTION信息被解析的时候,这个顺序在解析每一行的MOTION数据的时候需要用到.这种格式规定很明显具有灵活性,能够允许segment拥有任何数目的channel,且能够按照任何顺序.

  9. channel旋转的次序是:Z X Y,

  10. 接下来能看到”JOINT“和”END SITE“关键词,一个JOINT的定义和ROOT的定义是相同的,除了CHANNEL的数目不同,JOINT正是递归开始的地方,剩下部分对JOINT的解析和ROOT一样的.

  11. END SITE结束了递归,它的定义还包含了一些数据,它提供了前segment的长度,就像前面子segment提供了offset用于绘制父segment的长度和方向

  12. JOINT的结尾以右括号结束,BVH中,空间被定义成了右旋坐标系与Y轴作为世界矢量.

数据部分

  1. 数据部分以”MOTION”“*开头,后面的数字表示了帧率,下一行”**Frame Time“定义了采样频率

  2. 文件剩余的部分包含了motion的数据,每一行是一个motion数据的样本, The numbers appear in the order of the channel specifications as the skeleton hierarchy was parsed.


关键词

  • HIERARCHY : 开头
  • ROOT : 根关节
  • JOINT : 根关节下的关节
  • OFFSET : 子关节相对父关节的偏移,也可以表示对应父关节的长度和方向,当子关节不止一个时,采用第一个子关节的数据.
  • CHANNELS : 给出了关于channel的个数和名称(ROOT总是拥有6个channels,而一般JOINT只有3个,较之ROOT缺少了XYZ的position信息,因为子关节只需要根据它相对于父关节的偏移就可以算出它在坐标系中的具体位置了)

注意

  • rotation channel的顺序是:Zrotation Xrotation Yrotation
  • BVH格式的运动采取的旋转方式比较特别 
    -End Site 表示终结递归,该关节的定义到此为止,可看作一个终端效应器
  • 数据块以 MOTION 关键字开始 
    -Frames: 定义帧数,Frame Time:定义数据采样速率-每帧的时间长度,如0.033333则表示BVH文件的一般采样速率,每秒30帧
  • 接下来的数据就是实际的运动数据,对应骨架信息的层次结构
  • 对于子关节来说,平移信息存储在骨架信息的OFFSET中,旋转信息则来自于MOTION部分;
  • 对于根结点来说,平移量是OFFSET和Motion section中定义的平移量之和。
  • BVH不考虑Scale变换。

数据

计算segment的位置,需要从局部的平移和旋转信息创建一个变换矩阵.对于任何joint,平移的信息将会是层次部分中定义的offset,旋转信息则从motion部分得到

对于根ROOT,平移数据为offset的总和,而旋转的消息来自motion部分,BVH不需要考虑比例因子的计算.

创建变换矩阵的直接方法是创建3个单独的旋转矩阵,每个矩阵对应每根轴 VR = vYXZ


解析器

可以参考:BVH java解析器


参考

Biovision BVH


谢谢


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款流行的游戏引擎,支持多种文件格式的导入,其中包括bvh文件格式bvh文件格式是一种用于记录人体骨骼动作的文件格式,通常用于动画制作。 在Unity中导入bvh文件非常简单。首先,在Unity中创建一个新项目,并导入需要的人体模型。其次,打开导入人物模型的编辑器,在编辑器中选择导入bvh文件的选项。接下来,选择需要导入的bvh文件,并按照提示完成导入过程。在导入过程中,Unity会自动将bvh文件中的骨骼动作信息应用到导入的人体模型上。 在导入完毕后,可以使用Unity的动画编辑器来查看和编辑导入的骨骼动作。除了默认的动画编辑器,还可以使用一些第三方插件来更好地控制和编辑动画。此外,如果觉得需要,还可以利用Unity"动作匹配器"和"动作融合器"的功能,来组合和混合多个动画。 总之,Unity支持bvh文件的导入,使得人物动画制作变得更加容易和高效。通过导入和编辑bvh文件,人物动画制作者可以创造出更加生动、精彩的人物动作,从而提高游戏的质量和用户体验。 ### 回答2: Unity是一款非常强大的游戏引擎,可以实现3D场景的构建和游戏物体的操作。而导入bvh文件也是其中的一个非常重要的功能,这可以非常方便地实现角色动作的导入和应用。 首先,在Unity的资源管理器中选择需要导入bvh文件的对象,在其属性面板中选择“导入”的选项。随后选择bvh文件,并进行导入操作。 接下来,在导入后的动画对象上,我们可以进行各种不同的操作,比如修改动画的播放速度、添加新的动画片段、或者对动画进行差值和编辑。 需要注意的是,在导入bvh文件时,Unity会尝试将其重新调整为匹配当前场景的大小和比例。因此,有时候可能需要手动对动画进行一些微调和编辑,以实现最佳效果。 总之,使用Unity导入bvh文件是一项非常重要且实用的功能,可以让我们更加轻松和高效地创建精美的动画效果。 \end{cn} ### 回答3: Unity是一款流行的游戏引擎,可以用于开发各种类型的游戏。导入BVH文件是Unity中常见的任务,这种文件格式通常用于描述人体运动数据。以下是关于如何在Unity中导入BVH文件的一些提示。 首先,Unity可以通过使用第三方插件来导入BVH文件。有许多免费或付费的插件可供选择,例如"BVH Importer"或"FinalIK"。在查找和选择插件之前,要确保已经下载并安装了最新的Unity版本。 安装插件后,需要准备BVH文件。可以使用3D建模软件如Maya、Blender或MotionBuilder来创建或修改此文件。通常需要确保文件符合常见的BVH标准格式,例如正确的帧速率、帧数量、层次结构和骨骼命名。 导入过程与导入其他文件类型相似: 打开Unity,创建一个新项目或打开现有项目,然后从文件选项中选择导入功能。选择正确的插件和BVH文件后,将需要进行一些设置,例如指定是否移动,旋转或缩放人物模型。 成功导入BVH文件后,Unity会生成一个包含BVH数据的动画片段。可以通过将这段动画片段附加到人物模型上,使模型运动引擎和动画数据配合工作。 总之,在Unity中导入BVH文件需要使用适当的插件,并通过创建和配置人物模型来准备文件。成功导入后,BVH数据可用于实现复杂的人体动作和其他交互式游戏元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值