avatar

Ycyofmine’s Blog

云鸮雨霁

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
首页 GAMES104 09.高级动画技术:动画树、IK和表情动画
文章

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

发表于 2024/11/12
作者 Ycyofmine
7 分钟阅读

动画混合

Math of Blending: LERP

Calculate Blend Weight

  • Align Blend Timeline 把两个循环动画时间归一化,要求动画师对齐两组动画中的关键点。

    如果align或者插值没做好,容易出现滑步。

混合空间

1D Blend Space

混合方向,但是没有混合运动速度。

2D Blend Space

在真实世界中,低于或高于某个阈值后

如果与非常多的cilps进行blend,花费会非常多。

所以我们使用 delaunay(三角化) ,选择临近的三个动画进行插值。

Skeleton Masked Bleding

有些动作只会影响上半身或者下半身,通过 mask(遮罩) 实现。

Additive Blending

我们只存下动画的变化量,而不是绝对量,这样就可以直接叠加上其他效果。

容易出现反常情况。

动作状态机

Cross Fades

效果是动图,请去视频里看🔗

  • no cross fade
  • smooth transition
  • frozen transition

Curve

这下剪视频的时候知道效果都长啥样了

多层次状态机

角色身体的不同部分由不同的层次进行控制。

动画混合树

basic 是表达式树。

是多层次状态机的超集。

LERP

  • 二叉树只有01两种权重
  • 多重输入的话,权重需要手动输入

Blend Tree Control Parameters

  1. 节点搜索(Node Search):提供一种方式,让高层代码可以在树中找到混合节点(blend nodes)。

  2. 命名变量(Named Variable):允许为每个控制参数赋予名称。控制代码可以通过名称查找控制参数并调整其值。

  3. 控制结构(Control Structure):一种简单的数据结构,包含整个角色的所有控制参数。Blend Tree 中的节点与特定的控制参数相连接。

Inverse Kinematics(IK技术)

  • Forward Kinematics正向运动学: 是在给定所有关节角度的情况下计算链接结构(如一节人体的关节)的末端的空间位置的过程。这个过程比较简单,且是具有唯一解的

  • Inverse Kinematics反向运动学: 它是在给定末端的空间位置的前提下,求解关节需要成多少角度。 这个过程就较为困难,一般情况下,逆运动学问题没有解析解,而是会有很多或无限多个解(比如确定一个手的位置,然后反向去算其他joint的位置)

Two Bones IK

已知大小腿长度、脚到胯的长度,就可以确定多个三角形,此时引入物体的前进向量,就可以得出唯一三角形。

Mutil-Joint IK

多 joint 的IK是个高维非线性方程,非常难以求解,且无法保证是否有解。

  • 是否有解
    • 拉直所有joint
    • 从最长的一段两侧,向内折,如果比最长的短,就会有一段盲区

算法

CCD(Cyclic Coordinate Decent)

末端节点不断尝试靠近目标点,多次迭代。

  • 优化方式:

    1. 带toloerance regions的CCD:在这种方法中,每个骨骼目标点附近都有一个容差区域(绿色圆圈)。当骨骼达到该容差区域时,就停止旋转并开始移动到下一个骨骼。这种方式能让骨骼不必完全达到目标点,只需进入容差区域即可,因此动作看起来更自然、柔和。

    2. 角度限制:在每个骨骼上施加角度限制(图中的绿色区域),限制骨骼旋转的角度范围,防止旋转过度。这种方法让骨骼在小范围内移动,逐步接近目标点。

FABRIK(Forward And Backward Reaching Inverse Kinematics)

演示动画🔗

要点是保持骨骼长度不变,仅移动关节位置。

  • 正向到达:从末端关节开始,逐个向目标靠近。

  • 反向到达:从根部固定起点,逐步调整到末端。

FABRIK with Constraints

根据约束的转动范围和目标点,做出一个垂直平面或垂线 $x$ ,关节在 $x$ 上的投影与目标点连线 $y$ , $y$ 与转动范围的交点即是新位置。

Other IK Solutions

  • IK with predication during moving

    现实中,人物做出一些动作之前,会进入预先准备姿态。通过布置区域来提前判断。

Animation Pipeline with IK

面部动画

Blend Facial Animation(基于骨骼)

两种动画做简单的叠加会出现异常,动画保存的应该是基于 neutral face 的增量,这样进行动画叠加就是我们想要的效果。

UV Texuture Facial Animation

对表情贴图进行变换。

动画重定向

Ignore Offset Between Source and Target Joints

忽略不同骨架之间的offset,apply的是相对于binding’s joints 的相对位移。

Align Movement by Pelvis Height

因模型之间身体比例并不一样,会出现人物走路时身体浮空或遁地。

所以我们根据盆骨高度来对齐,由两者之间的盆骨高度比值进行比例调整。

Retargeting with Different Skeletoon Hierarchy

动图🔗

把两条骨骼都归一化,用目标骨骼的投影作为截距,在模板骨骼上截出两点并连线,则是新的骨骼。

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

最近更新

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

文章内容

相关文章

2024/11/05

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

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

2024/11/01

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

靠,被专周硬控一周,不过好在大概知道C++项目整个流程是什么样的了,也算是有所收获。 2D游戏动画技术 Sprite animation 多张图片顺序播放。 Live 2D 将图片拆分成多个图源,在图源上打上控制点,通过移动控制点来达到图片变换的效果。 3D游戏动画技术 DoF(Degrees of Freedom) 六方向自由度代表可以按 xyz 进行平移或旋转。 Rigid Hi...

2024/10/21

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

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

操作系统-第八章作业

OSI与TCP/IP分层模型及各层协议介绍

© 2025 Ycyofmine. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

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

发现新版本的内容。