游戏中计算机动画技术课件_第1页
游戏中计算机动画技术课件_第2页
游戏中计算机动画技术课件_第3页
游戏中计算机动画技术课件_第4页
游戏中计算机动画技术课件_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

游戏中的计算机动画技术浙江大学计算机学院游戏中的计算机动画技术浙江大学计算机学院教学内容和目标动画的基本概念和方法动画场景中的碰撞检测运动的指定方法关键帧动画的编程基于动作捕捉技术的动画编程粒子系统与动画教学内容和目标动画的基本概念和方法计算机动画简介(1/3)动画的定义:就是一组连续的图像序列。当按一定的速率显示的时候,能传递一种运动的感觉动画的技术要求:每一幅图像或者每一动画帧,都必须有机地、无缝地和其他的图像融合在一起,这样才能随着时间的变化,产生平滑的、连续的运动计算机动画简介(1/3)动画的定义:计算机动画简介(2/3)传统的动画制作方法将人物运动的所有帧序列手工地绘制出来计算机在动画制作中的作用自动产生某些中间帧序列模仿手工动画,将多层绘制的场景由计算机来进行合成制作方式的改变从“绘制出每一帧”到“使用计算机工具来制定图像序列如何变化”计算机动画简介(2/3)传统的动画制作方法计算机动画简介(3/3)动画的分类:二维动画二维动画集中于图像的处理和操作,如sprite-basedanimation,blendingormorphingbetweenimages,embeddinggraphicalobjectsinvideofootages,orcreatingabstractpatternsfrommathematicalequations三维动画三维场景和人物的建模以及他们之间的交互建模运动的指定(√)绘制计算机动画简介(3/3)动画的分类:游戏中的两维动画(1)展示形式直接播放方式游戏的片头或者篇尾,例如AVI或者MPEG连续贴图方式通过连续贴图成像技术来产生动画效果编程关键定时器创建一个定时器利用回调函数来显示动画删除定时器游戏中的两维动画(1)展示形式游戏中的两维动画(2)镂空动画(spriteanimation)一幅背景图一组蒙版图人物的连续显示方式DOUBLE-BUFFER不要在窗口中直接贴图,避免闪烁建立一个内存DC,然后把所有的贴图动作都在这个DC上进行,最后把结果显示到操作窗口中。游戏中的两维动画(2)镂空动画(spriteanimati游戏中的两维动画(3)对动画序列中的每一帧Load背景图确定sprite绘画的位置将某一蒙版图与背景图作AND运算将对应的人物图与背景图作OR运算更新sprite绘画的位置演示Spriteanimationdemo1游戏中的两维动画(3)对动画序列中的每一帧游戏中的两维动画(4)半透明的动画效果将要贴上人物的背景图部分取出,放入buffer在buffer中的背景图上,AND蒙版图,OR人物图在buffer中的位图乘上透明度t再次取出相应的背景图,作半透明计算,并生成半透明图片直接将半透明图贴在背景图中游戏中的两维动画(4)半透明的动画效果游戏中的两维动画(5)透明效果演示Spriteanimationdemo2游戏中的两维动画(5)透明效果演示游戏中的两维动画(6)观看演示Spriteanimationdemo3思考下列问题动画中的效果有什么不一样?猜猜使用的动画技术?游戏中的两维动画(6)观看演示游戏中的两维动画(7)“终点返回起点”游戏中的两维动画(7)“终点返回起点”游戏中的三维动画概述(1)三种主要的运动方式场景内容不变,视点在移动漫游等场景内容在动态改变,视点不变人物表演动画等混合方式场景内容和视点都在运动游戏中的三维动画概述(1)三种主要的运动方式游戏中的三维动画概述(2)最简单的情形

使用标准的绘制程序,仅移动物体或视点.技术核心各个运动物体的平移和旋转量确定。关键问题如何指定和控制物体在场景中的运动.相机或者物体移动,或者两者同时移动.

游戏中的三维动画概述(2)最简单的情形游戏中的三维动画概述(3)相机的任意外部参数都可以形成动画。这类动画一般在第一人称游戏中最常用。用户可以控制相机位置(三个自由度)和相机的朝向(两个自由度).在两个相邻的关键点上需要插值相机参数,在此过程中最重要的是保持相机的up向量。此外,用户也可以控制视点的运动,而视线则始终跟踪一个目标点。该目标点可以是静止的,也可以移动。游戏中的三维动画概述(3)相机的任意外部参数都可以形成动画。游戏中的三维动画概述(4)所涉及的关键技术漫游碰撞检测(collisiondetection)√人物动画骨架驱动的动画√运动的生成√面部表情粒子系统√游戏中的三维动画概述(4)所涉及的关键技术基于BSP树的CD(1)碰撞检测(CD----CollisionDetection)用于确定两个物体是否相交以及在何处相交.单纯确定是否相交又叫做相交测试.检测两个运动物体最初接触的时刻.检测两个运动物体在何处检测.物体相交的类型:线与物体求交,平面与物体求交,物体与物体求交.

基于BSP树的CD(1)碰撞检测(CD----Collisi基于BSP树的CD(2)游戏中需要碰撞检测的场合有:在大型地貌系统中需要正确驱动交通工具;监测轨道中行驶的汽车并检测两辆车是否碰撞;确定导弹是否击中目标,弹性物体在物体之间的弹跳两个人物交战时的状态查询

决定是否某个物体可以通过一个通道基于BSP树的CD(2)游戏中需要碰撞检测的场合有:基于BSP树的CD(3)碰撞检测采取两步法

首先剔除明显不相交的物体包围体方法以及其他空间剖分策略检测可能相交的物体之间的情况并在给的精度下求得相交点.基于BSP树的CD(3)碰撞检测采取两步法基于BSP树的CD(4)BSP树是游戏中组织场景的最常见方式之一;BSP的叶结点可分为虚节点实节点PABDCABCDEF基于BSP树的CD(4)BSP树是游戏中组织场景的最常见方式基于BSP树的CD(5)检测一个点的运动路径是否与BSP树中的实节点相交检测与剖分平面的交点如何检测一个动画人物与场景的交点Boundingbox/sphere“膨胀”BSP树PADCADP基于BSP树的CD(5)检测一个点的运动路径是否与BSP树中基于BSP树的CD(6)算法步骤HitCheckBSP(N,v0,v1)If(notisSolidCell(N))returnFALSEElseif(isSolidCell(N))Pimpact=v0ReturnTRUEEndHit=FALSE;If(clipLineInside(Nshiftout,v0,v1,&w0,&w1))Hit=HitCheckBSP(N.negtivechild,w0,w1);If(hit)v1=Pimpact;EndIf(clipLineInside(Nshiftin,v0,v1,&w0,&w1))Hit|=HitCheckBSP(N.positivechild,w0,w1);If(hit)v1=Pimpact;EndReturnHit;V0V1w0W1W0W1n基于BSP树的CD(6)算法步骤V0V1w0W1W0W1n基于BSP树的CD(7)为什么是两边都要检查?ABCDE基于BSP树的CD(7)为什么是两边都要检查?ABCDE基于BSP树的CD(8)其他的包围盒的方法AABBs(Axis-alignedboundingboxes,与坐标轴平行的包围长方体),一对AABB如果有交当且仅当它们在某些个轴上的投影有相交的部分。

AABB方法简单,当物体旋转时,或者重新计算包围体,或者应用一个新的包围体。OBBs(Orientedboundingboxes,旋转后的最贴近物体的长方体)基于BSP树的CD(8)其他的包围盒的方法基于BSP树的CD(9)层次包围盒整个物体可以表示为一个OBB层次树。树的根即整个物体的OBB,叶节点包含一个或多个多边形.如果两个物体的根节点的OBB相交,那么碰撞测试将从上往下遍历下去,直到找到相交的叶节点。因此,OBB树越贴近物体,处理碰撞查询所需要的遍历次数越少。基于BSP树的CD(9)层次包围盒人物动画概述(1)从绘制流水线的角度看在某个瞬间(某一帧),只要知道此时的物体和场景的空间位置的信息,就可以绘制出画面关键:运动指定一帧一帧指定:每秒25到30帧,。。。人物动画的难点:动画人物的身体的各部分的和谐的、自然的运动。人物动画概述(1)从绘制流水线的角度看人物动画概述(2)人的视觉系统(人类动画师)并不明显区分建模信息、运动信息和视觉效果信息基于骨架的人物动画抽象出骨架:建模和运动分开,在绘制时进行骨架和模型的绑定。方便运动的指定模型和运动都可以重用人物动画概述(2)人的视觉系统(人类动画师)并不明显区分建模人物动画概述(3)什么是关节?它由一系列刚体、它们之间的连接关系组成,这使得物体的不同部分可以相关联地运动。整个物体的运动受全局的连接关系限制整个结构由一条联结关系组成,某个关节的运动造成它的邻接关节运动并且限制了邻接关节的运动方式,如人类的骨架关节无法做完全旋转。人物动画概述(3)什么是关节?动作(motion)获取的三种主要方式(1/3)关键帧:指定每一关键时刻的物体的运动位置和方向优点:简单,易理解缺点:它要求动画师经验丰富,并且耗时难以模仿动作的某些细微特征或者特定的动作动作(motion)获取的三种主要方式(1/3)关键帧:指定动作获取的三种主要方式(2/3)动态(过程)模拟(物理建模)根据物理规律和指定的目标,使用算法或者过程来模拟产生运动或者动作序列优点:很容易根据运动的要求配置相应的参数,初学者也能产生高质量的动画序列缺点:对简单的运动比较有效没有系统性的方法来描述一个复杂的运动,或者一个具有细微特性的运动动作获取的三种主要方式(2/3)动态(过程)模拟(物理建模动作获取的三种主要方式(3/3)基于动作捕捉设备将表演者的现场表演的运动数据实时纪录下来,并映射到计算机的动画人物中优点:实时,直观,可视运动数据可以被实时地、直观地可视化。演员、导演和动画师可以在一起工作,来获取所期望的动作,便于交流, 高质量动作数据可以产生特定人物的特定运动数据,这是手工指定所无法比拟的产生的运动数据比较真实、自然,并可表现出表演者的人物个性。很多细微的运动元素已经自然地体现在捕捉下来的数据中,不需要通过领域知识来添加。动作获取的三种主要方式(3/3)基于动作捕捉设备我们的mocap设备(1/2)浙江大学计算机学院动作捕捉实验室曹光彪东楼313-314生产厂家:Motionanalysis公司如果只用于游戏和动画,Vicon更佳我们的mocap设备(1/2)浙江大学计算机学院动作捕捉实验我们的mocap设备(2/2)性能10Hawk摄像头每秒200帧精度小于0.5mm

我们的mocap设备(2/2)性能

动作数据到3D人物模型的映射照片的版权归相关的公司或者团体所有动作数据到3D人物模型的映射照片的版权归相关的公司或者团体所Mocap在游戏开发中的应用示例Mocap在游戏开发中的应用示例关键帧技术关键帧系统的应用背景在电影和动画界,这是一个最常用的技术为了节省动画片制作中的巨大工作量,动画公司采用层次的系统结构,即高级动画师首先手绘一段关键帧构成的动画序列。

然后这些序列由动画师(inbetweener)完成帧间动画的绘制。最后,由动画师(inker)将这些序列着色。关键帧技术关键帧系统的应用背景关键帧技术(续)扩充到三维动画三维空间中的物体也可以由关键帧定义

并由计算机完成中间帧的生成。相比手绘动画,在计算机动画中需要更多的关键帧以获得完美的效果。关键帧技术(续)扩充到三维动画关键帧技术(续)以一个弹性球为例.下图展示了三个关键帧。关键帧技术(续)以一个弹性球为例.下图展示了三个关键帧。指定关键帧指定骨架关键帧有多种方法,比如:

最简单的情形:通过空间中的一系列点确定—关键帧点

定义一个物体所经过的点序列,并将这些点列用三次曲线拟合生成路径。指定关键帧指定骨架关键帧有多种方法,比如:指定关键帧信息比较好的方法允许动画师指定更多的关键帧之间的运动信息

例如直接定义一条运动曲线.此外,可以定义运动路径上的速度变换函数.一般地,为了正确控制运动,必须显式地定义位置变换与时间的函数关系

指定路径上的动态行为.

指定关键帧信息比较好的方法指定关键帧信息参数位置关节角形状-变形物体材质相机运动光照如果我们仅考虑位置,那么我们可以应用一个与时间相关的4x4位置矩阵于场景物体。

指定关键帧信息参数关键帧插值为了使物体运动真实,矩阵的二阶导数必须连续矩阵中的位置部分的三个分量可以独立插值,但旋转部分不行。关键帧插值为了使物体运动真实,矩阵的二阶导数必须连续关键帧控制器VoidKeyFrameController::Update(floattime){ InterpolateTranslation(time,localTranslate); InterpolateRotation(time,localRotate)}每个插值进程以某一时刻为准,找到与之最近的两个关键帧时刻点。这两个关键帧用下面描述的方法进行插值。关键帧控制器VoidKeyFrameController:旋转部分插值(1)基本思想:用四元数表示旋转将旋转矩阵变换到四元数空间,然后在四元数空间进行插值插值后的四元数变回到三维空间并应用到物体上。四元数

可视作一个类似矩阵概念的算子,它能将一个向量变到另外一个,但是四元数的选择是唯一的.

旋转部分插值(1)基本思想:旋转部分插值(2)4-元数是什么?将旋转定义为绕轴n旋转角度θ的一对关系:R(θ,n).绕三个轴向变成绕一个轴向为什么使用4-元数来插值?基于欧拉角的旋转具有轴相关性旋转部分插值(2)4-元数是什么?旋转部分插值(3)旋转部分插值(3)旋转部分插值(4)考察四元数的旋转功能。r可表示为四元数p=(0,r),因此该操作可视为:

因此,将向量r旋转一个

角度(θ,n)相当于利用角度位移的概念,即将它提升到四元数空间,然后表示为单位四元数 (cos(θ/2),sin(θ/2)n)

旋转部分插值(4)考察四元数的旋转功能。r可表示为四元数旋转部分插值(5)对四元数(0,r)执行操作q()q-1

,可将方向参数化为以下四项:cos(θ/2),sin(θ/2)nx,sin(θ/2)ny,sin(θ/2)nz

利用四元数代数操作每个分量旋转部分插值(5)对四元数(0,r)执行操作q()q-1旋转部分插值(6)假设动画师设置了一系列旋转的关键帧序列,那么

每一帧可由单个旋转矩阵决定。这些矩阵序列将被转换到一系列四元数。在关键帧四元数之间进行插值,产生一系列连续的四元数,再将它们转换到旋转矩阵。这些矩阵在应用到物体上。一般的,四元数的使用对动画师来说是透明的。旋转部分插值(6)假设动画师设置了一系列旋转的关键帧序列,那旋转部分插值(7):四元数到旋转矩阵将一个向量P旋转一个四元数q: q(0,P)q-1 q又可表示为: (cos(/2),sin(/2)n)=(s,x,y,z)它等价于下面的旋转矩阵:旋转部分插值(7):四元数到旋转矩阵将一个向量P旋转一个四旋转部分插值(8):旋转矩阵到四元数若旋转矩阵则旋转部分插值(8):旋转矩阵到四元数若旋转矩阵四元数的球面线性插值(1)球面线性插值的公式是:考虑两个二维向量A和B,它们之间的夹角是Ω,其中

向量P与A成θ角度

P是A和B的球面线性插值的结果:P=αA+βB四元数的球面线性插值(1)球面线性插值的公式是:球面线性插值(2)一般地,α,β由下式给出:|P|=1,A·B=cosΩ,A·P=cosθ球面线性插值(2)球面线性插值(3)两个单位四元数q1和q2之间的夹角为Ω: q1·q2=cosΩ它们之间的球面线性插值可将前面的公式推广到四维:(u[0,1])球面线性插值(3)两个单位四元数q1和q2之间的夹角为Ω关键帧骨架的人物动画实例(1)CreateanewScene

SceneNewScene(girl2\girl)

CreateanewSkeleton.

SkeletonNewSkeleton(body)

Skeletonlooptime1000

标准T-pose关键帧骨架的人物动画实例(1)CreateanewSc关键帧骨架的人物动画实例(2)Create14Joints.

JointNewJoint(j0,null,0,0,0)

JointNewJoint(j1,j0,0,22,0)

JointNewJoint(j2,j0,5.3,16.7,0)

JointNewJoint(j3,j2,12.5,15.8,0)

JointNewJoint(j4,j3,22.1,15,0)

JointNewJoint(j5,j0,-5,17,0)

JointNewJoint(j6,j5,-12,16,0)

JointNewJoint(j7,j6,-21.8,15,0)

JointNewJoint(j8,j0,3,-3,0)

JointNewJoint(j9,j8,4.5,-19,0)

JointNewJoint(j10,j9,7.1,-38.2,0)

JointNewJoint(j11,j0,-3,-3,0)

JointNewJoint(j12,j11,-5,-18.80)

JointNewJoint(j13,j13,-8.3,-38.1,0)

SceneSaveScene(sprocket2\sprocket)

FinetuneJointpositions.

关键帧骨架的人物动画实例(2)Create14Joint关键帧骨架的人物动画实例(3)InitVertex-JointBlendingWeights.

ObjectInitWeights()CreatethefirstKeyFrame.

KeyFrameNewKeyFrame(0,0)PoseKeyFrame,andFixVertex-JointBlendingWeightsPass2

关键帧骨架的人物动画实例(3)InitVertex-Joi关键帧骨架的人物动画实例(3)CreatethesecondKeyFrame.

KeyFrameCopyKeyFrame(0,500)CreateremainingKeyFrames.

KeyFrameCopyKeyFrame(0,1000)

KeyFrameNewKeyFrame(0,250)

KeyFrameNewKeyFrame(0,750)关键帧骨架的人物动画实例(3)Createtheseco人物动画中的运动生成(1)三个主要的运动动方式前向动力学逆向动力学运动捕获人物动画中的运动生成(1)三个主要的运动动方式人物动画中的运动生成(2)Jointspace:各个关节点和关节的DOFEnd-effectorspace:endeffector的m-维空间Worldspace:人物场景空间骨架/关节点的位置是各个关节夹角(用户指定,前向动力学)的一个函数用户也可以直接指定骨架的姿势和关节点的位置(逆向动力学)人物动画中的运动生成(2)Jointspace:各个关节点人物动画中的运动生成(3)动画编程人员眼中的前向动力学和逆向动力学问题描述JointspaceθEndeffectorspaceXX=f(θ)前向动力学θ=f-1(X)逆向动力学人物动画中的运动生成(3)动画编程人员眼中的前向动力学和逆向人物动画中的运动生成(4)两个骨架Link的例子:θ1L1L2θ2X(x,y)人物动画中的运动生成(4)两个骨架Link的例子:θ1L1L人物动画中的运动生成(5)IK的解决方案:解析解差分算法优化非线性规划。。。。。。。IK的演示IKdemo人物动画中的运动生成(5)IK的解决方案:人物动画中的运动生成(6)动作捕捉数据驱动前向或者逆向动力学?动作捕捉数据的格式TRCHTRBVHBVAC3D….人物动画中的运动生成(6)动作捕捉数据驱动人物动画中的运动生成(7)文件格式实例骨架定义

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论