摘 要: 文章以主流的(*.bvh)、(*.c3d)或(*.trc)类型的动捕数据的应用流程为例,首先阐述了动捕数据应用到角色动画的工作原理:把物理空间中跟踪点(Marker)的Translate(x,y,z)和Rotate(x,y,z)的值映射到动画软件骨骼系统的对应层级中,不同的数据格式有不同的映射方式。其次探讨了优化动捕数据的关键技术:Key Frame Reducer的可行性及其对提升动画制作品质所具有的积极意义。
关键词:动捕(运动捕捉);跟踪点;映射;层级;关键帧简化
1.运动捕捉技术的历史
1983年 金斯伯格和麦克斯韦教授使用Op—Eye光学跟踪系统。
1984年 Motion Analysis实现通过二维跟踪三维定位技术。
1988年英国Oxford Metrics Limited公司发布第一套应用在影视的动画制作领域的Motion Capture系统—Vicon 。 这是世界上第一个设计用于动画制作的光学Motion Capture系统, 它专门为动画制作量身定做,是一套专业化的Motion Capture系统。 现在已被许多非常著名的动画制作公司采购、使用。 它的出现意味着运动捕捉技术正式进入影视动画制作。
1993年 Acclaim光学运动捕捉系统可以同时进行2人的动作捕捉,跟踪点(Marker)可达100.
1996年 Motion Analysis公司实现跟踪点(Marker)的自动标识。
2007年 3D动画电影《贝奥武夫 Beowulf》的角色的表演完全由动作捕捉技术来展现。
2010年 《阿凡达》导演利用3D立体、动作捕捉技术通过《阿凡达》将自己的想象力完美地呈现给了全球影迷,使《阿凡达》取得了前所未有的成绩。
2.光学式运动捕捉技术的工作流程
运动捕捉技术从原理上说可分为机械式、声学式、电磁式、主动光学式和被动光学式。不同原理的设备各有其优缺点,一般可从以下几个方面进行评价:定位精度;实时性;使用方便程度;可捕捉运动范围大小;抗干扰性;多目标捕捉能力;以及与相应领域专业分析软件连接程度。
光学式运动捕捉(Motion Capture)技术,是通过高速摄像机阵列来捕捉表演对象身上的跟踪点,把跟踪点在物理空间中的运动数据,映射到计算机的虚拟三维空间中,一般是记录跟踪点的三个维度(x、y、z)的移动(Translation)和旋转(Rotation)数据,因此动捕数据包含的信息主要对应于虚拟骨骼系统每一层级关节的TranslateX、TranslateY、TranslateZ、RotateX、RotateY、RotateZ六个属性的值。
目前光学式运动捕捉技术大多基于计算机视觉原理。从理论上说,对于空间中的一个点,只要它能同时为两部摄像机所见,根据同一时间点的两部摄像机所拍摄的图像像素等数值,可以确定这一时间点该点在空间中的位置。当摄像机以足够高的速率连续拍摄时,从图像序列中就可以得到该点的运动轨迹。在表演对象的关键部位设置跟踪点,由高速摄像机阵列捕捉跟踪点在三维空间中运动的轨迹,再经过计算机处理后,生成可以在动画制作中应用的数据。动画师可以将这些数据映射到动画角色,生成动画。也可以在相关软件中调整动画效果。这些数据应用范围非常广泛,就娱乐产业而言,涉及到电影、电视、MV、电子游戏等领域。
通过多个高速摄像机捕捉的跟踪点(Marker)所获得的数据,因为高速摄像机镜头存在死角,所以捕捉到的数据很多时候会存在丢帧现象,因此跟踪点在表演对象身上放置,必须与其骨骼系统的关节点相对应,具体的做法很简单,在表演对象身上放置跟踪点之前,我们可以先在动捕软件中创建角色骨骼系统的框架模型Model Markers,除了在关节点上的主要跟踪点之外,还需要在关节点周围放置附加的标记点(理论上附加标记点越多越有利于修复丢帧),这些标记点之间由Stick根据人体基本结构的方式相连接。有点像人类的骨骼一样,这些Stick是长度一定的Rigid Bodies,这就保证了跟踪点阵列的相对稳定。丢帧现象一般是一个或多个跟踪点丢失导致的,丢失的跟踪点的数据可以根据附近其它跟踪点的数据推算出来,当然如果丢失的跟踪点太多,就得手工修复了。见图一。 图1
3.运动捕捉数据的类型
针对不同的三维动画软件,可以输出的运动捕捉数据格式种类较多,例如(*.asf, *.amc) (*.bvh) (*.htr) (*.trc) (*.c3d),较常用的格式是(*.bvh)和(*.c3d),通过外部插件,Maya可以直接使用(*.bvh) (*.htr) (*.trc) (*.c3d)这几种格式的数据,当然,最常用的调用动捕数据软件是AutoDesk公司的MotionBuilder。
MotionBuilder支持以上所有格式的动捕数据,可以将MotionBuilder作为中转站,将任何格式的动捕数据导入MotionBuilder,处理后存为(*.fbx), 现在主流三维动画软件对(*.fbx)数据的支持还是很不错的,处理后的(*.fbx) 数据可以应用到很多主流三维动画软件中。据说VICON公司的新版动捕软件Blade可以直接由跟踪点生成(.fbx)骨骼,并把动画数据直接传递给这种(.fbx)骨骼,省去了大量的修补丢帧数据的工作,进一步提高了工作质量和效率。
4.运动捕捉数据的应用
我们以(*.bvh)和(*.c3d)这两种格式在MotionBuilder中的使用为例。
MotionBuilder虽然能够导入(*.bvh)格式数据,但无法直接将(*.bvh)文件格式使用到角色上,需要重新映射到MotionBuilder的基本骨骼上才能使用。我们可以导入任意(*.bvh)数据到MotionBuilder中,旋转、移动其关节成标准的T-POSE状态,这就得到我们需要的基本骨骼,用MotionBuilder的Character节点来角色化基本骨骼,选择基本骨骼的关节,按Base(required)的关节列表,一一对应拖入Charater Defintion的Model List中,并激活Characterize选项,完成基本骨骼的角色化,并另存为不带动画的(*.fbx)文件。需要使用(*.bvh)数据到自定义动画角色的时候,可以先导入这个文件,再导入(*.bvh)数据到这个文件的基本骨骼上,选择BVH Replace Animation,动画数据会附加到基本骨骼上,然后在自定义动画角色的Character Setting下的Input Type中使用Character Input的数据输入方式。
再来说(*.c3d)或(*.trc),这两种格式的处理方式基本一样。将(*.c3d)导入到MotionBuilder中,将MotionBuilder的Actor节点拖放进Viewer。 (*.c3d)或(*.trc)数据中的人物大小与MotionBuilder中Actor的并不相同,用移动和缩放工具将二者对齐(对得越齐动画效果越好),在Actor Setting中创建MarkerSet,将Ac
tor的关节点拖入到MarkerSet中,激活Active和Snap选项,就完成了(*.c3d)或(*.trc)数据与MotionBuilder中Actor的绑定。需要使用(*.c3d)或(*.trc)数据到自定义动画角色的时候,在自定义动画角色的Character Setting下的Input Type中使用Actor Input的数据输入方式即可。
在MotionBuilder中可以对动捕数据的动画曲线进行各种处理,使得输出的文件到其它的三维动画软件中也能方便的进行编辑。例如Key Frame Reducer可以对动捕数据的动画曲线进行简化,保留重要的帧,删除其它的帧,按需要来自动简化动画帧(Key Frame)。还可以使用各种滤镜来平滑动画曲线的噪波(Noise),减少错误的关节震动。这些功能使得角色动画更流畅。见图二。 图2
我们知道动捕数据是逐帧记录的,密密麻麻的动画帧极大地妨碍了我们对动画帧的再编辑,使我们望而却步。通过MotionBuilder的一些功能,我们就能得到简洁的动画帧,可以轻松地控制动画曲线,有点像手Key动画一样可以自由编辑,这确实是一件很棒的事。