avatar

Ycyofmine’s Blog

云鸮雨霁

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
首页 GAMES104 08.游戏引擎的动画技术基础(上)
文章

GAMES104 08.游戏引擎的动画技术基础(上)

发表于 2024/11/01
作者 Ycyofmine
5 分钟阅读

靠,被专周硬控一周,不过好在大概知道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

可以从矩阵运算性质得知,旋转顺序不同,也就是矩阵乘法运算顺序不同,会导致结果不同。

欧拉角虽然表示方便,但是有四个缺点。

  • 万向结

    Y轴旋转90度后,X、Z同轴,特征为旋转XZ轴,产生的结果都是围绕Z轴。

    原图

    变成

    y轴旋转90度后

    在数学上的解释体现为:

  • 难以插值

  • 对于不沿着xyz轴旋转的情况,非常难以处理。

Quaternion(四元数)

$i * j = k$ 在几何上就是ij做叉乘,得出来的向量是k

  • Conjugate(共轭)

    如果四元数是单位的,那他的共轭就是他的逆。

    虚部都带上负号则是共轭数。

  • Inverse(逆) 代表着完全相反的操作。

Euler Angle to Quaternion

得益于四元数,我们现在同时旋转两个角直接用四元数相乘即可。

Given Axis Rotation by Quaternion

GAMES104
games104
本文由作者按照 CC BY 4.0 进行授权
分享

最近更新

  • ROS2中并发连接蓝牙手柄排错过程
  • 自行编译ros2-humble-plotjuggler
  • Ubuntu 22.04上蓝牙无法打开——(MT7922网卡为例)
  • Isaac sim遥操作控制
  • RPC:原理、组成与局限性
外部链接
  • codetime
  •  此博客的 Github 仓库

文章内容

相关文章

2024/11/12

GAMES104 09.高级动画技术:动画树、IK和表情动画

动画混合 Math of Blending: LERP Calculate Blend Weight Align Blend Timeline 把两个循环动画时间归一化,要求动画师对齐两组动画中的关键点。 如果align或者插值没做好,容易出现滑步。 混合空间 1D Blend Space 混合方向,但是没有混合运动速度。 2D Blend S...

2024/11/05

GAMES104 08.游戏引擎的动画技术基础(下)

蒙皮动画的实现:关节与蒙皮 Joint Pose Affine Matrix Orientation 大部分骨骼动画是旋转。 Position Pelvis、特殊的机械结构、facial joints会发生位置的变化。 Scale 对面部进行修改。 Loca...

2024/10/21

GAMES104 07.游戏中渲染管线、后处理和其他的一切

Ambient Occulsion 在每个可看见的点处,它的可看见的正半球面,只有部分可以染上环境光,另一部分则被其他物体遮挡,主要体现在阴影的真实程度上。 Precomputer AO 提前烘培出的一张AO纹理 仅适用于静态对象 Screen Space Ambient Occlusion(SSAO) 从screen打出一条射线,击中一个点p,在那个点生成一个球,...

C++ Primer(正在更新)

GAMES104 08.游戏引擎的动画技术基础(下)

© 2025 Ycyofmine. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

games104 UE c++ robot OS 装机 计网 essay

发现新版本的内容。