首页 > 范文大全 > 正文

虚拟的“真实”

开篇:润墨网以专业的文秘视角,为您筛选了一篇虚拟的“真实”范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:柔性蒙皮的皮肤不像刚性蒙皮那么僵硬,本文的目的就在于将长期应用于传统影视动画制作中的柔性蒙皮技术移植到交互领域中,即改变目前应用于交互领域中的角色几何体及其动画信息的数据结构,重新塑造一种信息文件的结构方式,使得在实时骨骼蒙皮的过程中,皮肤顶点受骨骼的影响值不会受到限制,达到真正意义上的柔性节点蒙皮,从而为交互状态下的角色动画提供一种新的动画解决方案。

关键词:交互式角色动画;骨骼蒙皮技术;实时渲染;3D文件格式

中图分类号:TP391文献标识码:A文章编号:1007-9599 (2012) 02-0000-03

Virtual "Real"-Simulation Skin in Interactive Animation Exploration

Yuan Wei

(Shandong University,Jinan250100,China)

Abstract:The skin of smooth skin is not as stiff as skin of rigid skin.The thesis purpose lies in transplanting the smooth skin technology,applied to in traditional movie&TV cartoon making for a long time,to interaction field,changing the data structure of the character’s geometry and animation information applied to in the interactive field at present and creating a new structural way of an information file.for the sake of skinning between model and skeleton,the influencing value of skin vertex transformed by skeleton will not be limited,reach a real meanings on soft skin,thus offer a kind of new animation solution.

KeyWords:Interactive character animation;Skeleton skin technology;Real-time rendering;3D file format

一、研究的目的和意义

在多媒体应用领域中,交互性角色动画应用层面最广泛,技术手段更新最快的当属游戏领域。传统的三维影视动画制作软件,如Maya、3Dmax等,其角色动画的制作环节中,为了获得细腻逼真的动画效果,骨骼蒙皮的默认影响最少都为5点以上的影响值,即每个皮肤顶点在动画过程中的变形最少受到5个及以上骨骼的影响。而目前大多数主流游戏引擎里,在角色的骨骼动画方面只是实现了刚性节点的蒙皮,即每个皮肤顶点在动画过程中的变形仅受到1个骨骼的影响。与柔性蒙皮相比,角色的皮肤自然显得僵硬。而随着计算机硬件设备的提高,游戏玩家们对游戏画面视觉效果的不懈追求,对于角色动画模拟的精度不再满足于现状,提出了越来越高的要求。这其中,角色动画里的骨骼蒙皮技术是直接影响模拟程度的关键性因素。因此,以柔性节点为主的骨骼蒙皮技术已成为交互性实时三维角色动画的一个重要研究方向。

二、交互角色动画领域中的相关技术

在当今的各类三维游戏中,角色动画的制作技术主要有三种方式:关节动画、单一网格模型动画、骨骼蒙皮动画。

(一)关节动画

三维游戏的制作过程中,早期大多采用关节动画技术。关节动画中的角色由若干独立的部分组成。每一个部分对应着一个独立的网格模型,不同的部分按照角色的特点组织成一个层次结构。通过改变不同部分之间的相对位置,比如夹角,位移等等,就可以实现所需要的各种动画效果。其优点是动画文件小,可实现很多复杂的动画效果,但在不同部分的结合处往往会有很明显的接缝(如图2-1(a)),这会严重影响模型的真实感。

图2-1 关节动画、骨骼动画与蒙皮技术

图2-1(a)关节动画中角色动作出现折断与破面的情形;(b)角色的骨架与动作;(c)将角色模型与骨架产生连接

(二)单一网格模型动画

单一网格模型动画的角色由一个完整的网格模型构成。在动画序列的关键帧中记录着组成网格的各个顶点的新位置或者是相对于原位置的改变量。通过在相邻关键帧之间插值来直接改变该网格模型中各个顶点的位置就可以实现动画效果。相对于关节动画,单一网格模型动画无接缝问题,其角色看上去更真实。但这类动画的适应性很弱,角色很难通过实时计算来与环境进行良好的互动,以获得预先存储的动画序列之外的动画效果。另一方面,由于关键帧要存储网格模型所有的顶点信息,动画文件占用的空间特别大,对计算机硬件的要求非常高。

