skeletalMesh性能消耗

为知为何,问题的具体细节被丢失了。这里再重新编辑一下

​为测试Skeleton数量对CPU性能的压力情况,我们做了两个测试关卡: testA中放置60只相同的SkeletalMeshA, SKMeshA的Skeleton的数量为104; testB中放置60只相同的SkeletalMeshB,SKMeshB的Skeleton的数量为22。两个SK使用相同的ABP(AnimationBluePrint)父类,仅骨骼和IdleSequence不同,其它完全一致。

运行时使用 open testA和open testB指令,使用unreal insights分别对SK对CPU的使用情况进行分析,结果显示: testB关卡中的SK CPU消耗比testA头上中的SK CPU消耗更高~, 多次测试结果一致。

我们的问题是: 为何其它条件一致的情况下,骨骼数更少的SK占用的CPU时间更高?

以下附件,8201.jpg中第​5200帧左右搜索SK_E008201为105根骨骼的SK时间消耗7.8ms;082.jpg中6700帧左右为22根骨骼的SK时间消耗11.3ms.

[Attachment Removed]

你好,方便描述一下你的具体问题是什么吗?

简单的看了一下Trace,看上去是单帧运行的skeletalMesh数量比较多,主线程有压力?

可以尝试一下AnimationBudget或者URO来降低单帧运行的数量。

**这里有一篇关于动画优化的文档可以参考一下:**https://dev.epicgames.com/community/learning/knowledge\-base/xBZp/unreal\-engine\-performance\-tips\-tricks\-animation?source\=Rkk

后面有具体问题可以再讨论

[Attachment Removed]

工程资源关联比较多,又是在研项目,不太方便导出来。 能从.utrace文件中查出些问题线索吗?

[Attachment Removed]

不知道这个问题是否有新的进展?若是没问题,我这边暂时先关闭​,后续有需要讨论的可以继续留言交流

[Attachment Removed]

你好,问题已完善,应该已描述清楚。

[Attachment Removed]

很有趣的问题,方便发个测试工程来看一下吗?​

[Attachment Removed]

你好,可以理解。

我说一下我目前的发现。

首先,骨骼数量和动画整体消耗应该不是纯线性关系,除了骨骼计算外,动画模块还有很多其他类型的计算任务。

从你给的Trace看,两个Case的差异主要体现在USkeletalMeshComponent_CompleteParallelAnimationEvaluation部分。如图 [Image Removed]对应代码为USkeletalMeshComponent::CompleteParallelAnimationEvaluation,可以针对该函数相关的逻辑检查一下两个测试用例baseline是否一致。

也可在这个函数内,多插几个Trace Tag,看看到底是哪一块逻辑不同?

如果不好定位,看是否可以将相关资产脱敏处理后放到官方版本的引擎内做个简单的sample工程发过来,方便我帮你定位具体的问题。

[Attachment Removed]