基于计算机视觉的
三维动画模型快速创建方法
■湖南文理学院美术学院 陈国军
三维模型创建是三维动画制作流程中最为基础的环节。在三维动画发展的早期,由于计算机性能及模型创建手段的限制,动画所驱动的对象大多是比较简单的角色形态,如Pixar Animation Studios在1986年所创作的动画短片《Luxo Jr》【图1】。随着CG技术的发展与计算机性能的不断提升,创建高细节度的模型已经成为现实。如《魔戒》系列电影中全数字化制作的咕噜,最近上映的电影《阿凡达》中的数字化后的男女主角【图2】,均具有较高的细节度,当然在这其中不能忽略部分软件的作用,例如Zbrush。然而模型创建手段的演进,仍然是其主要原因。纵观三维动画流程中模型的创建手段,主要有以下几种:
1、运用数学方法创建几何形态。
2、以艺术造型手段创建。
3、以数学创建的几何形态为基础,再以艺术造型手段可视化地修改其造型数据。
4、以艺术造型为基础,以数学方法进行变形球操作,修改其造型数据。
5、在模型创建过程中非线性地使用艺术造型手段与数学手段进行模型创建。
6、采用3D扫描技术对现实模型进行数字化,然后再进行修改以适合三维动画流程。
显而易见,以上几种模型创建手段中,与传统造型方法结合比较紧密的是第六种,一般情况下,效率最高的也是第六种。介于此,本文就在第六种模型创建手段上进行展开,以探索一种低价高效的三维动画模型创建方式。
这种模型创建手段最为关键的技术便是3D扫描技术。成熟的3D扫描技术目前来讲主要应用于模具制造工业。然而一台3D扫描仪的价格对于普通的动画工作室来讲显然过于昂贵,因此,寻找一种更为低价的3D扫描方法是极有意义的。
在进一步的研究中,我发现,要使计算机具有现实模型识别能力离不开计算机视觉,采用计算机视觉领域所已经获得的成果,开发一种快速的三维动画模型创建方法是可行的。
要实现计算机视觉,原始图像数据的获取是最为基础的,3D扫描所获取的图像是经过阀值差异化后的等高线平面投射图,而这种等高线数据的获取对于动画制作来讲仍然不是最为方便的方法,因此,我将原始素材的获取规定为光轴不平行的三幅或以上的数码照片,这样,我们只需要获取三幅以上的照片,便能还原物体结构化后的三维形态。
以下为整个操作流程(人机):
掩盖在上述流程背后的是一些稍微复杂的数学问题,现提取如下,后面加以详述:
1、摄像机定标
2、特征点匹配
3、立体标定与立体校正
4、三维重建
摄像机定标是计算机视觉中最为基础、但又极为重要的技术,先看一下针孔摄像机视图的投影公式:
(X,Y,Z,1)是一个点的齐次坐标,(u,v)是点投影到摄像机成像平面的坐标,A是摄像机内参数,包含以像素为单位的焦距与中心距。[R|t]为摄影机外参数矩阵,包含摄影机的旋转平移变换。摄像机定标的目的就是为了获取式中的A与[R|t]矩阵。我们采用OpenCV中的CalibrateCamera2函数来进行摄像机定标。
通过手工在不同的图像间指定特征点以后,我们需要对这些特征点进行匹配,其匹配的基本原理是对极几何。如下图:
图中的X点在左视图中出现的x必定会出现在右视图的其对应的极线上(极线约束)。基于这一原理,通过像素级的灰度系数对比,我们可以方便地找出x在右视图上的对应点,这样,图像之间的点就对应起来了,也就是说,实现了特征点的匹配。
由于原始图像的获取是通过摄像机(照相机)在不同的位置获得的(相当于通过多台型号相同的机器获得),所以,建立多台机器间的关系是三维重建必经的步骤。实现立体标定的本质是获取机器间的旋转平移矩阵。我们可以通过OpenCV的相关函数实现这一步骤。
立体校正是为了获取完全行对准的图像,我们可以通过Bouguet算法来实现这一步骤。
在上述步骤完成以后,有两种方法可以实现恢复特征点的空间信息,一是通过视差图,二是通过求两条直线在空间中的交点(当然首先要确定其是否有交点)。
在得到足够的特征点与足够的空间信息后,我们可以利用OpenGL进行可视化的三维重建,我采用Alias|Wavefront的obj格式来组织模型数据。
接下来,在Maya中导入模型,可以进行后续的修改与创建,如果模型的拓扑线不符合要求,可以选择make live,依据拓扑线进行快速重建,这样,模型便可以加入到三维动画的制作流程中了。
至此,我们的现实模型数字化过程也全部完成。
在写作此文的同时,我采用C语言基于OpenCV与OpenGL实现了从摄像机定标到模型重建的计算机程序,并使之可以工作于Windows及Linux平台,且能与Maya及其他软件协调使用。
由于本人学识浅陋,文中难免错漏之处,还请各位专家指正。