(三)骨骼蒙皮动画

骨骼蒙皮动画可以看作是关节动画和单一网格模型动画的结合。在骨骼蒙皮动画中,一个角色由作为皮肤的单一网格模型和按照一定层次组织起来的骨骼组成(如图2-1(b))。骨骼层次描述了角色的结构,相邻的骨骼通过关节相连,并且可以作相对的运动。通过改变相邻骨骼间的夹角,位移,组成角色的骨骼就可以做出不同的动作,实现不同的动画效果。皮肤则作为一个网格蒙在骨骼之上,规定角色的外观。组成皮肤的每一个顶点都会受到一个或者多个骨骼的影响。在顶点受到多个骨骼影响的情况下,不同的骨骼按照与顶点的几何,物理关系确定对该顶点的影响权重。通过计算影响该顶点的不同骨骼对它影响的加权和就可以得到该顶点在世界坐标系中的正确位置。动画文件中的关键帧一般保存着骨骼的位置,朝向等信息。通过在动画序列中相邻的两个关键帧间插值可以确定某一时刻各个骨骼的新位置和新朝向。然后按照皮肤网格各个顶点中保存的影响它的骨骼索引和相应权重信息可以计算出该顶点的新位置。这样就实现了在骨骼驱动下的单一皮肤网格变形动画,即骨骼蒙皮动画。如图2-1(b)(c)显示了一个骨骼蒙皮的例子。下图2-4显示了一个骨骼(bone)与关节(joint)关系的示意图。

图2-4 骨骼与关节关系的示意图

在图2-4中①、②、③、④、⑤、⑥为联系各段骨骼的关节。在骨骼动画的制作过程中,主要考虑的是关节的旋转和位移。皮肤模型上的每一个顶点实际上是被一个或多个关节影响,而不是骨骼本身。其影响大小是按照一定的权重来定。

三、无限制柔性骨骼蒙皮的实现

柔性骨骼蒙皮实现的关键就在于确定网格皮肤顶点与骨骼的影响关系。在这种影响关系之下,会产生真实的网格皮肤,也会出现其化身--隐性网格皮肤。隐形网格皮肤的数量越多,其最终合成的模型皮肤动作就越细腻真实,从而达到真正意义上的不受限制的柔性蒙皮。

在交互状态下实现无限制级的柔性骨骼蒙皮,首要任务是正确配置合理的数据结构及层次结构。数据结构包括网格皮肤的数据和骨骼的数据。良好的层次结构是建立数据结构的基础,这里主要指骨骼的层次,骨骼层次描述了角色模型各部分之间的影响关系(如图3-1)。

图3-1 骨架层次结构图

在数据结构层面,首先要确定数据模型里需要些什么样的信息。诸如模型中顶点的位置、顶点颜色、材质、UV纹理坐标、动画关键帧等等。这些信息配置的完整性、合理性是实现柔性蒙皮的前提。现有的三维数据格式大多为刚性动画格式或如obj等单纯的模型文件。其中.X文件,是最为接近的理想格式,其包含了对于一款3D游戏而言有用的信息,但柔性蒙皮最多只能实现4个骨骼,即每个点最多受4个骨骼影响,而大多数模型动画的三维制作软件中其默认的影响值为5个以上。这对于在三维软件中进行的骨骼绑定受到了限制。通过上面的分析来看,对于我们的需求―即希望包含模型,材质,又希望包含不受限制的骨骼绑定动画信息,需要设计出一种更合理,更能跟主流三维软件兼容的三维数据结构。

(一)骨骼模型文件系统的结构设计

一个骨骼模型文件主要包括模型网格信息和骨骼信息。网格信息是角色的多边形模型。该多边形模型一般由三角形面片组成,每一三角形面片有三个指向模型的顶点表的索引。通过该索引,可以确定该三角形的三个顶点。顶点表中的每一顶点除了带有位置,法向量,顶点颜色,材质,纹理等基本信息外,还会指出有哪些骨骼影响了该顶点,影响权重又是多少。

骨骼信息包括全部骨骼的数量和每一骨骼的具体信息。所有的骨骼按照父子关系组织成一棵树(例如图3-1)。树根代表整个骨架,其余每一节点包括叶子节点代表一根骨骼。每一根骨骼包括该骨骼在父骨骼坐标系中的变换矩阵,通过该变换矩阵确定了该骨骼在父骨骼坐标系中的位置。

