陈小满
摘要:三维人体模型动态仿真技术已经成为当前计算机动画领域的研究热点,基于此,本文提出了一种运动捕捉数据驱动的三维人体模型动态仿真方法.首先,对运动捕捉数据ASF/AMC文件进行解析,提取运动信息;其次,建立包括骨骼层和皮肤层的双层人体模型;最后,通过骨骼蒙皮技术实现三维人体骨骼层和皮肤层的绑定,并采用所提取的运动数据驱动人体模型运动.仿真结果表明,本文所提出的方法能较好的实现三维人体动态仿真效果.
关键词:三维人体模型;动态仿真;运动捕捉数据;绑定
中图分类号:TP391.9 文献标识码:A 文章编号:1673-260X(2019)04-0055-04
1 引言
三维人体模型动态仿真技术是三维动画的核心技术,被广泛应用于影视、游戏、虚拟现实和增强现实等领域中[1].通过精密仪器捕捉到的真实人体运动的数据,驱动三维虚拟人体模型做动态仿真,实现高度逼真的动态效果,带来强烈的视觉冲击和震撼感受,以满足人们日益增长的精神需求.
三维动画经过长期的发展和演变可以分为四种[2,3],分别是杆状动画,顶点动画、蒙皮动画和多层模型动画.杆状动画和顶点动画都是单层模型,杆状动画只有骨骼层,顶点动画只有皮肤层,都有一定的局限性.蒙皮动画使用骨骼皮肤模型,包含两层模型,分别是骨骼层和皮肤层,将骨骼和皮肤绑定在一起,通过骨骼运动带动皮肤变形.多层模型动画则是在皮肤层与骨骼层之间添加肌肉层和脂肪层,需要通过更复杂的控制和约束进行动画制作.蒙皮动画和杆状动画相比,模型更具有真实感;和顶点动画相比,内存消耗小,具备交互性,并且控制层次高便于修改动画数据;和多层动画相比,控制机制更简单,技术更容易被推广.随着应用中真实感和交互性的需求越来越高,蒙皮动画技术成为了目前被广泛应用的三维动画技术和主要的发展方向[4].
基于此,本文将重点研究蒙皮动画的三维人体模型动态仿真技术,使用运动捕捉数据驱动虚拟人体运动.首先,解析运动捕捉数据,得到人体骨架模型和运动数据;其次,创建三维人体模型;最后,重点研究骨骼皮肤绑定技术,实现三维人体动态仿真.
2 运动捕捉数据的解析
本文采用Carnegie Mellon University图形实验室提供的运动捕捉数据,分为ASF和AMC两种文件,ASF文件用于存放骨架信息,AMC文件用于存放运动数据[5].将骨架信息和运动数据分开的优点是一个ASF骨架可以運用不同的AMC运动数据,实现不同的动作,而不必每个AMC数据都自带骨架信息,减少了数据的冗余.
2.1 ASF数据解析
ASF是一个层次定义的文件,包括文档信息描述、根节点描述、骨骼信息描述、关节层次结构定义等,如表1所示:
在ASF文件中,根节点(root)定义了人体骨骼模型在世界坐标系中的位置和朝向,而骨骼模型结构中其他所有的骨骼(或关节点)位置信息等都是在根节点的位置和朝向的基础之上获取的,骨骼本身不带平移信息,只有旋转信息,此外还定义了旋转的自由度(即旋转的范围).最后在:hierarchy中规定了骨骼模型的层次结构.
2.2 AMC数据解析
AMC是以帧序列存储的运动姿态信息,一帧表示一种运动姿态,依照ASF中定义的骨骼的自由度给出相应的数值,包括根节点的平移和旋转信息以及各关节点的旋转信息,如表2所示:
在一套完整的运动过程中,假设有m个帧序列,则运动数据可以采用以下方式表达出来:
式中,fi表示第i帧的运动数据,ti0表示第i帧中根节点的平移信息,ri0表示根节点的旋转信息,rij表示第i帧中第j段骨骼的旋转信息.
ASF/AMC运动捕捉数据,能够将模型中的骨骼信息与运动信息相互分离,使一个骨骼信息与多个运动信息匹配,这种方式能够降低运动数据在存储过程中需要的空间,进而提升空间的应用效率.
3 三维人体建模技术
本文采用三维建模软件创建人体模型,一个完整的人体模型包括模型和贴图两个部分.
在建造一个人体模型时,需要对人体的结构特征有细致的观察和深入的了解,由于人体模型最终不是为了静态的演示,而是动态的表演,所以还需要掌握人体的运动特点,在制作模型时,需要合理布线,符合人体的运动需要.由于本文使用的是真实人体的运动数据,因此设计人体结构时采用与真人比例一致的模型.首先,制作头部,创建一个多边形立方体,修改立方体的分段方便调整头部的大型比例,调整立方体,制作出模型的大体轮廓.使用编辑网格的工具组划出五官的位置和比例,并逐步调整和细化.其次,制作躯干部分,创建一个多边形立方体,调节分段,调整轮廓.再次,制作四肢,方法和躯干大体相同,都是从基本的几何体开始,先调整大型再逐步加线细化.最后,将这几个部分缝合,缝合时需注意是否有遗漏的顶点,缝合后需保证布线整齐一致.
创建出多边形模型后,还需要为模型的表面绘制纹理.要使三维的立体模型转换为二维的平面图像,就需要将模型的表面通过裁剪等手段展开,映射到二维纹理贴图坐标(即UV)上.展开的基本原则是,在UV拉伸较小的时候,尽量保证面的完整性.在选择边切开的时候,尽量选择比较隐蔽或在镜头中不常出现的部位.在进行模型UV划分时,各个部分之间不要相差过大.在测试纹理不会发生明显的变形下展平模型表面,渲染出UV模板,导入绘图软件中,绘制人体表面纹理,包括面部、皮肤和衣服等.绘制完成后,将贴图赋给之前创建的模型,图1是人体模型的渲染图.
4 人体模型动态仿真技术
在进行人体模型动态仿真时,主要通过骨骼层带动皮肤层进行变形,以此呈现出人体模型的运动效果.因此,首先需要创建皮肤层的骨骼,然后通过蒙皮技术,实现骨骼和皮肤的绑定,最后将运动捕捉数据映射到模型的骨骼上,以骨骼关节点的运动,带动皮肤顶点的运动,呈现出多样化的运动效果,完成人体模型的动态仿真.
4.1 人体模型的骨骼创建
前文已使用三维建模软件创建了三维人体皮肤模型,还需进一步创建与皮肤模型相匹配的骨骼模型.由于本文采用的是ASF/AMC运动捕捉数据,运动数据AMC要映射到人体模型的骨骼上来驱动皮肤模型的运动,因此,要根据ASF文件中定义的骨骼层次结构创建人体模型的关节点,保证关节点的数量和名称都是一致的,以便进行姿态同步.
首先,在皮膚模型的中心添加根节点,作为骨骼模型的起始点,并向上依次绘制背、胸、颈、头的关节,根据创建的先后顺序,关节和关节之间会自动形成层级关系,以符合运动骨骼的层次结构;其次,以肩关节和胯关节为起始,依次绘制手和腿的关节;再次,将肩关节和胸关节连接,使肩关节成为胸关节的子节点.同理,将胯关节和根节点连接,使胯关节成为根节点的子节点.最后,以根节点为原点镜像关节点,这样,便得到了完整的人体皮肤骨骼结构,如图2所示.
4.2 皮肤骨骼绑定
骨骼和皮肤在初始状态下是重合的,但是要在运动过程中使骨骼驱动皮肤变形,就需要对骨骼和皮肤进行绑定.绑定时需考虑两个问题,第一个是不同关节点对皮肤顶点变形产生的影响值,即为权重;第二个是如何使用骨骼驱动模型,即为蒙皮算法.
权重指的是运动过程中不同关节点对皮肤顶点变形产生的影响值.目前权重的绑定方法主要有:最近距离法,在层次中最近法,和热量贴图算法.最近距离法只考虑皮肤顶点和关节点的距离,而不考虑骨骼本身的层次结构,容易使骨骼和皮肤的关系产生错乱,例如左腿的运动会带动右腿的皮肤产生不合理的拉伸变形.在层次中最近法加入了对骨骼模型中层次结构的判定,可以将人体的不同部位大体区分开来,减少一些不必要的错误,改进最近距离法的不足.热量贴图算法[6]模拟热量扩散原理,热量会随着与热量源的距离增加而减少,距离关节点近的权重值高,距离关节点远的,权重值低.此外,距离越远,衰减越快,这样使得权重更接近影响的对象,限制了小权重的扩散,减少错误的影响范围.热量贴图算法是目前自动绑定效果最好的一种算法.
权重值确定了骨骼和皮肤的关联系数,而如何使用骨骼驱动模型,即为蒙皮算法.蒙皮算法是通过骨骼的权重值和骨骼的变换矩阵将初始姿态下的皮肤顶点位置变换到新的位置.现在主流的蒙皮算法是线性混合蒙皮算法,算法容易实现,但其缺陷是容易在关节处产生“塌陷”和“打结”现象.这种缺陷是由于线性混合的过程中原本刚性的变换在混合后可能会变为非刚性的,不能保持皮肤体积的恒定.因而需要对线性混合蒙皮算法进行改进,使得模型能够平滑变形.一种改进方法是对三维坐标的变换矩阵进行球面线性插值[7],从前文分析得知,只有根节点有平移变换,其余的关节点只有旋转变换,因此对旋转变换进行插值.根据皮肤点与关节点的权重值计算皮肤点对应的旋转变换,然后通过根节点的平移和骨骼结构中各层级的旋转得到皮肤点更新后的实际位置.由于不再对结果点的位置进行插值,因此可以保持皮肤的体积恒定.另一种方法是使用对偶四元数[8],对偶四元数具有刚性变换的性质,可以将皮肤顶点的全局变换矩阵转换为对偶四元数,用权重与对偶四元数进行线性混合,将线性混合得到的新的对偶四元数进行单位化,最后将单位化的对偶四元数转换为变换矩阵,更新顶点位置,即可满足刚性变换,解决“塌陷”和“打结”的缺陷.
4.3 基于AMC三维人体运动仿真
骨架结构是连接人体模型及运动数据的桥梁,使用运动捕捉数据驱动人体模型,首先必须得保证模型的骨架和运动数据的骨架在结构上是一致的.另外,由于虚拟人是根据动画或者游戏的内容而设定的角色,具有千姿百态的外形,相应的骨骼比例也是各不相同,要使运动数据能够更好地驱动虚拟角色,就必须使得虚拟人模型的骨架和运动数据自定义的骨架相匹配.
根据前文解析的ASF/AMC文件制作插件,将运动骨骼和运动数据导入三维动画软件Maya,在Maya中得到运动骨骼和相应的帧序列动作.使用HumanIK将运动骨骼映射到模型骨骼上,使模型骨骼具有运动姿态.HumanIK是反向运动学解算器和重定目标工具,可以对场景角色全身和身体部位的关键帧进行设置和操控,也可以在不同的角色之间对动画进行重定目标.具体做法是,在HumanIK中新建骨架定义,将运动骨骼中的各个层次关节赋给角色控制器相应的部位.完成骨架定义后,将角色控制器的骨架赋予模型的骨骼,即完成了映射,使模型骨骼与运动骨骼姿态同步,并通过骨骼和皮肤的绑定带动模型皮肤顶点变化,实现了基于AMC三维人体运动仿真.图3截取了行走运动中四个关键帧的运动姿态来展现三维人体动态仿真的效果.
5 结束语
随着三维动画仿真的应用范围不断的扩大,如何提高仿真的效果成为相关领域关注的重点问题.通过运动捕捉设备采集真实的人体数据,从而驱动三维人体模型实现动态仿真成为研究的热点.本文对运动捕捉数据ASF/AMC文件进行了详细分析,建立了具有骨骼层和皮肤层的双层人体模型,并实现了骨骼和皮肤的绑定,在此基础之上采用运动捕捉数据驱动了人体模型,实现了动态仿真.本方法的提出,在一定程度上提高了三维人体动态仿真效果,为三维人体动画提供了一种切实可行的途径.后续将继续研究骨骼和皮肤的绑定算法,以解决运动状态下的皮肤变形失真的问题,使得骨骼对皮肤顶点的控制更加平顺.
参考文献:
〔1〕夏开建,王士同.改进的骨骼蒙皮算法模拟皮肤变形[J].计算机应用与软件,2009,26(12):174-176.
〔2〕Mahoney J V, Fromherz M P. Handling ambiguity in constraint-based recognition of stick figure sketches[C]. Electronic Imaging 2002. International Society for Optics and Photonics, 2001: 89-100.
〔3〕叶大海,庄越挺,刘丰.骨粒串主导的自由曲面变形算法[J].计算机辅助设计与图形学学报,2005, 16(12):1719-1723.
〔4〕黄永坤,侯进,戚福洲.三维虚拟人皮肤变形与塌陷部位的调整[J].计算机应用与软件,2015(9):184 -187.
〔5〕刘贤梅.基于运动捕获数据的虚拟人动画研究[J].计算机工程与应用,2008,44(8):113-114.
〔6〕Baran llya. Automatic Rigging and Animation of 3D Characters[C]// Acm Siggraph. ACM, 2007.
〔7〕Kavan L, ára J. Real time skin deformation with bones blending[J]. 2003.
〔8〕Kavan L, Collins S, O'Sullivan C. Skinning with dual quaternions[J]. Symposium on Interactive 3d Graphics and Games. ACM, 2007:39-46.