johnsoncodehk 发表于 2022-6-22 08:47

简述UnrealInsights

引言

       在开发的过程中,难免会遇到一些性能的评价,需要我们对项目进行优化。对瓶颈的定位成了首要解决的问题。因此Epic在UE4.23版本时推出了这个名为UnrealInsights的应用程序,其目的是帮助开发者能快速定位问题。(PS:笔者所用的引擎版本为4.25,多图警告)
正文

   UnealInsights 分为四个部分,分别为Timing Insights 、 Asset Loading Insights、 Animation Insights以及 Network Insights。本文暂将其称为时间分析器,资源分析器,网络分析器,动画分析器。其中前三者为独立的应用程序,动画分析器在4.25版本中为一个插件。
      首先我们要运行前三个分析器需首先到引擎目录:Engine->Binaries->Win64文件夹中找到UnrealInsights应用程序。



1-1 UnrealInsights应用程序

<hr/>Timing Insights与Asset Loading Insights

       这里把这两个分析器放在一起介绍是因为笔者认为这两个分析器非常相似功能也互有包含所以便放在了一起。
      在运行上述程序,其会附加到我们运行的UE4的进程进而捕获对应的数据。此时我们直接运行UE4可能会出现什么都没有发生的情况,是因为其需要附加到进程就与VS的AttchToProcess类似,使用PIE则没法找到进程从而附加失败。我们应使用Standalone启动,此时我们可以看到UnrealInsights出现了对应的Session后面还附有LIVE的字样。说明此条便是我们正在运行的游戏所捕获的数据。若此时双击Session会发现没有任何数据,这是因为我们还没有指定需要捕获的数据类型。
首先打开我们的编辑器找到EditorPreferences(编辑器偏好)在Play(播放)中找到AdditionalLaunchParameters(额外启动参数)加入命令如:-trace=CPU。此工具可检测的如下:(PS: 下面的ForMobile是为手机设置,命令行格式为-Trace=(要捕获的参数)参数与参数用逗号分隔”,”。 -statnamedevents 命令能显示更具体的函数调用)



1-2 捕获数据类型



1-3 命令设置

此时我们再运行UnrealInsights便能看到对应的数据调用了。



1-4 Timing Insights

我们通过选取时间进度调可以框选一些片段进行性能分析,如上图可看出主要消耗在UpdateAnimation上。我们可以通过按键"C"进行布局图的缩放,“F”按键使视口Focus到某个函数。



1-5 过滤器

在Tracks可以进行数据的删选,比如勾上I/O和AssetLoadingTracks就会出现对应IO操作的分析图。值得一提的是GraphTrack-G这个选项在官方介绍中这个选项是默认关闭的,需要修改引擎代码重新编译进行启用。文件位置如下:



1-6 GraphTrack Switch

在开启后,便能开启如下的时域图。



1-7 Graph Track

下方的Log Window也能通过两个Filter进行过滤及搜索。



1-9 Logs

右侧的窗口则是对当前选中的统计。



1-10 Timers details

通过上方的选项卡我们就可以切换到Asset Loading Insights。我们可以通过下图看到其与Timing Insights非常相似,事实上通过Tracks我们在Asset Loading Insights中也能看到GPU 和CPU的分析。其只是为我们做了默认的AssetLoading的选项。



1-11 Asset Loading Insights

<hr/> Network Insights

NetworkInsights的启用也是通过添加命令行如下图,-nettrace=1其代表数据的复杂程度将其设置为2能得到更为详细的数据。host为服务器地址



2-1 Network Insights Command

我们可以通过选择柱形图了解到网络的详情。



2-2 Network Insights Details

通过下方的Incoming选项能切换消息的收发



2-3 消息收发选项

可以看到的是我们拥有两个NetworkingInsights的选项卡,主要是方便使用可以选择一个输出,一个输入。通过右侧的List就能较为方便的了解到网络方面的负载出在了哪里。



<hr/>Animation Insights

Animation Insights是相较其他几个最为特别的一个其的启动方式并不是需要我们添加命令。
首先我们需要开启以下三个插件:



3-1 AnimationInsights Plugins

重启后我们在Developer Tools可以开到两个选项Animation Insights和TraceDataFiltering。



3-2 Animation Insights窗口选项

打开两个窗口便能看到如下图,(PS:这里我改过布局可能和默认的有些区别)



3-3 Animation Insights 窗口布局

如图3-3,左侧的TraceDataFiltering是过滤删选器其代表我们所要捕获什么类型的数据。如动画啊CPU啊之类的。(但是目前CPU,GPU选项勾上并不能捕获对应的数据,据官方的Live中了解到以后上述的三个Insights可能会做成AnimationInsights一样成为引擎的一个内置功能就如以前使用的SessionFrontend一样。)如图下,我们勾上下图选项就会出现我们平常ContentBrowser中的过滤选项点击即可勾选动画分析所要捕获的数据。通过Save as User Preset 能保存用户自定义的Presets。



3-4 快捷动画选项