骨骼模型文件包含几何体,纹理,骨骼等信息,所有的内容按照特定的顺序从上至下排列,结构设计如下图3.2所示。

图3-2 骨骼模型文件系统的结构图

图3.2骨骼模型文件的结构图。显示了一个骨骼模型文件所包含的内容、包含信息的顺序以及数据信息的布局。通过起始位置的文件头模块,就可快速了解整个文件结构的关注面。

在此数据结构中,为了能够实时方面的使用隐性网格皮肤来模拟出真实的网格皮肤,我们设计了一种新的不同于以往文件格式的模块―权重顶点模块。所谓权重点,是指多边形网格的每一个顶点在骨骼动画中会受多个骨骼影响,每一个骨骼按照一定的权重值会将网格顶点变形移动到一个新位置,从而得到一个新的顶点,这个点即为权重顶点。当所有的新位置上的点计算加权和后所得到的顶点位置,即为该多边形网格顶点受多个骨骼影响后真正变换的新位置。

每个权重顶点信息里会包含该权重顶点所属网格顶点的索引号,受其影响的骨骼索引号,影响权重值,该权重点相对于影响骨骼的坐标位置和法线。

多个权重点的加权和构建出顶点,顶点相连组成面,面相连组成网格,网格与网格之间按照一定的关系结合在一起,就构成了我们所需要的角色模型、场景模型。权重点与顶点信息的分隔,一方面为模拟真实的蒙皮行为提供结构上的便利,另一方面也利于无动画信息的静态模型的绘制。

(二)动画片段文件系统的结构设计

动画片段(Clip)实际上是通过角色来播放的动画数据。通过动作索引来与相应动作产生关联。单个的动画片段是动画选择和控制的基本单位。让每个文件只包含一段动画,比如跑、或走等单独的动画行为,更符合群组动画对动画重用的需求,更有利于角色动作库的构建及动画合成,同时减少数据冗余。

一般来说,动画信息中保存了若干关键帧。每一关键帧指出了每一骨骼在该时刻相对于父骨骼坐标系的变换矩阵,当然也可以是该骨骼相对于父骨骼的位置,朝向等变动。动画片段文件结构设计如下图3.3所示。

图3-3 动画片段文件系统的结构图

文件头模块说明了该动画片段的名字及所需动画的关键帧数。关键帧作为动画过程中关键姿势的快照,主要体现在该时刻,骨骼系统中所有骨骼的变换。每个关键帧信息包含:该关键帧的索引号,该关键帧内骨骼索引号,以秒为单位的时间值和以帧为单位的时间值,及该关键帧内每个骨骼的变换矩阵。

此外,除基本信息外,动画片段的数据结构中还应额外设置两个变量分别代表该段动画的优先级和分类信息,以方便群体动画的智能选择,比如受到攻击的躲避动画片段其优先权肯定高于被击中后倒地流血死亡的动画片段。此外,分类信息变量使得身体各个部分可以拥有单独的动画,并可相互组合成更广泛意义的身体区域。如果一个动画属于上身,输出的动画只能包含腰部以上的骨骼动画。如果使用的是骨骼权重系统,那么可以将所有的骨骼输出,但是腰部以下的骨骼的权重为0。

在完成三维角色模型、骨骼、动画信息数据结构的设计后,接下来要做的是正确地获取、解析、装载数据,计算骨骼变换并蒙皮。

(三)由骨架生成所有皮肤顶点的策略

不论是骨骼模型系统,还是动画片段系统,其中骨骼模块的变换矩阵都是该骨骼关节在某一时刻相对于其父关节坐标系下的变换矩阵(即本地矩阵)。而皮肤顶点的位置和法线是根据影响它的关节的绝对矩阵(即世界坐标系下的变换矩阵)来变形的。故而生成皮肤顶点前,首先需要递归计算每个关节的绝对矩阵:除根关节的绝对矩阵即为它的本地矩阵外,其余每个关节的绝对矩阵为父关节绝对矩阵点乘该关节的本地矩阵。

