腾讯游戏学院 游戏程序设计第九章(个人总结)——游戏动画

第九章游戏动画 学习打卡

视觉暂留

  • 1824年,马克罗杰首次提出“视觉停留”
  • 视觉停留(视觉暂留)(英文:Presistence of vision),是光对视网膜所产生的视觉,在光停止作用后,仍然保留一段时间的现象
  • 人眼视觉停留时间:0.1-0.4秒(约为1秒播放2.5张或10张图片)

采样

  • 是将信号从连续时间域上的模拟信号转换到离散时间域上的离散信号的过程

帧率(frame per second/fps)

  • 指每秒播放静态画面的个数
  • 动画采样越多、帧率越高,动画效果就越好

不同场景有不同帧率要求:

  • 一般情况下不同厂家的帧率要求

  • 影视动画:24-30fps

  • 游戏动画:30-60fps

  • 虚拟现实:90-120fps

逐帧动画之三渲二

image-20210115231543136

  • 将3D场景下的模型渲染成逐帧序列图片
    • 渲染3D模型比2D模型更考研算力,一个2D模型一般由4-5(较少数量)个三角面形成,而3D模型一般有数百个三角面形成,场景中的3D模型越多,很难维持到让画面流程的帧率
  • 节省美术动画制作成本,降低性能开销,保持较好动画效果

逐帧网格动画

  • 每帧保存人物的一整个3D模型,早期用于节省CPU的性能,后逐渐被淘汰

Morph动画(顶点变形动画)

image-20210115231230934

  • 逐帧网格动画的衍生技术,用于补充骨骼蒙皮动画技术的不足(因为人物表情变化非常细腻,很难通过骨骼进行模拟),每帧只需保存模型变化的顶点,而且是通过目标顶点之间的插值方式进行动画的

关键帧动画之刚性阶层动画

image-20210115231839839

  • 将身体各部分拆分,分别动画,在做动画的时候对各部分进行旋转、平移或缩放处理,适合带有骨架架构的角色,相对于逐帧要绘制的动画来说,工作要小很多

image-20210115232047045

  • 刚性动画运动过程中,本身形状不变化

  • 刚性阶层动画的动画属性:缩放、旋转、位移,简称SQT
    image-20210115232256049image-20210115232316091

  • 角色在关节处都有特定的轴承

  • 优点:制作灵活、美术工作量小、数据量小

  • 缺点:关节处会产生裂缝,只适合于机械或者皮影风格角色

关键帧动画之骨骼蒙皮动画

image-20210115232601872

  • 游戏动画界的主流技术,它在刚性阶层动画基础上,解决了关节裂缝的问题
  • 常见的骨骼蒙皮动画制作工具:3D MAX、Spine(2D)、Maya、DragonBones(2D)

骨骼蒙皮动画与刚性阶层动画的区别

image-20210116110514349
白色是骨架结构

区别

  • 刚性阶层动画是通过身体部位本身组成刚性阶层结构,而骨骼蒙皮动画是通过一个虚拟的骨骼,组成阶层关系
  • 骨骼蒙皮动画的模型,网格是一个整体,没有按身体部位单独拆开
  • 骨骼蒙皮动画,是通过骨骼组成的骨架来驱动模型顶点运动的
  • 骨骼蒙皮动画关节处的顶点收到多根骨骼影响,这也是解决关节裂缝问题的关键
    • 可以通过编辑器调整关节处的顶点,它受不同骨骼影响的权重,使得关节处的顶点运动时,表现出比较平滑自然的效果

骨骼

  • 虚拟概念,实际游戏不渲染,骨骼间位置层级关系和保存SQT(缩放、旋转、位移)数据

T-POSE

  • T-POSE为模型初试姿势,为方便动画设计
    image-20210116111419263

蒙皮

  • 将顶点绑定到骨骼上
  • 把模型的顶点与关联的骨骼绑定在一起

image-20210116111533241

世界空间

  • 游戏世界的坐标系

模型空间

  • 模型制作时的局部坐标系

骨骼空间

  • 以骨骼为原点的坐标系

蒙皮算法的原理

  • 蒙皮计算:通过骨骼动画驱动后,顶点在模型空间下的位置
  • 骨骼对蒙皮顶点的影响,具有阶层式的驱动作用

蒙皮顶点计算

