GAMES104 08.游戏引擎的动画技术基础(上)
靠,被专周硬控一周,不过好在大概知道C++项目整个流程是什么样的了,也算是有所收获。
2D游戏动画技术
Sprite animation
多张图片顺序播放。
Live 2D
将图片拆分成多个图源,在图源上打上控制点,通过移动控制点来达到图片变换的效果。
3D游戏动画技术
DoF(Degrees of Freedom)
六方向自由度代表可以按 xyz
进行平移或旋转。
Rigid Hierarchical Animation
就是皮影戏的组成方式。
关节处会出现穿模。
Per-vertex Animation
顶点动画是通过保存每个顶点每帧的状态来实现的。
Morph Target Animation
通过几个 Key Poses
,然后进行插值,算出新的表情。
3D Skined Animation(蒙皮动画)
每个顶点受到多个骨骼的影响。
2D Skined Animation
Physics-based Animation
Ragdoll
布娃娃系统:人物死后与场景的交互。
衣料模拟
Inverse Kinematics(反向动力学) 角色运动怎么做才最自然。
Animation Content Creation
- 在编辑器里手动设置动画
- 动作捕捉
蒙皮动画的实现
How to Animate a Mesh
五步走:做网格 ->
做骨头 ->
蒙皮 ->
设定姿势 ->
动画
Different Spaces
- World Space(世界空间)
- Model Space(模型空间)
- Local Space(关节空间)
三个坐标系,互相变换不是简单的平移,坐标系之间转换是可能需要旋转的。
把Local坐标系从根节点,一路积分上来,才能算出model space,然后考虑模型的位置和旋转,才能再转换成世界坐标系,然后才能被渲染
Skeleton for Creature
人的骨骼,root一般在胯部。
Joint vs. Bone
我们直接存储关节的数据,骨骼是抽象的,不被直接存储。这么做是因为关节是刚体,不会被扭曲。
Humaniod Skeleton in Real Game
人物的骨骼不仅仅是躯干骨骼,也有可能是面部细密的骨骼、武器、斗篷。
Joins for Game Play
武器绑定在手上的武器“关节”上。
Root Joint
定义一个关节作为 Root Joint
,改变人物速度、位置等物理属性就通过这个点。
Pelvis joint
是 root joint
的第一个 child joint
。
Bind Animation for Objects
Object在逻辑上合体,对于游戏物体来说是各自的Mount被绑定到一起,不仅是位置重合,是坐标系也进行绑定。
Bind Pose T-pose vs. A-pose
T-pose角色的肩膀部分其实是挤压的,所以目前一般就会给A-pose,这样肩胛处精度会高一点。
Skeleton Pose
用关节来表达骨骼姿势的时候,不仅是六个自由度,还多了放缩的三个自由度,变成九个自由度。
3D旋转的数学原理
2D Orientation Math
3D Orientation Math
Order Dependence on Euler Angle
可以从矩阵运算性质得知,旋转顺序不同,也就是矩阵乘法运算顺序不同,会导致结果不同。
欧拉角虽然表示方便,但是有四个缺点。
Quaternion(四元数)
$i * j = k$ 在几何上就是ij做叉乘,得出来的向量是k
Conjugate(共轭)
如果四元数是单位的,那他的共轭就是他的逆。
虚部都带上负号则是共轭数。
Inverse(逆) 代表着完全相反的操作。