一旦我们勾选启动数据的勾选其会实时捕获动画数据。此时我们在编辑器中所有World的动画数据都会被进行捕获。(PS:如果取消勾选其会一直进行数据的捕获并写入本地,还请不要忘记关闭)这样会很难进行动画的定位,此时我们就应该使用TraceSourceFilter进行数据的过滤。



3-5 捕获数据选项卡

TraceSourceFilter是数据过滤器代表着我们捕获的数据进一步需要什么样的过滤。



3-6 Trace Source Filter

通过下图所示的Options选项我们能快速的删选是Editor下还是PIE或者使用下方通过网络方式进行区分来设置是Server还是Client。



3-7 世界删选器

当我们选择到了我们想要的数据源World,那么怎么能确保只输出我想要的Character的动画数据呢?此处就需要点击下图所示的AddFilter,添加自定义的Filter。点击下方的New Filter Blueprint,就会创建一个继承自DataSourceFilter的蓝图。



3-8 自定义Filter

我们可以通过Override以下函数,来定义哪些对象能通过过滤。



3-9 需要重写的函数

如下图,此处我做了判断使只有玩家控制的对象才能通过过滤,这样就能只捕获我控制的角色了。



3-10 过滤器实现



3-11 效果图

另外删选器也可以进行组合达到想要的效果。



3-12 Custom Condition

介绍完了删选功能,我们回到我们捕获的数据上此处以AdvancedLocomotionSystemV4示例项目为例。下图便是我们玩家的动画数据。



3-13 动画数据详情

下图为BlendWeight区域,其展示了各个动画直接的混合权重,什么时候淡入什么时候淡出的。通过右击唤出菜单,可以开启其他选项。



3-14 Animation Weight Area

此处特别要介绍的ViewProperties选项,其会出现右侧的PropertiesDetails面版,其详细的显示了各个Weight的数值之类的详情。



3-15 右击菜单

我们通过按住Ctrl拖动时间条,便能清晰的从右侧的面板看到橘色竖线所在那帧的属性。



3-16 Properties Details

我们接着往下看,Graph其是我们动画蓝图的调用情况。显示动画蓝图update所需的时间。



3-17 Animation Bluerpint Graph

右击唤出菜单,点击Debug This Graph,此时会唤出对应的动画蓝图。



3-19 Right Click Option

我们可以看到引擎会创建对应的Character进行Debug。



3-20 Debug Filter

此时我们按照Ctrl拖动时间进度条即可看到动画蓝图中Preview窗口的小人也作出此时间轴上对应的动作,这对于动画的Debug相当的方便。同时如果在右击菜单选择了View This Graph。右侧出现的Detail面板也会对应更新当前帧的数据,这个功能为动画的制作提供了极大的便利。



3-21 Animation Bluerprint Properties Details

我们继续往下,此处为AnimNotify区块同样右击唤出菜单点击ViewProperties,右边的面板便会显示当前触发的Notify,面板会显出那个动画触发了这个Notify,Notify的Class是哪个蓝图。



3-22 Animation Notify Details

接着来到Curve的区域此处显示了,我们定义的AnimCurve的态势,其与BlendWeights的操作类似,右击可勾选需要显示的Curve,点击ViewProperties能打开选项卡查看具体的数值。按住Ctrl拖动可选择当前帧。



3-23 Animation Curve Details

最后是Pose区域,其代表当前执行了什么动画。我们右击唤出菜单可勾选Draw Pose和Draw Skeleton。



3-24 Pose Right Click option

当我们勾选了上述两个选项,我们即可在Viewport中看到当前帧在世界中的位置及其动画,这样便能精准的定位Debug了。



3-25 Pose in world

同样我们拖动时间轴便同样会更新对应的动画。下图则是个播放选项我们也同样可以播放此段数据。





3-26 Play

<hr/>至此,Unreal Insights的四个功能也已大致介绍完毕。个人认为UnrealInsights能为我们的开发提供相当大的便利性,方便各个功能的开发及优化。目前,在4.25版本中其大致的使用方法便是以上这些,在上文提及过在官方Live中,两位大佬说以后可能会把前三种Insights改成AnimationInsight的方式不用通过命令行通过选项卡即可开启。所以可能过几个版本Unreal Insights就可能会以一个全新的样式展现给大家,相信到时候的功能会更加完善,更加便于开发及优化。最后我有什么没有介绍或者说错的还请各位大佬指出。
Enjoy it!
<hr/>

jquave 发表于 2022-6-22 08:55

可惜新版本才能用

jquave 发表于 2022-6-22 09:01

嗯,NetworkInsights和AnimationInsights是4.25才有的,前两个功能的话是在4.23版本加入的。

量子计算9 发表于 2022-6-22 09:05

GPU Track啥都没有,CPU正常,大佬们,这是为什么?

RedZero9 发表于 2022-6-22 09:12

为什么我的这个没Asset Loading Insights??
页: [1]
查看完整版本: 简述UnrealInsights