UE | UnrealInsights 截图采用Jpg数据 | Blurred code

UE | UnrealInsights 截图采用Jpg数据

2024/09/15

LastMod:2024/09/15

Categories: UE

背景: 我们在录制Unreal Insights时为了方便查看性能热点时候正在做什么,开了一个后台线程在定时截屏并传输数据给insights存储到Screenshot Channel里。但是最近注意到这样生成的utrace文件体积增长的非常快,很不利于存储的和分发,调查了一下原因。

TraceScreenshot接口

FTraceScreenshot::TraceScreenshot接受一个未压缩过的TArray<FColor>或者TArray<FLinearColor>作为原始数据,内部会根据数据类型选择不同的压缩格式。

默认情况下FColor是压缩成PNG,压缩效率有点低,一张1280x720的数据要增长1M多。

void ImageUtilsCompressImageArrayWrapper(int32 ImageWidth, int32 ImageHeight, const TArrayView64<const FColor>& SrcData, TArray64<uint8>& DstData)
{
	FImageUtils::PNGCompressImageArray(ImageWidth, ImageHeight, SrcData, DstData);
}

这里可以改一下,改成JPG。

UnrealInsights程序在解码utrace里编码的图片数据时,会调用DecompressImage函数来解码Blob数据。这个函数里面会根据每个格式的Magic Header来探测图片格式,再解码。

不同图片格式的Magic Header可以在以下链接找到。

参考:File Magic Numbers

因此只要是虚幻ImageWrapper模块支持的格式都可以被encode到utrace里。

edit-47a77b3d8654448d852abc6d21a5a815-2024-09-13-12-03-03

调整格式以后再下调了一点分辨率,这样一张截图只增长70k左右的空间,基本不会造成太大的影响了。