3D游戏图形计算机动画技术

2020-03-01 356浏览

  • 1.游戏中的计算机动画技术 1
  • 2.教学内容和目标 动画的基本概念和方法 动画场景中的碰撞检测 运动的指定方法 关键帧动画 基于动作捕捉技术的动画 Ogre 动画技术 2
  • 3.计算机动画简介( 1/3 ) 动画的定义: ◦ 就是一组连续的图像序列。当按一定的速 率显示的时候,能传递一种运动的感觉 动画的技术要求: ◦ 每一幅图像或者每一动画帧,都必须有机 地、无缝地和其他的图像融合在一起,这 样才能随着时间的变化,产生平滑的、连 续的运动 3
  • 4.计算机动画简介( 2/3 ) 传统的动画制作方法 ◦ 将人物运动的所有帧序列手工地绘制出来 计算机在动画制作中的作用 ◦ 自动产生某些中间帧序列 ◦ 模仿手工动画,将多层绘制的场景由计算机来进 行合成 制作方式的改变 ◦ 从 “绘制出每一帧” 到“使用计算机工具来制定图 像序列如何变化” 4
  • 5.计算机动画简介( 3/3 ) 动画的分类: ◦ 二维动画  二维动画集中于图像的处理和操作,如  sprite-based animation, blending or morphing between images, embedding graphical objects in video footages, or creating abstract patterns from mathematical equations ◦ 三维动画  三维虚拟场景、物体和动画人物的建模以及他们之间 的运动关系指定和绘制等  建模:其任务是描述场景中的每个元素,并将它们设置在恰当 的时刻和位置。  运动关系的指定 :表明三维动画人物或者物体如何在三维场 景中进行运动。  绘制:把三维场景和运动关系的描述转化为一个图像序列 5
  • 6.游戏中的两维动画( 1 ) 展示形式 ◦ 直接播放方式  游戏的片头或者篇尾,例如 AVI 或者 MPEG ◦ 连连连连方 式  通过连续贴图成像技术来产生动画效果 编程关键 ◦ 定时器  创建一个定时器  利用回调函数来显示动画  删除定时器 6
  • 7.游戏中的两维动画( 2 ) 镂空动画( sprite animation ) ◦ 一幅背景图 ◦ 一组蒙版图 ◦ 人物的连续显示方式  DOUBLE-BUFFER  不要在窗口中直接贴图, 避免闪烁  建立一个内存 DC ,然后 把所有的贴图动作都在这 个 DC 上进行,最后把结 果显示到操作窗口中。 7
  • 8.游戏中的两维动画( 3 ) 对动画序列中的每一帧 ◦ Load 背景图 ◦ 确定 sprite 绘画的位置 ◦ 将某一蒙版图与背景图作 AND 运算 ◦ 将对应的人物图与背景图作 OR 运算 ◦ 更新 sprite 绘画的位置 8
  • 9.游戏中的两维动画( 4 ) 半透明的动画效果 ◦ 将要贴上人物的背景图部分取出,放入 buffer ◦ 在 buffer 中的背景图上, AND 蒙版图, OR 人物图 ◦ 在 buffer 中的位图乘上透明度 t ◦ 再次取出相应的背景图,作半透明计算, 并生成半透明图片 ◦ 直接将半透明图贴在背景图中 9
  • 10.游戏中的两维动画( 5 ) “ 终点返回起点” 10
  • 11.游戏中的三维动画概述( 1 ) 三种主要的运动方式 ◦ 场景内容不变,视点在移动  漫游等 ◦ 场景内容在动态改变,视点不变  人物表演连连 画等 连 ◦ 混合方式  场景内容和视点都在运动 11
  • 12.游戏中的三维动画概述( 2 ) 最简单的情形 ◦ 使用标准的绘制程序,仅移动物体或视点 . 技术核心 ◦ 各个运动物体的平移和旋转量确定。 关键问题 ◦ 如何指定和控制物体在场景中的运动 . ◦ 相机或者物体移动,或者两者同时移动 . 12
  • 13.游戏中的三维动画概述( 3 ) 相机的任意外部参数都可以形成动画。这类 动画一般在第一人称游戏中最常用。 用户可以控制相机位置(三个自由度)和相 机的朝向(两个自由度) . ◦ 在两个相邻的关键点上需要插值相机参数,在 此过程中最重要的是保持相机的 up 向量。 此外,用户也可以控制视点的运动,而视线 则始终跟踪一个目标点。 ◦ 该目标点可以是静止的,也可以移动。 13
  • 14.游戏中的三维动画概述( 4 ) 所涉及的关键技术 ◦ 漫游  碰撞检测( collision detection ) ◦ 人物动画  骨架驱动的动画  运动的生成  面部表情 ◦ 粒子系统 、 14
  • 15.基于 BSP 树的 CD ( 1 ) 碰撞检测 (CD----Collision Detection) 用于确定两个物体是否相 交以及在何处相交 . 单纯确定是否相交 又叫做相交测试 . ◦ 检测两个运动物体最初接触的时刻 . ◦ 检测两个运动物体在何处接触 . 物体相交的类型 ◦ 线与物体求交 , ◦ 平面与物体求交 , ◦ 物体与物体求交 . : 15
  • 16.基于 BSP 树的 CD ( 2 ) 游戏中需要碰撞检测的场合有: ◦ 在大型地貌系统中需要正确驱动交通工具 ; ◦ 监测轨道中行驶的汽车并检测两辆车是否 碰撞; ◦ 确定导弹是否击中目标 , ◦ 弹性物体在物体之间的弹跳 ◦ 两个人物交战时的状态查询 ◦ 决定是否某个物体可以通过一个通道 16
  • 17.基于 BSP 树的 CD ( 3 ) 碰撞检测采取两步法 ◦ 首先剔除明显不相交的物体  包围体方法以及其他空间剖分策略 ◦ 检测可能相交的物体之间的情况并在给 定的精度下求得相交点 . 17
  • 18.基于 BSP 树的 CD ( 4 ) BSP 树是游戏中组织场景的最常见方式之 一; BSP 的叶结点可分为 ◦ 虚节点 ◦ 实节点 A C C B P D D E F A B 18
  • 19.基于 BSP 树的 CD ( 5 )  检测一个点的运动路径是否与 BSP 树中的实节点相交 ◦ 检测与剖分平面的交点  如何检测一个动画人物与场景的交点 ◦ Bounding box/sphere ◦ “ 膨胀” BSP 树 C P D A P D A 19
  • 20.基于 BSP 树的 CD ( 6)  其他的包围盒的方法 ◦ AABBs(Axis-aligned bounding boxes, 与坐标轴 平行的包围长方体 ), 球 轴平行 AABB  一对 AABB 如果有交当且仅 当它们在某些个轴上的投影有 相交的部分。  AABB 方法简单,当物体旋 转时,或者重新计算包围体, 或者应用一个新的包围体。 ◦ OBBs(Oriented bounding boxes, 旋转后的最贴近物体 的长方体 ) 有向 OBB 离散多边形 20
  • 21.基于 BSP 树的 CD ( 7)  层次包围盒 ◦ 整个物体可以表示为一个 OBB 层次树。树的根即整个物体的 OBB ,叶节点包含一个或多个多边形 . ◦ 如果两个物体的根节点的 OBB 相交,那么碰撞测试将从上往下遍 历下去,直到找到相交的叶节点。  因此, OBB 树越贴近物体,处理碰撞查询所需要的遍历次数越少。 21
  • 22.人物动画概述( 1 ) 从绘制流水线的角度看 ◦ 在某个瞬间(某一帧),只要知道此时的 物体和场景的空间位置的信息,就可以绘 制出画面 关键:运动指定 ◦ 一帧一帧指定:每秒 25 到 30 帧,。。。 人物动画的难点: ◦ 连 画 人物的身体的各部分的和 连 连 的、自然 连连连 的运动。 22
  • 23.人物动画概述( 2 ) 人的视觉系统(人类动画师)并不明 显区分建模信息、运动信息和视觉效果 信息 基于骨架的人物动画 ◦ 抽象出骨架:建模和运动分开,在绘制时 进行骨架和模型的绑定。  方便运动的指定  模型和运动都可以重用 23
  • 24.人物动画概述( 3 ) 什么是关节 ? ◦ 它由一系列刚体、它们之间的连接关系组 成,这使得物体的不同部分可以相关联地 运动。 整个物体的运动受全局的连接关系限 制 ◦ 整个结构由一条联结关系组成,某个关节 的运动造成它的邻接关节运动 ◦ 并且限制了连 接 连连连连 的运 连连连 方式,如人 连连连连连 的骨架关节无法做完全旋转。 24
  • 25.动作( motion )获取的三种主 要方式( 1/3 ) 关键帧:指定每一关键时刻的物体的 运动位置和方向 ◦ 优点:简单,易理解 ◦ 缺点:  它要求动画师经验丰富,并且耗时  难以模仿动作的某些细微特征或者特定的动作 25
  • 26.动作获取的三种主要方式( 2/ 3) 动态(过程)模拟 ( 物理建模 ) ◦ 根据物理规律和指定的目标,使用算法或者过程 来模拟产生运动或者动作序列 优点: ◦ 很容易根据运动的要求配置相应的参数,初学者 也能产生高质量的动画序列 缺点: ◦ 对简单的运动比较有效 ◦ 没有系统性的方法来描述一个复杂的运动,或者 一个具有细微特性的运动 26
  • 27.动作获取的三种主要方式( 3/ 3)  基于动作捕捉设备 ◦ 将表演者的现场表演的运动数据实时纪录 下来,并映射到计算机的动画人物中  优点: ◦ 实时,直观,可视  运动数据可以被实时地、直观地可视化。  演员、导演和动画师可以在一起工作,来获 取所期望的动作,便于交流, ◦ 高质量动作数据  可以产生特定人物的特定运动数据,这是手 工指定所无法比拟的  产生的运动数据比较真实、自然,并可表现 出表演者的人物个性。很多细微的运动元素 已经自然地体现在捕捉下来的数据中,不需 要通过领域知识来添加。 27
  • 28.Mocap 设备( 1/2 ) 浙江大学计算机学 院动作捕捉实验室 ◦ 曹光彪东楼 313-314 生产厂家: ◦ Motion analysis 公 司  如果只用于游戏和动画 , Vicon 更佳 28
  • 29.mocap 设备( 2/2 ) 性能 ◦ 10Hawk 摄像头 ◦ 每秒 200 帧 ◦ 精度小于 0.5mm 29
  • 30.动作数据到 3D 人物模型的映射 照片的版权归相关的公司或者团体所有 30
  • 31.关键帧技术  关键帧系统的应用背景 ◦ 在电影和动画界,这是一个最常用的技 术 ◦ 为了节省动画片制作中的巨大工作量, 动画公司采用层次的系统结构,即高级 动画师首先手绘一段关键帧构成的动画 序列。 ◦ 然后这些序列由动画师 (inbetweener) 完成帧间动画的绘制。最后,由动画师 (inker) 将连 些序列着色。 连连连连连连 31
  • 32.关键帧技术 ( 续 )  扩充到三维动画 ◦ 三维空间中的物体也可以由关键帧定义 ◦ 并由计算机完成中连 连 的生成。 连连连连  相比手绘动画,在计算机动画中需要 更多的关键帧以获得完美的效果。 32
  • 33.关键帧技术 ( 续 )  以一个弹性球为例 . 下图展示了三个关键 帧。 2 1 3 33
  • 34.指定关键帧 指定骨架关键帧有多种方法,比如: ◦ 最简单的情形:通过空间中的一系列点确 定 — 关键帧点 定义一个物体所经过的点序列,并将这些 点列用三次曲连 连 连 合生成路径。 连连连连连 34
  • 35.指定关键帧信息  比较好的方法 ◦ 允许动画师指定更多的关键帧之间的运动信 息  例如直接定义一条运动曲线 . ◦ 此外,可以定义运动路径上的速度变换函数 .  一般地,为了正确控制运动,必须显式地 定义 ◦ 位置变换与时间的函数关系 ◦ 指定路径上的动态行为 . 35
  • 36.指定关键帧信息  参数 ◦ ◦ ◦ ◦ ◦ ◦  位置 关节角 形状-变形物体 材质 相机运动 光照 如果我们仅考虑位置,那么我们可以应用一个 与时间相关的 4x4 位置矩阵于场景物体。 36
  • 37.关键帧插值  a11 (t ) a12 (t ) a13 (t ) t x (t )   a (t ) a (t ) a (t ) t (t ) 22 23 y  M (t )   21  a31 (t ) a32 (t ) a33 (t ) t z (t )    0 0 0 1   ◦ 连 了 使物体运 连连连 真连 连 ,矩 连连连 的二 连连连连 数必 连连 续 ◦ 矩阵中的位置部分的三个分量可以独立插值, 但旋转部分不行。 37
  • 38.关键帧控制器 VoidKeyFrameController::Update(floattime) { InterpolateTranslation(time, localTranslate); InterpolateRotation(time, localRotate) }  每个插值进程以某一时刻为准,找到与之最 近的两个关键帧时刻点。这两个关键帧用下 面描述的方法进行插值。 38
  • 39.旋转部分插值( 1 )  基本思想 : ◦ 用四元数表示旋转 ◦ 将旋转矩阵变换到四元数空间,然后在 四元数空间进行插值 ◦ 插值后的四元数变回到三维空间并应用 到物体上。  四元数 ◦ 可视作一个类似矩阵概念的算子,它能 将一个向量变到另外一个,但是四元数 的选择是唯一的 . 39
  • 40.旋转部分插值( 2 ) 4- 元数是什么? ◦ 将旋转定义为绕轴 n 旋转角度 θ 的一对关 系: R(θ, n).  绕三个轴向变成绕一个轴向 为什么使用 4- 元数来插值? ◦ 基于欧拉角的旋转具有轴相关性 40
  • 41.旋转部分插值( 3 ) r (n  r )n V θ r r  (n  r )n R⊥ r⊥ θ V n r n r Rr (cos )r  (sin  )V r ⊥ V R Rr r n n Rr  Rr  Rr (n  r )n  (cos )(r  (n  r )n)  (sin  )(n r ) (cos )r  (1  cos  )(n  r )n  (sin  )(n r ) 41
  • 42.旋转部分插值( 4 )  考察四元数的旋转功能。 r 可表示为四 元数 p=(0,r) ,因此该操作可视为: q (cos  , sin  n) where n 1 R p ( p ) qpq  1 (0, r cos 2  (1  cos 2 )n(n  r )  sin 2 (n r ))  因此,将向量 r 旋转一个 角度 (θ,n) 相 当于利用角度位移的概念,即将它提升 到四元数空间,然后表示为单位四元数 (cos (θ/2), sin(θ/2)n) 42
  • 43.旋转部分插值( 5 )  对四元数 (0, r) 执行操作 q()q-1 ,可 将方向参数化为以下四项: cos (θ/2), sin(θ/2) nx, sin(θ/2) ny, sin(θ/2) nz  利用四元数代数操作每个分量 43
  • 44.旋转部分插值( 6 )  假设动画师设置了一系列旋转的关键 连 序 列,那么 ◦ 每一帧可由单个旋转矩阵决定。这些矩 阵序列将被转换到一系列四元数。 ◦ 在关键帧四元数之间进行插值,产生一 系列连续的四元数,再将它们转换到旋 转矩阵。  这些矩阵在应用到物体上。 ◦ 一般的,四元数的使用对动画师来说是 透明的。 44
  • 45.旋转部分插值( 7 ) : 四元数到旋 转矩阵   将一个向量 P 旋连 一个四元数 连连连连连q:q(0, P)q-1 q 又可表示为 : (cos(/2), sin (/2)n)=(s, x,y,z) 它等价于下面的旋转矩阵: 1  2( y 2  z 2 ) 2 xy  2 sz 2sy  2 xz  2 2 2 xy  2 sz 1  2 ( x  z )  2sx  2 yz  M    2 sy  2 xz 2sx  2 yz 1  2( x 2  y 2 )  0 0 0  0  0 0  1 45
  • 46.旋转部分插值( 8 ) : 旋转矩阵到 四元数  若旋转矩阵  M 00 M M   10  M 20   0  则 M 01 M 02 M 11 M 21 M 12 M 22 0 0 0 0 0  1 q ( s , x , y , z ) where 1 s  M 00  M 11  M 22  1 2 M  M 12 x  21 4s M  M 20 y  02 4s M  M 01 z  10 4s 46
  • 47.四元数的球面线性插值( 1 )  球面线性插值的公式是 : ◦ 考虑两个二维向量 A 和 B ,它们之间 的夹角是 Ω ,其中 向量 P 与 A 成 θ 角 度 ◦ P 是 A 和 B 的球面线性插值的结果 : A  P=αA+βB Θ P Ω B 47
  • 48.球面线性插值 (2) 一般地, α, β 由下式给出 : P =1, A·B=cosΩ, A·P=cosθ sin(   ) sin  P A B sin  sin  A Θ P Ω B 48
  • 49.球面线性插值 (3) 两个单位四元数 q1 和 q2 之间的夹角 为 Ω: q1·q2=cosΩ  它们之间的球面线性插值可将前面的公式 推广到四维: ( u[0,1])  sin(1 - u) sin u slerp(q1, q2, u) q 1  q2 sin sin  49
  • 50.MD2 关键帧动画技术 是 Quake2 中使用的模型文件格 式,由于其比较简单,容易实现,所以 应用很广,是一种经典的动画模型格式。 该文件格式由 2 部分组成:一部分是 文件头,包含了文件 ID 号、版本号和 有关模型的各种数据的起始地址等;另 一部分是文件的主体,包含了有关模型 的各种数据,如顶点数据、纹理数据、 法向量数据等。 MD2 50
  • 51.MD2 关键帧动画技术 MD2 是基于关键帧动画的,关键帧插值的数 学公式为: p(t) = p(0) + t ( p1 - p0 ) 其中: t — 当前时间。 0 表示开始, 1 表示结束; p(t) — 时间 t 时方程的值; p0 — 起始位置; p1 — 结束位置。 51
  • 52.MD2 关键帧动画技术  MD2 共有 16 个关键帧:start:0end:39name:standstart:40end:45name:runstart:46end:53name:attackstart:54end:65name:painstart:66end:71name:jumpstart:72end:83name:flipstart:84end:94name:salutestart:95end:111name:tauntstart:112end:122name:wavestart:123end:134name:pointstart:135end:153name:crstndstart:154end:159name:crwalkstart:160end:168name:crattackstart:169end:172name:crpainstart:173end:177name:crdeathstart:178end:197name:death一个模型有 16 个动作,每个动作有很多帧组成,每帧由很多 三角形连 成一个网 连连 连连 连连 ,每个三角形由三个 连 连连 连连连 连连连 连 点连 连 成,每个 连连 连连 连 点 由 x,y,z 三个坐标组成 52
  • 53.MD2 关键帧动画技术 Demo 53
  • 54.骨骼动画基本原理  骨骼动画是目前最流行也是最复杂的角 色动画,包含骨骼和动画两个重要元素  骨骼动画思想的起源很简单,自然界中 的大多数动物都拥有一套骨骼,身体的 皮毛血肉都依附于骨骼,当骨骼开始运 动时,依附于对应骨骼的皮毛血肉都随 骨骼一起运动。 54
  • 55.骨骼动画基本原理  在三维图形编程领域,角色的躯体是由 网格模型来表示的,网格模型通常由大 量三角形图元组成,而三角形又是由定 点组成的。  为了模仿现实世界中角色自身的动作, 就需要为角色网格模型添加一套骨骼, 同时需要确定哪些顶点依附于哪块骨骼 ,这样当骨骼运动时就能牵引依附骨骼 的定点一起运动,这就是骨骼动画的基 本原理 55
  • 56.骨骼动画基本原理 为了让模型的每一个顶点能随着骨骼 中的一个或者多个骨头的运动而产生动 画,我们必须把顶点“绑定”到骨骼上面。 这个工作一般来说都是交给 3D 模型工 具来完成(比如 Maya 或者 3D Ma x )。其中包括分配顶点到特定的骨头 上以及设置相应的权重,这里的权重指 的是骨头对指定顶点的影响效果。 56
  • 57.骨骼动画基本原理 骨骼动画模型的骨骼是以树状层次结 构组织起来的,整个骨骼结构中有一块 根骨骼,其他的骨骼都直接或连 接 连连接 连 到根骨骼上,形成角色模型的整个骨骼 框架。 57
  • 58.骨骼动画基本原理  一般每块骨骼都带有两个矩阵,一个是 初始变换矩阵 (LTM) ,表示骨骼的初 始位置,另一个是组合变换矩阵 (CTM) ,用于对骨骼进行各种变换, 从而实现角色动画。  在每次渲染角色模型前,需要更新整个 骨骼层次结构,组合每个连续的变换, 将上连 骨骼的运 连 连连 连连连 连连 到下 连连连 骨骼其原 连连 连 理 : 子骨骼的 CTM= 子骨骼的 LTM* 父骨骼的 CTM 58
  • 59.骨骼动画基本原理 骨骼的组合变换矩阵是随着动画的播放不断 变化的,而它的初始变换矩阵一般是不改变 的,正是所有骨骼的这些矩阵相互作用才牵 引着定点的变化,从而实现了骨骼动画。 一次变换只能将骨骼变换到一个特定位置, 要形成连续的动画就需要一帧一帧地连续改 变骨骼的位置,每次改变骨骼的位置都需要 一个骨骼变换矩阵,在网格模型中不可能保 存任意时刻骨骼的变换矩阵。 59
  • 60.骨骼动画基本原理 通常的解决办法是:保存关键时间点 骨骼的变换矩阵 ( 即关键帧 ) ,然后在 播放角色动画时,根据播放时间进行插 值得到任意时刻骨骼的变换矩阵,从而 形成连续的角色动画。 例如:设在 s1 时刻骨骼变化矩阵 M1, 在 s2 时刻骨骼变化矩阵 M2, 在 s1 和 s2 之间的任意时刻 s, 其骨骼变化矩阵 Ms=(1-w)*M1+w*M2,w 是权值 60
  • 61.蒙皮骨骼动画 纯粹的骨骼动画在运动时很容易出现裂 缝尤其在一些结合部位。 蒙皮骨骼动画可以解决这一问题。对于 蒙皮网格模型,渲染引擎首先会根据骨 骼权重和骨骼矩阵对顶点数据 ( 包括定 点位置和顶点法向 ) 进行混合,然后进 行渲染。 权重和矩阵都在建模时完成,程序员要 做的就是加载这些信息,并将其应用到 网格模型各部分的变换以及最终渲染。 61
  • 62.人物动画中的运动生成( 1 )  三个主要的运动动方式 ◦ 前向动力学 ◦ 逆向动力学 ◦ 运动捕获 62
  • 63.人物动画中的运动生成( 2 ) Joint space :各个关节点和关节的 DOF End-effectorspace:'>space: