动画

概览


一些挑战

  • 动作不可预测,如何realtime、如何对适配复杂的环境交互
  • 表情细节
  • 不同部位的动作如何融合

3D动画


DoF:Degree of freedom,自由度,刚体6个自由度,三维中的平移和旋转 3+3

几种实现方式:

  • 早期刚体动画:方块,连接处不自然
  • 顶点动画:可模拟布料、流体
  • Morph Animation(顶点影响权重,插值):一般用于面部动作
  • Skinned Animation(蒙皮动画):目前常用
  • 基于物理:布娃娃Ragdoll、布料、流体、反向动力IK,有定点如何自然运动

蒙皮动画


mesh、skeleton(分为Joint、Bone)、刷蒙皮(顶点绑定骨骼)、骨骼动画

骨骼可以拓展至衣服、外饰、面部,武器(可以插在手部joint,插槽的概念),但最好定义好基础骨骼

Root joint,一般在模型最底层的中间位置,方便高度等位置表达

数学基础-旋转


三维空间中的旋转可以通过三个轴的旋转叠加出来,欧拉角,一般用于编辑物体,但是

  • 当顺序不同时结果可能不同
  • 难插值
  • 难用于定轴旋转

四元数!

引入,复平面下的角度叠加可以用复数的相乘表示

群论定义在三维空间下的计算

定义了三个虚部 i、j、k,Q = a+b*i+c*j+d*k

将旋转优化为直接的矩阵计算

动画压缩


缩放、等不旋转等骨骼直接不存

利用关键帧插值,Catmull曲线,非常光滑插值很不错,四元数浮点数定点压缩

物理系统

要长脑子了,由于都是物理细节,所以决定跳过!

Actor Shape


  • 球体:球体、小型物体

  • 胶囊体:人物

  • 方块:

  • 凸包:

  • 三角面片:静态物体

  • Height Field:用于地形

物理材质


区别于PBR的光学特性,物理材质表示的是摩擦力、弹性等等

碰撞检测


AABB初筛,选出可能碰撞的物体,再细选BVH或sort and sweep(轴排序)

Minkowki Sum:太抽象了,大概是集合上定义了一个域,结果就是两个碰撞凸包形体的Minkowki和形成的多面体必过原点

碰撞处理


普通处理直接给力,容易起飞

拉格朗日约束,还是很抽象,通过一个个小冲量不断叠加求拉格朗日约束得到合适的反冲力

模拟的不稳定


不同显卡、不同检测条件,两台电脑对同样的输入模拟不同

角色控制


一个反物理系统

一般用胶囊形状,楼梯、斜坡、各种姿态碰撞盒的表示、和周围物体如何交互、摄像机位置等等都需要处理

布娃娃系统


利用关键骨骼挂ragdoll,但要设计正常的joint的约束,一般会物理效果加ragdoll一起用

布料


  • 利用骨骼,移动端常用

  • ragdoll,动力学模拟

  • mesh-based,物理解算,弹簧质点模型

    自穿插问题

粒子系统

渲染


透明物渲染问题,排序问题

声音


声音的采样、编码、压缩

声学渲染

多普勒效应模拟

空间感实现

回声实现

常用中间件:fmod、wwise