标签:动画系统
-
AnimationMixer 的重构:AnimationPlayer/AnimationTree 的统一底座 —— 4.x 为什么多出一个基类
Godot 4 把动画播放的公共逻辑从 AnimationPlayer 里抽成了 AnimationMixer,AnimationTree 从此和 AnimationPlayer 平级。这篇讲这次重构拆出了什么、ActiveAnimation 列表怎么驱动混合求值、以及它对写动画代码的实际影响。
-
动画更新率优化 URO:远处角色降帧的原理与坑
URO 按 LOD 跳过 AnimInstance 的 Update/Evaluate 并用 pose 插值抹平跳变:这篇讲 Skip/Interp 两种模式的机制、延迟判定的必要性,以及 Montage 和同步组为什么不降帧。
-
动画资产结构:USkeleton/AnimSequence 的数据布局
从 USkeleton 的骨骼树到 AnimSequence 的压缩轨道:动画资产在内存里长什么样、压缩格式怎么权衡、Additive 和 Root Motion 存在哪,源码基于 UE5.3。
-
状态机源码:FAnimNode_StateMachine 的转移评估
转移规则到底什么时候求值、跨状态 Blend 怎么叠加、打断(Interruption)优先级怎么算——FAnimNode_StateMachine 的三个常被误解的机制,源码基于 UE5.3。
-
动画通知与曲线:AnimNotify 触发管线和驱动逻辑的正确姿势
AnimNotify 和动画曲线是同一条求值管线的两个出口:通知做离散事件,曲线做连续量。这篇讲触发时序、队列分发机制,以及"哪些逻辑能写进通知里"的边界。
-
AnimationTree 状态机:blend tree 的求值顺序 —— 图节点的拓扑排序
AnimationTree 的 blend tree 不是每帧"跑一遍图",而是按依赖关系做拓扑排序后从叶子到根求值。这篇讲 AnimationNode 的输入输出模型、求值顺序怎么定、BlendSpace2D 的重心坐标插值,以及同步节点的时钟语义。
-
Control Rig 原理:RigVM 字节码执行模型
Control Rig 的图不是"每帧走一遍 UObject 节点",而是编译成 RigVM 字节码后在寄存器式虚拟机上执行——这篇讲编译管线、操作数模型和字节码执行的开销为什么比 AnimBP 低。
-
IK 节点族:TwoBoneIK/FABRIK/CCDIK 的实现对比
三种 IK 算法的数学本质和工程取舍:TwoBoneIK 的解析解、FABRIK 的前向后向迭代、CCDIK 的贪心旋转——以及在 AnimGraph 里怎么选,源码基于 UE5.3。
-
动画混合:BlendSpace 与 Layered Blend 的采样
BlendSpace 的网格采样、分层混合的逐骨骼权重矩阵、Additive 叠加的数学——动画混合的正确性都建立在权重归一化这条公理上,源码基于 UE5.3。
-
逆运动学:IK 节点的求解 —— FABRIK 与 CCD 算法在引擎里的实现
正向运动学是"转关节算末端",逆运动学反过来:给定末端目标反解关节角。这篇推导 CCD 和 FABRIK 两个经典算法的更新公式,讲 Godot 4.4 SkeletonModifier 栈里 IK 的实现位置和它们的适用边界。
-
Root Motion:位移提取、回放与网络同步
Root Motion 把位移从动画数据里提取出来喂给 CharacterMovement:本篇讲提取管线、本地回放、以及服务器校正为什么不拽 root 而是拽胶囊体。
-
骨骼动画:Skeleton3D 的 rest 与 pose 双变换 —— 骨骼矩阵的两套坐标
Skeleton3D 里每根骨骼同时存 rest(绑定姿势)和 pose(动画姿势),全局矩阵是两套沿骨骼链复合的结果。这篇讲双变换的数学、动画 track 为什么只存 pose 增量、以及 rest 不一致导致的重定向问题。
-
AnimBP 编译:AnimGraph 到 FAnimInstance 的生成
Designer 面板里连的节点图怎么变成每帧执行的求值栈:AnimBP 编译期的图变换、FAnimInstanceProxy 的分工、FastPath 怎么消掉反射开销,源码基于 UE5.3。