You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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计算时段平均值

按以下流程操作即可获取指定窗口的平均值:

  1. 启动Unreal Insights,点击Record Session开始录制。
  2. 在编辑器中运行场景,进入目标时段后结束录制。
  3. 在Insights的Timeline面板,用鼠标拖拽框选需要分析的时间窗口。
  4. 切换到Metrics面板,搜索RHI Triangles Drawn指标,面板底部会自动显示该窗口内的平均值、最大值、最小值等统计数据。

方法3:自定义C++代码实现精准采样

如果需要完全可控的统计逻辑,可通过代码在指定时间窗口内采样并计算平均:

  1. 在项目的PlayerController或GameMode类中添加变量:
    bool bIsCounting = false;
    int32 TriangleSampleCount = 0;
    uint64 TotalTriangles = 0;
    FTimerHandle CountTimerHandle;
    
  2. 实现统计逻辑:
    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);
    }
    
  3. 调用StartTriangleCount(10.0f)即可启动10秒的统计,结束后日志会输出平均值。若需排除UI,可监听FSceneRenderer::BeginRender和FSceneRenderer::EndRender事件,仅在场景渲染时段内采样。

内容的提问来源于stack exchange,提问作者Can Celik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:50:36