Parallel Animation
February 18, 2024About 2 min
Parallel Animation
并行动画计算(Parallel Animation Evaluation)
UE可以在多个线程上并行计算动画,这减少了主线程的负担并提高了整体性能。并行动画计算通常在以下几个方面发挥作用:
a. Skinning Decompression
这是解压和准备网格数据以便进行蒙皮处理的过程。这一步骤可以在多个线程上并行执行,以加快处理速度。
b. Animation Graph Evaluation
动画图的计算可以在不同的线程上并行进行。这包括所有的IK计算、动画混合、状态转换等。
c. Bone Transforms Calculation
骨骼变换的计算也可以并行处理。这是计算最终骨骼位置以供渲染使用的步骤。
UAnimInstance
UAnimInstance是一个Unreal Engine的类,它是一个Actor的动画实例,负责管理和播放Skeleton Mesh的动画。它包含动画蓝图(Animation Blueprint)的逻辑,处理动画状态机、变量和事件。UAnimInstance通常在游戏的主线程中运行,处理与游戏逻辑相关的各种动画任务。
FAnimInstanceProxy
FAnimInstanceProxy是一个结构体,作为UAnimInstance的轻量级代理,用于在多线程环境中计算动画。这个代理包含了为动画计算所需的所有数据,可以在不同的线程(通常是工作线程)上进行处理,从而减少主线程的负担。FAnimInstanceProxy的设计使得动画的计算可以独立于游戏逻辑之外并行执行。
关系与工作流程
- 数据同步:在动画更新周期的开始,UAnimInstance会将相关数据复制到FAnimInstanceProxy中。这包括动画参数、状态机状态、骨骼变换等。
- 并行计算:一旦FAnimInstanceProxy包含了所有必要的数据,它可以在另一个线程上独立计算动画。这包括骨骼的变换计算、动画混合、IK处理等。
- 数据回传:计算完成后,结果(如最终骨骼的变换)会被传回到UAnimInstance,以便在主线程中应用到Mesh上,并进行渲染。