UE4性能Profile的各种方式

本文详细讲解了如何在Unreal Engine中使用PROFILE和STAT命令来测量和分析代码执行时间,特别是关注TestTime组下的Cycle Stats,如TestMyActorTick、TestMyActorCal和TestMyActorCount。通过实例展示了如何在Actor的Tick函数中使用Scope Cycle Counter,并解释了StatStartFile/StatStopFile的使用方法以捕获CPU执行片段。阅读本文将帮助开发者优化性能并理解函数执行时间分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Profile渲染阶段时间--stat scenerendering

在RenderCore(.h,.cpp)声明定义profile字段,加入到局部函数,可以通过stat scenerendering指令来打印出相应时间

Profile CPU执行事件

stat相关声明

声明stat Group

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);

声明stat Group下的具体标记

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);
DECLARE_CYCLE_STAT(TEXT("TestMyActorTick"), STAT_TestMyActorTick, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCal"), STAT_TestMyActorCal, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCount"), STAT_TestMyActorCount, STATGROUP_TestTime);

SCOPE_CYCLE_COUNTER给一段程序打上标记,从标记到从该段程序退出的时间则为这个标记执行的事件

stat使用例子

来一个例子,下面的actor tick做了两次累加函数,用三个标记分别标记Tick, Test, Test1三个函数。

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);
DECLARE_CYCLE_STAT(TEXT("TestMyActorTick"), STAT_TestMyActorTick, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCal"), STAT_TestMyActorCal, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCount"), STAT_TestMyActorCount, STATGROUP_TestTime);

UCLASS()
class TESTHOUDINIPROJECT_API AMyActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AMyActor();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;


	UPROPERTY(EditAnywhere)
		int32 Count1;

	UPROPERTY(EditAnywhere)
		int32 Count2;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

private:
	void Test(int32 Count);
	void Test1(int32 Count);

};
void AMyActor::Tick(float DeltaTime)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorTick);
	Super::Tick(DeltaTime);
	Test(Count1);
	Test1(Count2);

}

void AMyActor::Test(int32 Count)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorCal);

	int64 Total = 0;

	for (int32 Index = 0; Index < Count; ++Index)
	{
		Total += 1;
	}

}

void AMyActor::Test1(int32 Count)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorCount);

	int64 Total = 0;

	for (int32 Index = 0; Index < Count; ++Index)
	{
		Total += 1;
	}
}

从Count2 = 3Count1推测 Time(Test1) = 3Time(Test)

Stat TestTime

Stat TestTime可以探查STATGROUP_TestTime这个组的所有标记阶段执行事件

 Stat StartFile &  Stat StopFile

 Stat StartFile &  Stat StopFile是执行CPU执行事件片段的命令, Stat StartFile开始执行CPU执行事件抓取,Stat StopFile结束抓取CPU执行事件片段,并生成一个统计文件。

 Tools->SessionFrontend打开Profile工具

 点Load按钮对目标统计文件加载

 统计组: 可以查看对应标记组之下每个标记在整个统计阶段的Min/Avg/Max执行时间

 

 统计事件列表: 选中某一帧之后,可以查看一帧数下各个标记执行的时间

 从上面可以看出TestMyActorTick花了6.528ms

 可以看到TestMyActorCount标记的Test1函数执行时间差不多是TestMyActorCal执行函数Test的三倍。

[1]这里得注意的是上面图显示是这个标记执行的总时间,而非是执行一次这个标记的时间,假设你调用100次被标记函数的循环,这个标记执行的时间 = 100次这个函数执行总时间。

[2]Self表示当前函数内除了函数内的所有标记外的执行时间

参考资料

[1]https://docs.unrealengine.com/5.0/zh-CN/stat-commands-in-unreal-engine/

<think>好的,用户想了解UE4中的T_Loft_Spline_Surf的定义和用途。首先,我需要确认这个术语的正确性,因为用户可能拼写有误。用户提到的“T_Loft_Spline_Spline_Surf”可能重复了“Spline”,正确的名称可能是“T_Loft_Spline_Surf”或者类似的变体。在UE4中,以“T_”开头的资源通常是模板或工具函数,可能属于蓝图或材质系统的一部分。 接下来,我需要回忆UE4的相关文档和社区资源。Loft通常指放样操作,即通过两个或多个样条曲线生成曲面。Spline Surf可能指样条曲面。因此,T_Loft_Spline_Surf可能是一个用于样条放样生成曲面的工具或材质函数。 查阅UE4的官方文档,发现材质函数中有一个“T_Loft_Spline_Surf”,用于在材质编辑器中沿样条曲线放样生成曲面。它常用于创建复杂的几何形状,如管道、道路等,而无需手动建模。此外,该函数可能涉及参数如样条控制点、截面形状和UV展开。 需要验证这些信息的准确性,可能需要参考官方资料或社区教程。例如,引用中提到UE4的Procedural Mesh组件和材质函数库中的相关工具[^1]。因此,可以确定T_Loft_Spline_Surf的作用和用法,并给出实际应用示例,如创建动态道路。</think>在Unreal Engine 4中,`T_Loft_Spline_Surf`是材质函数库中的一个工具,用于通过**样条放样技术生成程序化曲面**。以下是详细说明: #### 定义 - **功能**:通过沿样条曲线(Spline)的路径放样(Lofting)二维截面形状,生成连续的三维曲面(Surface) - **数学基础**:基于参数化方程$S(u,v) = C(u) + \mathbf{N}(u) \cdot f(v)$,其中$C(u)$是样条曲线,$\mathbf{N}(u)$是法向量场,$f(v)$是截面函数 - **实现方式**:在材质编辑器中通过数学运算实现几何变换 #### 核心参数 1. **Spline Data**:包含样条位置、切线方向的参数组 2. **Profile Curve**:定义截面形状的2D函数 3. **UV Tiling**:控制纹理坐标分布 4. **Width Scale**:截面缩放系数 #### 典型应用场景 1. 动态道路生成:结合蓝图脚本实时更新样条数据 ```blueprint // 示例:在蓝图中更新样条控制点 Set Spline Points -> Update Loft Mesh ``` 2. 电缆/管道系统:通过修改截面形状创建不同横截面 3. 建筑装饰线条:在建筑表面生成浮雕图案 #### 优化技巧 1. 使用`Distance Field`替代高细分样条以提升性能 2. 通过`LOD`设置控制细节层次 3. 结合`World Position Offset`实现动态变形
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值