研究内容
交互模型的建立
虚拟模型是虚拟现实技术在摄像机设备中的应用体现,是实际摄像机设备使用过程在虚拟环境下的实现,是一种人机交互过程的仿真。随着计算机软硬件及虚拟人技术的发展,虚拟人在虚拟模型中的地位也越来越重要。如何逼真、方便地模拟人体动作,成为虚拟模型的一项关键性技术。模型任务的分解是实现模型活动仿真的基础,应将模型作业分解到能够支持模拟的程度才能实现模型仿真。
虚拟角色是指在虚拟场景中能进行自我动作的虚拟人、虚拟动物和虚拟昆虫等. 它已被广泛应用于制造、娱乐、军事、航天和公共安全等领域.对虚拟角色的研究包括骨骼建模、皮肤变形、面部表情、服装变化、运动捕捉、运动编辑等方面。其中骨骼建模和运动编辑的研究是使虚拟角色能动起来的基本前提,它对一些特定的应用起到十分重要的作用. 如在虚拟跳水运动仿真中,用户关心的是虚拟跳水运动员的动作和姿态;在虚拟维修仿真中,用户关心的是虚拟工程师手上的操作动作;在虚拟刑事现场仿真中,用户关心的是犯罪分子或被害人的运动过程和动作。 技术难点
国内外有许多团队从事虚拟角色运动编辑及控制技术研究的工作. 如美国宾夕法尼亚大学人体建模与仿真中心Badler领导的团队研究包括参数化的关键帧技术在基于关节的虚拟人建模系统中的应用、虚拟人运动控制及动作捕捉研究等。洛桑的Thalmann带领的VRLab主要研究人体建模及变形、人体行走、抓取动作和运动控制系统。中科院的王兆其等采用基于自动化骨架匹配和可视化骨架编辑方法完成虚拟人骨架建模,并将其研究成果应用于手语交互,取得了较好的效果。浙江大学的庄越挺等采用视频和运动图像序列方法
得到二维运动骨架序列,虚拟交互动作仿真是对真实交互活动的再现,应将人体运动、交互工具和交互对象三者结合起来,对整个交互过程进行分解,并将每个过程的虚拟人运动进行分类,建立层次化的虚拟人动作。以此为基础实现人体动画。
上述研究对虚拟人的建模大多采用运动学和动力学的方法,必须事先建立骨骼模型,然后根据动力学方程控制运动;如果动力学方程过多,则求解困难,运动的实时性难以保证下文提出了一种通用的虚拟角色骨骼建模方法,该方法通过对已有的虚拟角色表面模型进行识别,自动建立虚拟角色骨骼模型;并在此基础上,利用参数关键帧技术实现虚拟角色的过程动画,最后应用fltk和OpenGL库实现了虚拟角色在虚拟场景中的实时运动控制和路径点规划控制2种方式。
我们可以将整个交互任务分解为:
(1)人体移动过程虚拟人从当前位置变换到交互位置的过程; (2)姿态调整过程虚拟人调整姿态到能够进行交互的过程: (3)交互作业过程虚拟人与虚拟场景之间的交互 技术路线 1虚拟角色建模
从一些专业软件如3DS Max,MAYA或者Poser可直接导出虚拟角色表面模型(3DS文件格式),这些角色模型依据各自特征采用层次化结构设计为块状,如图所示直接应用虚拟角色表面模型无法控制虚拟角色的运动,必须建立虚拟角色骨骼模型才能控制虚拟角色的运动。
虚拟角色分块模型
1.1块的边界抽取及中心点计算
由于虚拟角色表面模型文件中的几何形状信息只有面阵列集 F{F1,F2,….,Fn}和顶点阵列集V{V1,V2,……,Vn};顶点阵列集中的每个单元由该顶点的x,y,z空间坐标构成;面阵列集中的每个单元 Fi={ n1,n2,n3 },代表每个面是由一个三角形构成,其中 n1,n2,n3为顶点阵列集中顶点序号。块的边界指的是边界的线仅被一个三角形所用,因此,块的边界抽取采用改进的面与面求交遍历算法实现。算法包括如下个步骤:
(1) 定义一个线阵列E,每个单元有3个变量:A,B,N。A,B代表线段的2个端点;表示这
条线被共用的次数。
(2) 选取一个面,抽取一条线,查询线阵列E,如果此线未出现在线阵列中,则把此线加
到线阵列中;如果此线已出现在该线阵列中,则该线阵列的变量为N+1。 (3) 抽取选中面的其余2条线,按照(2)中的方法标记该线段。 (4) 遍历其他面中的线,标记相应线段。
按照上述算法可找到块的边界线,即线阵列E中变量N=1的线。边界中心点的计算是通过对边界线的点求其平均值确定。 1.2 骨骼模型建立
把计算得到的边界中心点作为块的关节点,连接每个块的关节点就构成了该块的骨骼这样如果块的关节点数为2,则其骨骼由这个关节点直接相连构成,但如果块的关节点数为1或n时,块的骨骼构建需采用如下方法:
(1) 如果块的关节点数为1,则其骨骼由块的中心点与关节点相连构成;
(2) 如果块的关节点数为n(n>2),则每块可生成n块骨骼(由块中心点分别与块的每
个关节点构成。
由于块为层次结构,因此必须确定最顶块最顶块的运动包括x,y,z三个方向的平移运动和绕x,y,z三个轴的旋转运动;其余块的运动仅有绕x,y,z三个轴的旋转运动;每个块的运动影响到自己的所有子块,而子块的运动对父块无影响最顶块的旋转与平移会使整个模型进行旋转与平移因此,最顶块一般取模型的中心位置对于虚拟人或虚拟狗来说,一般定义胸部为最顶快。
确定好每个块的骨骼后,就可建立虚拟角色骨骼模型算法是以最顶块骨骼为父节点,搜
寻其所有子块的骨骼,再分别以这些子块的骨骼为父块,搜寻下一批子块,不断重复,直到块的关节点数为子块判断的法则是个块的边界中心点间的距离最短因为,父子层次的块,边界几乎贴在一起,因此边界中心点的距离也较小由上述方法建立的虚拟小狗和虚拟人的骨骼模型如图所示:
基于边界中心点连接的虚拟角色骨骼模型
1.3虚拟角色建模
以人体为例,人最常见的运动分为行走、跑步和跳跃3种方式,下面以人体行走为例进行分析。
走路模型
研究人走路的过程可以发现,人的走路分为3个阶段:起步阶段(从静止立正状态到跨开一步)、行走阶段(左右脚交互行走)和收步阶段(从行走状态恢复到静止立正状态)因此,动作编辑时,只要编辑种人体姿态,就能完成人体走路姿态的表先,如图所示
人体行走阶段图
1.4运动约束关系
基于关节的虚拟角色骨骼模型在运动时存在关节活动范围的极限值,即R(x,y,z)min≤
R(x,y,z)α≤R(x,y,z)max,式中,R(x,y,z)min和 R(x,y,z)max为关节绕x,y和 z轴允许旋转的最小和最大角度。
根据 GB10000-88 《中国成年人人体尺寸》的数据,成年人肢体各关节活动范围如图所示。
对虚拟角色骨骼模型进行运动编辑时,各关节的运动要符合关节约束关系,否则运动不自然。
成年人肢体部分关节的主要活动
1.5运动控制方式
实时运动控制指通过键盘、鼠标或其他控制输入电路直接控制虚拟场景中的角色进行运动,它主要考虑实时性、角色的位置移动以及角色的方向变化,具体关键点如下:
1) 实时性主要与角色模型的复杂程度以及机器的性能有关,一般为了实现实时性,需
要牺牲模型的精细度如果要在虚拟场景中实现多个角色的实时运动,在硬件条件不变的情况下,角色模型越简单,渲染的速度越快。
2) 角色的位置移动由移动按键控制,需要考虑帧间偏移量因为,利用关键帧动画实现
人体行走时,如果模型的位置不作相应移动,则每次播放完行走动画后,模型又会回到起始点重新再走一遍同时考虑到在虚拟人的行走过程中,如果位置与朝向不匹配,就会出现人的朝向与移动的方向不一致。为此采取计算帧间偏移量D(i)及把帧偏移量按朝向角投影到xoz平面,分别计算出在x轴的偏移量和在z轴的偏移量来解决此问题,如图所示,帧间偏移量的计算式为
式中,T(i)为每帧的位移量;i为帧号,i=0时T(0)=0,T(-1)=0,D(0)=0
3) 4)
位置与朝向匹配方法
角色模型朝向变化与模型最顶块的旋转向量相关,通过改变最顶块绕y轴方向的旋转Ry向量,可以达到改变人行走的方向。 如果一个角色要经历走跑走的运动过程,需涉及走跑和跑走2个运动动作连贯的过程一般解决的方法是等行走动画播放完毕,再循环播放跑步动画。这样的方法会出现2个动作连接之间的不协调较好的解决方法是采用自动插帧技术。当角色正在行走,突然发出指令要让他跑,这时行走动画正渲染到哪一帧是随机的,确定该帧为第1个关键帧;第2个关键帧就是希望平滑过渡的目标姿态。2个关键帧之间可以利用自动插补帧动画实现动作间的平滑过渡第2个关键帧的选择对整个平滑的效果起着至关重要的作用。一般来说,目标帧与起始帧越相似,自动插帧后的平滑效果越好。分析人走路和跑步的动画可以发现,人行走的关键帧与跑步的关键帧较相似,因此只要把跑步相对应关键帧作为目标帧即可。
在现实世界中,每个人的走路姿态都不完全相同,虚拟角色也是如此,但要通过动作编辑器把每个虚拟角色的行走姿态都编辑出来,需要耗费大量的人力和时间,通过调整虚拟角色行走的幅度和频率可以创建出各个不同的行走姿态。频率的调整可以通过改变2个关键帧之间的插补帧数确定插补帧数越多,人行走的频率越慢。同时,人行走的姿态是由每个骨骼相对其局部坐标系的旋转向量决定,幅度调整可以通过在相应骨骼的旋转向量上乘一个权值t得到,例如跑步时手臂不断往复运动,即手臂相对其坐标系旋转向量的大小不断变换,假设标准情况下小臂相对x轴旋转了15°,只要在小臂的旋转向量上乘一个权值2就可以增大其运动幅度至30°,当然运动的幅度不能超过运动约束。如果要减小运动幅度,只要在旋转向量乘上一个权值t(0<t<1)即可。由于虚拟角色的骨骼模型是由不同的块组成,对每个块采用不同的权值才能更好地控制动作,达到个性化行走姿态要求。如果想从2个或者更多的已经制作好的动作中直接派生出新的动作,就需要对每个动作的权值进行重新设置。如跑和走进行混合,新动作就有a%的跑和b%的走,a%+b百分等于100%通过这种方法产生某个骨骼混合后的旋转参数,也得到了多个动作在不同混合程度下的新动作。
5)
创新点