games104-动画、物理、粒子系统
动画
概览
一些挑战
- 动作不可预测,如何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