image-20210116112543918

  • 已知的事实:
    • 顶点V初始姿势的位置(模型空间,记为Pm0)
    • 各种姿势下,每根骨骼的SQT数据(骨骼空间,简单记为Mb),M为矩阵,b为骨骼
  • 蒙皮计算目的:求出顶点V在目标姿势下的位置(模型空间,记为Pm1)

image-20210116112830635

  • 由于B0是根骨骼,所以B0在骨骼空间中的矩阵变化就是B0在模型空间中的矩阵变化,Mm0=Mb0

  • B1模型空间矩阵:

    • Mm1=Mb1*Mb0
  • 同理,Bn的模型空间矩阵

    • Mmn=Mbn*Mb(n-1)*…*Mb0
      image-20210116113218296
  • 初始姿势下,V相对骨骼B1位置:Pb0

  • 目标姿势下,V相对骨骼B1位置:Pb1

  • 顶点V跟随骨骼B运动,所以可以得出Pb0=Pb1

  • 记V相对B1的位置为Pb

Pm1求解

image-20210116124636094

  • 假设初始姿势下,B1模型空间矩阵:M1i,可得:
    • Pm0=Pb*M1i
    • Pb=Pm0*M1i(逆)
  • 假设目标姿势下,B1模型空间矩阵为M1t,可得:
    • Pm1=Pb*M1t=Pm0*M1i(逆)*M1t
  • 对于骨骼Bn:
    • Pmn=Pm0*Mni(逆)*Mnt
  • 其中:
    • Mni(逆)*Mnt称为蒙皮矩阵,记为Mns
  • 顶点V在初始模型空间下的位置PMi=顶点在骨骼B1下的骨骼空间位置Pb*b1在初始模型空间下的矩阵变换M1i,从而得出Pb=PMi*M1i的逆

结论

  • 顶点在目标姿势下的模型空间位置=顶点V初始之下的模型空间位置*它对应的蒙皮矩阵Mns

顶点关联多根骨骼的情形

image-20210116144506200

假设V关联

动画混合

  • 动画混合:将两个或多个动画片段的当前骨架姿势以一定的方式通过程序进行实时混合运算
  • 混合运算:可能是加法(叠加)混合或者减法(区别)混合(通过SQT混合)
    • 骨骼之间的混合不能用矩阵混合,因为矩阵,无法做动画属性的线性运算
  • 混合方式:可以分为全骨架姿势混合以及部分骨架姿势混合

动画处理流水线

  • 游戏一帧内,动画经历的处理步骤:

image-20210116145907812

动画处理流水线——后处理

  • 动画后处理,泛指动画片段混合以外的骨架姿势修改。包含:IK处理(通过主骨骼确定副骨骼位置的算法)、物理效果(动画混合物理打击的效果)
  • 图三:角色死亡后应用了ragdoll(布娃娃系统)混合物理的效果

image-20210116150217590

VR游戏

  • VR角色全身动画的难点在于,VR角色全身动画都是由玩家来操作的,自由度很高,我们需要对角色全身的骨骼链,进行详细的拆解,然后再分别应用各种IK技术,同时还要保证,人物角色的骨骼链能够符合人体运动学规律,否则,会导致违反常理的运动形态
  • 《头号玩家》没有考虑穿戴设备的面部表情捕捉问题,网络同步问题和安全问题

image-20210116151341905

  • 精细化手指控制,2017年在GDC上的游戏Lone Echo(孤独回声),尝试解决手指在触碰不规则物体时,让手指自动适应物体的形状

    • 算法原理是:通过对手指附近的碰撞物体进行射线检测,然后通过IK的方式改变手指骨骼姿势,只是表现技巧,但没有实现VR手指触碰物体时的真实体验
  • 需要专门的体感设备,当手指触碰物体时,体感设备要对手指进行阻挡的作用,才能让手指由较为真实的触碰体验

  • 《Siren》——Epic Games & Tencent,通过实时捕捉人物的面部表情,以及身体的动作,然后应用到游戏虚拟的角色身上,然后进行实时渲染的技术

    • 运用到动画重定位技术。(通过不同人物的骨架映射到系统标准骨架上的过程,它使得不同骨架的人物可以共用动画数据,以及动画状态机的动画逻辑)

猜你喜欢

转载自blog.csdn.net/lr_shadow/article/details/112709823