值得一提的是,若角色动画的实时渲染时刻恰好落在两个关键帧之间,那么每个骨骼关节的本地矩阵是通过插值取得,即确定其当前帧和下一帧的帧索引号,然后在这两帧之间进行插值。利用线性插值法对关节位移量进行插值,同时用四元数插值法(slerp)对关节旋转量进行插值,其插值的比例因子通过下面的公式计算:(当前插值点时刻上一帧的时间)/t,其中t为当前帧和下一帧,两帧之间的时间变化值。

由骨架生成所有顶点的策略,是以骨架的当前位置为基础,可以在帧中进行渲染。实现过程如下:

CVector3 TempVec;//设置一个包含3个浮点数的矢量,作为中间变量

For(单一网格中的每一个顶点)

{for(每个顶点受到多少个骨骼影响)

{TempVec=影响该点的权重点的位置;

TempVec.transform4(该权重点的影响骨骼的最终变形矩阵即绝对矩阵)//目的:受到该权重点的影响骨骼的变形,使顶点位置变换到当前帧下的新位置;

该顶点新位置+=TempVec*骨骼影响的权重值;

TempVec=影响该点的权重点的法线;

TempVec.transform4(该权重点的影响骨骼的最终变形矩阵即绝对矩阵)//目的:受到该权重点的影响骨骼的变形,使顶点法线变换成当前帧下的新法线;

该顶点新法线+=TempVec*骨骼影响的权重值;

};该顶点在当前关键帧处的新位置入栈;

该顶点在当前关键帧处的新法线入栈;

};设置指针,指向栈顶元属;

(四)实验结果与分析

本文的实时渲染基于OpenGL,采用的数据信息取自Maya中的三维角色模型,实验的主要工具包括Visual C++,Maya API,OpenGL。

实验结果测试比较:

由上面的比较可以看出,在实时状态下柔点骨骼蒙皮所实现的角色渲染效果和Maya经过一段时间后渲染出来的效果一致。而前者可以通过键盘或鼠标控制来交互查看。后者只是单纯的读取并显示。

本文最后通过角色在一个虚拟山谷水景中的游戏闲游完成柔性骨骼蒙皮动画的具体应用实例:(可分别用键盘和鼠标控制主体角色的动作:前进、后退、画面左右旋转等)

四、总结与展望

随着计算机3D硬件处理能力的不断提高,交互性实时骨骼蒙皮动画也已经从早期的试验阶段走向成熟,并且获得越来越广泛的应用。正因如此,才对交互领域中的骨骼蒙皮技术提出了越来越高的要求,基于无限制级柔性骨骼蒙皮角色的实时渲染,就是为了使得在人机交互领域,实现以往只能在动画电影中才能看到的各种生动逼真的动画效果打下坚实的基础。

同时,通过本文提供的一套方法、机制,使得三维游戏程序员可以对实时角色动画内部的各个方面进行自由定制和扩展,塑造和更改适合自己特定的工作环境和工作流程的产品。而真正意义上的柔性骨骼蒙皮,在交互动画的领域中,不论是对于科学技术上的智能化模拟,还是对于游戏玩家视觉享受的追求,都提供了一种新的动画解决方案。

可以想象,在不久的未来,越来越多只在传统动画制作软件中应用的各种技术,比如反向动力学,自由形态变形等等,会成为实时动画中广泛采用的主流技术,而这些技术的移植将不可避免地打破现有实时领域中应用的规则。

参考文献:

[1]金小刚,彭群生.计算机动画与仿真综述[J].软件学报,1997,8,4:29-31

[2]Alan Watt,Fabio Policarpo.3D Games Real-time Rendering and Software Technology,Vol 1,2005:265-277

[3]Rick puter Animation-Algorithms and Techniques.2002:63-119

[4]Alan WattFabio Policarpo,3D Games Animation and Advanced Real-time Rendering,Vol 2,2005:271-309:356-409

[5]Octane3d.Realization of skeleton skin animation supported by hardware,2003

[6]蔡涛,金刚,胡汉平.动画驱动靠"动力"--动画生成中的三大关键技术[J].计算机世界报,第18期

[7]Steve Rabin.人工智能游戏编程真言.2005:40-52

[8]Maya帮助文档-Overview of polygen API

[9]Evan Pipho,focuse on 3D models,2003