UE4 PSO缓存

本文详细描述了在虚幻引擎4中使用PSO(预编译着色器对象)进行性能优化的全过程,包括自动和手动采集缓存文件、生成SHK文件、打包策略以及运行时加载和热更的处理。作者强调了在实际应用中的注意事项和可能遇到的问题。

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

更多内容请查看我的个人网站
NoCodeWorld 的小地盘

PSO构建总流程

image.png

根据上面总流程图,我会分别一个个去讲解每一步的操作和需要额外处理的东西

开发环境

  • UE版本:4.27.2
  • VS版本:2019

1.打包

首先,需要打一个可以实机收集PSO缓存文件的包

2.实机收集

自动采集

这里主要说一下录取的方式方法, 一种方式就是引擎自带的自动采集指令

Config/DefaultEngine.ini
[ConsoleVariables]
r.ShaderPipelineCache.Enabled=1
r.ShaderPipelineCache.LogPSO=1
r.ShaderPipelineCache.SaveBoundPSOLog=1

上述采集指令配置了以后直接打包,然后开始跑项目即可,会自动采集并且保存缓存文件到本地,如果你们是普通小场景项目上面方式就已经足够了,可直接跳到 采集完成

手动采集

我自己做了一个PsoCacheGather的小工具插件,下面会大概说一下实现思路
image 3.png

我们小工具就如图所示,支持自动跑图录取和手动录取,因为我们是大世界,场景太大,如果让QA去全部跑一遍有点吃力,所以直接做了一个自动跑图收集,如果你们项目组是小副本或者小场景直接手动跑图录取或者拉一条Line,然后摄像机沿着跑即可,这个看自己需求

我们项目因为是大世界场景,测试发现长时间全部跑下来会有问题,可能是实时一直在保存太大太频繁,所以我改成了自动跑图完再保存一次,中间不会实时保存,测试没问题

[ConsoleVariables]
r.ShaderPipelineCache.Enabled=0

首先配置中关闭自动开启,我们在开始录取的时候代码中开启

bool UPSOCacheGatherHelper::EnableShaderPipelineCache(bool bEnable)
{
	UE_LOG(LogPSO, Display, TEXT("EnableShaderPipelineCache %s"), bEnable ? TEXT("true") : TEXT("false"));
	auto Var = IConsoleManager::Get().FindConsoleVariable(TEXT("r.ShaderPipelineCache.Enabled"));
	if (Var)
	{
		Var->Set(bEnable ? 1 : 0);
	}
	return !!Var;
}

首先在一开始先开启总开关 r.ShaderPipelineCache.Enabled

bool UPSOCacheGatherHelper::EnableLogPSO(bool bEnable)
{
	auto Var = IConsoleManager::Get().FindConsoleVariable(TEXT("r.ShaderPipelineCache.LogPSO"));
	if (Var)
	{
		Var->Set(bEnable ? 1 : 0);
	}
	return !!Var;
}
bool UPSOCacheGatherHelper::LoadShaderPipelineCache(const FString& Name)
{
	UE_LOG(LogPSO, Display, TEXT("Load Shader pipeline cache %s for platform"), FApp::GetProjectName());
	return FShaderPipelineCache::OpenPipelineF
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值