如何在UE 5.1中可靠获取选定时间窗口内的平均绘制三角形数量?
解决UE 5.1中获取选定时间窗口平均绘制三角形数量的可靠方法
方法1:优化Stat命令过滤,排除UI渲染统计
默认Stat RHI会包含所有渲染操作(包括UI文本、HUD等),导致数值虚高。可以通过以下方式精准统计场景三角形:
- 执行
Stat Render命令,查看其中的Primitives Drawn指标,该数值仅统计场景3D物体的渲染图元(对应三角形数量),不包含UI相关渲染。 - 若需更细粒度的RHI层统计,可使用
Stat RHIDetail,输出中忽略Slate或UI相关的Triangles计数项。另外,统计前执行Show HUD Off关闭UI显示,完成后再用Show HUD On恢复,即可排除HUD文本的干扰。
方法2:正确使用Unreal Insights计算时段平均值
按以下流程操作即可获取指定窗口的平均值:
- 启动Unreal Insights,点击Record Session开始录制。
- 在编辑器中运行场景,进入目标时段后结束录制。
- 在Insights的Timeline面板,用鼠标拖拽框选需要分析的时间窗口。
- 切换到Metrics面板,搜索
RHI Triangles Drawn指标,面板底部会自动显示该窗口内的平均值、最大值、最小值等统计数据。
方法3:自定义C++代码实现精准采样
如果需要完全可控的统计逻辑,可通过代码在指定时间窗口内采样并计算平均:
- 在项目的PlayerController或GameMode类中添加变量:
bool bIsCounting = false; int32 TriangleSampleCount = 0; uint64 TotalTriangles = 0; FTimerHandle CountTimerHandle; - 实现统计逻辑:
void StartTriangleCount(float Duration) { bIsCounting = true; TriangleSampleCount = 0; TotalTriangles = 0; // 每帧采样一次 GetWorld()->GetTimerManager().SetTimer(CountTimerHandle, this, &YourClass::SampleTriangleCount, 0.0f, true); // 到时间后停止统计并计算平均 GetWorld()->GetTimerManager().SetTimer(FTimerHandle(), this, &YourClass::EndTriangleCount, Duration, false); } void SampleTriangleCount() { if (!bIsCounting) return; // 获取当前帧RHI绘制的三角形数 uint64 Triangles = FRHICommandListExecutor::GetImmediateCommandList()->GetStats().TrianglesDrawn; TotalTriangles += Triangles; TriangleSampleCount++; } void EndTriangleCount() { bIsCounting = false; GetWorld()->GetTimerManager().ClearTimer(CountTimerHandle); float AverageTriangles = TriangleSampleCount > 0 ? (float)TotalTriangles / TriangleSampleCount : 0.0f; UE_LOG(LogTemp, Log, TEXT("Average Triangles Drawn: %f"), AverageTriangles); } - 调用
StartTriangleCount(10.0f)即可启动10秒的统计,结束后日志会输出平均值。若需排除UI,可监听FSceneRenderer::BeginRender和FSceneRenderer::EndRender事件,仅在场景渲染时段内采样。
内容的提问来源于stack exchange,提问作者Can Celik
相关产品推荐
相关产品推荐

