资源预览内容
第1页 / 共73页
第2页 / 共73页
第3页 / 共73页
第4页 / 共73页
第5页 / 共73页
第6页 / 共73页
第7页 / 共73页
第8页 / 共73页
第9页 / 共73页
第10页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
游戏中的计算机动画技术浙江大学计算机学院教学内容和目标动画的基本概念和方法动画场景中的碰撞检测运动的指定方法关键帧动画的编程基于动作捕捉技术的动画编程粒子系统与动画计算机动画简介(1/3)动画的定义:就是一组连续的图像序列。当按一定的速率显示的时候,能传递一种运动的感觉动画的技术要求:每一幅图像或者每一动画帧,都必须有机地、无缝地和其他的图像融合在一起,这样才能随着时间的变化,产生平滑的、连续的运动计算机动画简介(2/3)传统的动画制作方法将人物运动的所有帧序列手工地绘制出来计算机在动画制作中的作用自动产生某些中间帧序列模仿手工动画,将多层绘制的场景由计算机来进行合成制作方式的改变从“绘制出每一帧”到“使用计算机工具来制定图像序列如何变化”计算机动画简介(3/3)动画的分类:二维动画二维动画集中于图像的处理和操作,如sprite-based animation, blending or morphing between images, embedding graphical objects in video footages, or creating abstract patterns from mathematical equations 三维动画三维场景和人物的建模以及他们之间的交互建模运动的指定()绘制游戏中的两维动画(1)展示形式直接播放方式游戏的片头或者篇尾,例如AVI 或者MPEG连续贴图方式通过连续贴图成像技术来产生动画效果编程关键定时器创建一个定时器利用回调函数来显示动画删除定时器游戏中的两维动画(2)镂空动画(sprite animation)一幅背景图一组蒙版图人物的连续显示方式DOUBLE-BUFFER不要在窗口中直接贴图,避免闪烁建立一个内存DC,然后把所有的贴图动作都在这个DC上进行,最后把结果显示到操作窗口中。游戏中的两维动画(3)对动画序列中的每一帧Load 背景图确定sprite绘画的位置将某一蒙版图与背景图作AND运算将对应的人物图与背景图作OR运算更新sprite绘画的位置演示Sprite animation demo1游戏中的两维动画(4)半透明的动画效果将要贴上人物的背景图部分取出,放入buffer在buffer中的背景图上,AND 蒙版图,OR人物图在buffer中的位图乘上透明度t再次取出相应的背景图,作半透明计算,并生成半透明图片直接将半透明图贴在背景图中游戏中的两维动画(5)透明效果演示Sprite animation demo2游戏中的两维动画(6)观看演示Sprite animation demo3思考下列问题动画中的效果有什么不一样?猜猜使用的动画技术?游戏中的两维动画(7)“终点返回起点”游戏中的三维动画概述(1)三种主要的运动方式场景内容不变,视点在移动漫游等场景内容在动态改变,视点不变人物表演动画等混合方式场景内容和视点都在运动游戏中的三维动画概述(2)最简单的情形 使用标准的绘制程序,仅移动物体或视点.技术核心各个运动物体的平移和旋转量确定。关键问题如何指定和控制物体在场景中的运动. 相机或者物体移动,或者两者同时移动. 游戏中的三维动画概述(3)相机的任意外部参数都可以形成动画。这类动画一般在第一人称游戏中最常用。用户可以控制相机位置(三个自由度)和相机的朝向(两个自由度). 在两个相邻的关键点上需要插值相机参数,在此过程中最重要的是保持相机的up向量。此外,用户也可以控制视点的运动,而视线则始终跟踪一个目标点。该目标点可以是静止的,也可以移动。游戏中的三维动画概述(4)所涉及的关键技术漫游碰撞检测(collision detection)人物动画骨架驱动的动画运动的生成面部表情粒子系统基于BSP树的CD(1)碰撞检测(CD-Collision Detection)用于确定两个物体是否相交以及在何处相交.单纯确定是否相交又叫做相交测试. 检测两个运动物体最初接触的时刻.检测两个运动物体在何处检测. 物体相交的类型: 线与物体求交,平面与物体求交, 物体与物体求交. 基于BSP树的CD(2)游戏中需要碰撞检测的场合有:在大型地貌系统中需要正确驱动交通工具;监测轨道中行驶的汽车并检测两辆车是否碰撞;确定导弹是否击中目标, 弹性物体在物体之间的弹跳两个人物交战时的状态查询 决定是否某个物体可以通过一个通道基于BSP树的CD(3)碰撞检测采取两步法 首先剔除明显不相交的物体包围体方法以及其他空间剖分策略检测可能相交的物体之间的情况并在给的精度下求得相交点.基于BSP树的CD(4)BSP树是游戏中组织场景的最常见方式之一;BSP的叶结点可分为虚节点实节点PABDCABCDEF基于BSP树的CD(5)检测一个点的运动路径是否与BSP树中的实节点相交检测与剖分平面的交点如何检测一个动画人物与场景的交点Bounding box/sphere“膨胀”BSP树PADCADP基于BSP树的CD(6)算法步骤HitCheckBSP(N, v0,v1)If (not isSolidCell(N) return FALSEElse if (isSolidCell(N)Pimpact=v0Return TRUEEndHit=FALSE;If (clipLineInside(N shift out, v0,v1,&w0,&w1)Hit = = HitCheckBSP(N.negtivechild,w0,w1);If (hit) v1=Pimpact;EndIf (clipLineInside(N shift in, v0,v1,&w0,&w1)Hit |=|= HitCheckBSP(N.positivechild,w0,w1);If (hit) v1=Pimpact;EndReturn Hit;V0V1w0W1W0W1n基于BSP树的CD(7)为什么是两边都要检查?ABCDE基于BSP树的CD(8)其他的包围盒的方法AABBs(Axis-aligned bounding boxes,与坐标轴平行的包围长方体), 一对AABB如果有交当且仅当它们在某些个轴上的投影有相交的部分。 AABB方法简单,当物体旋转时,或者重新计算包围体,或者应用一个新的包围体。OBBs(Oriented bounding boxes,旋转后的最贴近物体的长方体)基于BSP树的CD(9)层次包围盒整个物体可以表示为一个OBB层次树。树的根即整个物体的OBB,叶节点包含一个或多个多边形. 如果两个物体的根节点的OBB相交,那么碰撞测试将从上往下遍历下去,直到找到相交的叶节点。因此,OBB树越贴近物体,处理碰撞查询所需要的遍历次数越少。人物动画概述(1)从绘制流水线的角度看在某个瞬间(某一帧),只要知道此时的物体和场景的空间位置的信息,就可以绘制出画面关键:运动指定一帧一帧指定:每秒25到30帧,。人物动画的难点:动画人物的身体的各部分的和谐的、自然的运动。人物动画概述(2)人的视觉系统(人类动画师)并不明显区分建模信息、运动信息和视觉效果信息基于骨架的人物动画抽象出骨架:建模和运动分开,在绘制时进行骨架和模型的绑定。方便运动的指定模型和运动都可以重用人物动画概述(3)什么是关节? 它由一系列刚体、它们之间的连接关系组成,这使得物体的不同部分可以相关联地运动。整个物体的运动受全局的连接关系限制整个结构由一条联结关系组成,某个关节的运动造成它的邻接关节运动并且限制了邻接关节的运动方式,如人类的骨架关节无法做完全旋转。动作(motion)获取的三种主要方式(1/3)关键帧:指定每一关键时刻的物体的运动位置和方向优点:简单,易理解缺点:它要求动画师经验丰富,并且耗时难以模仿动作的某些细微特征或者特定的动作动作获取的三种主要方式(2/3)动态(过程)模拟(物理建模) 根据物理规律和指定的目标,使用算法或者过程来模拟产生运动或者动作序列优点:很容易根据运动的要求配置相应的参数,初学者也能产生高质量的动画序列缺点:对简单的运动比较有效没有系统性的方法来描述一个复杂的运动,或者一个具有细微特性的运动动作获取的三种主要方式(3/3)基于动作捕捉设备将表演者的现场表演的运动数据实时纪录下来,并映射到计算机的动画人物中优点:实时,直观,可视运动数据可以被实时地、直观地可视化。演员、导演和动画师可以在一起工作,来获取所期望的动作,便于交流,高质量动作数据可以产生特定人物的特定运动数据,这是手工指定所无法比拟的产生的运动数据比较真实、自然,并可表现出表演者的人物个性。很多细微的运动元素已经自然地体现在捕捉下来的数据中,不需要通过领域知识来添加。我们的mocap设备(1/2)浙江大学计算机学院动作捕捉实验室曹光彪东楼313-314生产厂家:Motion analysis 公司如果只用于游戏和动画,Vicon更佳我们的mocap设备(2/2)性能10Hawk摄像头每秒200帧精度小于0.5mm动作数据到3D人物模型的映射照片的版权归相关的公司或者团体所有Mocap在游戏开发中的应用示例关键帧技术关键帧系统的应用背景在电影和动画界,这是一个最常用的技术为了节省动画片制作中的巨大工作量,动画公司采用层次的系统结构,即高级动画师首先手绘一段关键帧构成的动画序列。 然后这些序列由动画师(inbetweener)完成帧间动画的绘制。最后,由动画师(inker)将这些序列着色。关键帧技术(续)扩充到三维动画三维空间中的物体也可以由关键帧定义 并由计算机完成中间帧的生成。相比手绘动画,在计算机动画中需要更多的关键帧以获得完美的效果。关键帧技术(续)以一个弹性球为例. 下图展示了三个关键帧。指定关键帧指定骨架关键帧有多种方法,比如: 最简单的情形:通过空间中的一系列点确定关键帧点定义一个物体所经过的点序列,并将这些点列用三次曲线拟合生成路径。指定关键帧信息比较好的方法允许动画师指定更多的关键帧之间的运动信息 例如直接定义一条运动曲线.此外,可以定义运动路径上的速度变换函数. 一般地,为了正确控制运动,必须显式地定义位置变换与时间的函数关系 指定路径上的动态行为. 指定关键帧信息参数位置关节角形状变形物体材质相机运动光照如果我们仅考虑位置,那么我们可以应用一个与时间相关的4x4位置矩阵于场景物体。 关键帧插值为了使物体运动真实,矩阵的二阶导数必须连续矩阵中的位置部分的三个分量可以独立插值,但旋转部分不行。关键帧控制器Void KeyFrameController:Update(float time)InterpolateTranslation(time, localTranslate);InterpolateRotation(time, localRotate)每个插值进程以某一时刻为准,找到与之最近的两个关键帧时刻点。这两个关键帧用下面描述的方法进行插值。旋转部分插值(1)基本思想:用四元数表示旋转将旋转矩阵变换到四元数空间,然后在四元数空间进行插值插值后的四元数变回到三维空间并应用到物体上。四元数 可视作一个类似矩阵概念的算子,它能将一个向量变到另外一个,但是四元数的选择是唯一的. 旋转部分插值(2)4-元数是什么?将旋转定义为绕轴n旋转角度的一对关系:R(, n).绕三个轴向变成绕一个轴向为什么使用4-元数来插值?基于欧拉角的旋转具有轴相关性旋转部分插值(3)旋转部分插值(4)考察四元数的旋转功能。 r 可表示为四元数p=(0,r),因此该操作可视为:因此,将向量r旋转一个 角度(,n) 相当于利用角度位移的概念,即将它提升到四元数空间,然后表示为单位四元数(cos (/2), sin(/2)n) 旋转部分插值(5)对四元数 (0, r)执行操作q()q-1 ,可将方向参数化为以下四项: cos (/2), sin(/2) nx, sin(/2) ny, sin(/2) nz利用四元数代数操作每个分量旋转部分插值(6)假设动画师设置了一系列旋转的关键帧序列,那么 每一帧可由单个旋转矩阵决定。这些矩阵序列将被转换到一系列四元数。在关键帧四元数之间进行插值,产生一系列连续的四元数,再将它们转换到旋转矩阵。这些矩阵在应用到物体上。一般的,四元数的使用对动画师来说是透明的。旋转部分插值(7):四元数到旋转矩阵将一个向量P 旋转一个四元数q :q(0, P)q-1q 又可表示为:(cos(/2), sin (/2)n)=(s, x,y,z)它等价于下面的旋转矩阵:旋转部分插值(8):旋转矩阵到四元数若旋转矩阵则四元数的球面线性插值(1)球面线性插值的公式是:考虑两个二维向量 A 和 B ,它们之间的夹角是,其中 向量 P 与A成角度 P是A和B的球面线性插值的结果:P=A+B球面线性插值(2)一般地, , 由下式给出:|P|=1, AB=cos, AP=cos 球面线性插值(3)两个单位四元数 q1 和q2之间的夹角为:q1q2=cos它们之间的球面线性插值可将前面的公式推广到四维:( u0,1)关键帧骨架的人物动画实例(2)Create 14 Joints. Joint NewJoint(j0, null, 0,0,0) Joint NewJoint(j1, j0, 0,22,0) Joint NewJoint(j2, j0, 5.3,16.7,0) Joint NewJoint(j3, j2, 12.5,15.8,0) Joint NewJoint(j4, j3, 22.1,15,0) Joint NewJoint(j5, j0, -5,17,0) Joint NewJoint(j6, j5, -12,16,0) Joint NewJoint(j7, j6, -21.8,15,0) Joint NewJoint(j8, j0, 3,-3,0) Joint NewJoint(j9, j8, 4.5,-19,0) Joint NewJoint(j10, j9, 7.1,-38.2,0) Joint NewJoint(j11, j0, -3,-3,0) Joint NewJoint(j12, j11, -5,-18.80) Joint NewJoint(j13, j13, -8.3,-38.1,0) Scene SaveScene(sprocket2sprocket) Fine tune Joint positions. 关键帧骨架的人物动画实例(3)Init Vertex-Joint Blending Weights. Object InitWeights() Create the first KeyFrame. KeyFrame NewKeyFrame(0,0) Pose KeyFrame, and Fix Vertex-Joint Blending Weights Pass 2 关键帧骨架的人物动画实例(3)Create the second KeyFrame. KeyFrame CopyKeyFrame(0,500)Create remaining KeyFrames. KeyFrame CopyKeyFrame(0,1000) KeyFrame NewKeyFrame(0,250) KeyFrame NewKeyFrame(0,750) 人物动画中的运动生成(1)三个主要的运动动方式前向动力学逆向动力学运动捕获人物动画中的运动生成(2)Joint space:各个关节点和关节的DOFEnd-effector space: end effector 的m-维空间World space: 人物场景空间骨架/关节点的位置是各个关节夹角(用户指定,前向动力学)的一个函数用户也可以直接指定骨架的姿势和关节点的位置(逆向动力学)人物动画中的运动生成(3)动画编程人员眼中的前向动力学和逆向动力学问题描述Joint spaceEnd effector spaceXX=f()前向动力学=f-1(X)逆向动力学人物动画中的运动生成(4)两个骨架Link的例子:1L1L22X(x,y)人物动画中的运动生成(5)IK的解决方案:解析解差分算法优化非线性规划。IK的演示IK demo人物动画中的运动生成(6)动作捕捉数据驱动前向或者逆向动力学?动作捕捉数据的格式TRCHTRBVHBVAC3D.人物动画中的运动生成(7)文件格式实例骨架定义各帧的数据BVH 文件解剖BVH demo粒子系统(1)粒子动画逐个地运动一大堆粒子,模拟自然界的“点云”运动的整体效果。 比如焰火. 粒子 是一些小的物质,每个都有自己的运动脚本粒子系统(2)工作原理基本思路是某些自然现象可以通过描述一大群单个粒子的运动和绘制来加以模拟.工作方式单个粒子一般被视做几何上微小或者为零的基本单元,小到多个粒子可能投影到屏幕的一个象素但是每个粒子拥有自己的属性,如颜色。粒子系统(3)粒子的建模一般可以设计一个脚本 赋予每个粒子一定的随机性,产生彼此之间的差异性。例如,每个粒子的位置在随时演化之中。不同的自然现象通过群体粒子属性脚本和单个粒子差异脚本描述。粒子系统(4)控制每个粒子差异性的参数包括下列特征,它们与粒子的位置和粒子本身的生命周期有关:运动轨迹,形状,颜色. 粒子的动力学行为和外观是时间函数,可以集成到同一个脚本描述粒子系统(5)Reeves (1983)描述了生成单帧粒子动画的五个步骤:生成新的粒子并放置到当前系统中;赋予每个新的粒子属性.删除超越生命周期的粒子活性粒子根据各自的脚本运动绘制活性粒子粒子系统(6)单个粒子的脚本描述包含下面一系列属性:初始位置与速度发射的方向尺寸(如半径)和形状弹性系数和碰撞系数 透明度摩擦系数、重力和风力生命周期 纹理一般地,一个粒子总是被作为一个带纹理映射的长方形在绘制在屏幕上并与背景做透明度融合粒子系统(7)某时刻 t的粒子数量由下式决定:N(t)=M(t)+rand(t) V(t)其中,M(t)是数学均值期望,V为方差. 方程用于控制总体的点云变化(收缩和增长)尺寸.粒子系统(8)对于一个粒子系统: 初始化所有粒子启动粒子系统处理所有粒子工作完成后清除所有粒子演示Particle demo
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号