动作捕捉(Motion Capture)文件BVH的解读笔记

Bvh里面的JOINT(以及ROOT)都表示一个坐标空间,我们称之为关节坐标空间,在这个坐标空间里, 它有下一级的子坐标空间(也就是下一级的JOINT),子坐标空间的原点位置由子JOINT的OFFSET字段指明,也就是说一个JOINT的OFFSET就是这个JOINT表示的坐标空间在父JOINT表示的坐标空间里的坐标,不管父JOINT如何变换(旋转、平移),这个JOINT在父JOINT坐标空间里的(位置)坐标是不变的,所以BVH文件里OFFSET是固定的值。一个JOINT坐标空间是可以变换的,JOINT坐标空间变换时,它的子JOINT也会随着一起变换,就好比是一个球,球心是JOINT表示的坐标空间的原点,这个球就是这个JOINT的坐标空间,球内有一点A,不管这个球如何变换(滚来滚去),点A也会随着变换(滚来滚去),点A相对球的位置是固定的。CHANNELS 指的是 关节点坐标空间的自由度,比如CHANNELS中含有Xroation,就表明这个JOINT的坐标空间是可以绕X轴旋转的。JOINT的自由度仅影响它自己表示的坐标空间以及它的子坐标空间,也就是说,不管一个JOINT如果变换,它在父坐标空间里的位置是不变的。如果CHANNELS中含有平移自由度,那说明这个JOINT的坐标空间是可以平移的,这时候,JOINT坐标空间的原点就可能不是在OFFSET指明的位置,这种情况下,父JOINT的骨骼长度仍由子JOINT的OFFSET计算得来,而子JOINT的骨骼的起始位置就不是OFFSET指明的位置了,而是OFFSET+CHANNELS中的平移量。骨骼端点相对关节点坐标系的变换矩阵,如果CHANNELS里没有POSITION ,表明骨骼端点与关节点重合,(http://t.zoukankan.com/vickylinj-p-13827826.html:
而一般JOINT只有3个,较之ROOT缺少了XYZ的position信息,因为子关节只需要根据它相对于父关节的偏移就可以算出它在坐标系中的具体位置了)

MOTION的数据是按照深度优先顺序排列的。

关节表示的坐标系朝向:默认与世界坐标系朝向一致,想象一下假如所有的JOINT它的CHANNELS里都没有旋转自由度,那么每个JOINT的坐标系相当于是把世界坐标系做了平移操作。CHANNELS里的旋转自由度,表示把父关节的坐标系在平移到OFFSET处后,再进行旋转操作。注意这里说的父关节坐标系,是指世界坐标系经过平移旋转后得到的坐标系,而不是“骨骼朝向为Y轴正向”这个坐标系。

关节点通过OFFSET就可以确定位置,OFFSET表示的是相对于父关节点的偏移。
在rest position(初始位置)下,关节点的坐标系与世界坐标系的三个轴的方向一致,只是原点位置不同。
骨骼端点的位置由CHANNELS 中POSITION字段与 关节的OFFSET共同决定,骨骼的朝向由CHANNELS的Rotation字段决定.

如:https://research.cs.wisc.edu/graphics/Courses/cs-838-1999/Jeff/Example1.bvh

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
				}
			}
		}

        }

}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值