动画系统

Animation Runtime Pipeline
*(美术)准备好chips,并在timeline上k帧;
*所有关节,每两帧之间算出动作变化:局部坐标系(从根节点开始叠加)->模型坐标系->蒙皮变化矩阵(CPU),存在表里;
*随着时间线推移,顶点算出两帧的位移,再插值(NLerp/Slerp)出当前时间的位置(GPU->VertexShader)。

动作状态机:

混合空间
混合空间用于多个维度(一般是2个)的动作混合。
一维混合是以单一因素进行线性混合,如速度或方向;
二维混合是以2个因素进行混合,在可以平面上可以同时调整速度和方向,来混合动作。

表达式树
对于一棵表达式树,其叶子节点都是参数或者常数,非叶子节点都是运算符或者控制符。

混合树
基于表达式树。叶子节点为动作等资产,非叶子节点为表达式(混合公式)。
通过混合子节点,最终根节点输出一个动作。
参数:通过暴露给外部的变量(血量、速度、怒气值等),可以动态地调整混合。特点:实时更新评估,不需要与GamePlay互动(可以并行计算)。
事件:当某些条件出发时(如换武器),可以通过Event更改动作。特点:不需要实时更新评估,需要与GamePlay互动。
Unity:Blend Tree
UNREAL:Animation Blueprint

IK:反向动力学,先确定触碰点,反过来推算各骨骼点变化。
【简单的IK】
Two Bones IK:把运动骨骼抽象成3个点(着力点-脚尖、弯曲点-膝盖、根节点-臀部)形成三角形,已知两点和位置可求弯曲角度。
【多链IK】
物理算法的困难:链数多,变化呈指数增长,解几多,计算量极大。
启发式算法:
CCD:从着力节点开始,一节一节往触碰点弯曲(想象拜神,脊椎一节一节弯曲向地面)。
FABRIK:正向,着力点强行拉到触碰点,其他关节跟着调整,直到调整完根节点;反向,从根节点反过来做,如此循环,着力点会越来越靠近触碰点。
【基于物理的IK】

面部动作:
【精细化动作】Facial Action Coding System
美术对面部各器官(眼睛、嘴巴...)建立23个核心表情,游戏中通过动作混合(Morph Target Animation)得到动作。

注意,所有器官记录的位置是相对“标准脸”的相对位置,因为如果记录绝对位置,在脸部绑定骨骼的情况情况下,蒙皮值和Morph插值会冲突。
【脸部骨骼动作】Complex Facial Skeleton
实战中大动作(张嘴,眼珠转动)用脸部骨骼,微表情用FACS
【基于物理的脸部动作】Muscle Model Animation
难点是各种微表情的捕捉。UE 虚拟人基于此技术。

动画重定向:

posted @ 2022-07-15 09:54  银龙背上的骑士  阅读(109)  评论(0编辑  收藏  举报