官方文档
在虚幻引擎中使用PSO缓存优化渲染 | 虚幻引擎 5.2 文档 | Epic Developer Community
采集流程
1.设置
a.打开项目的 DefaultEngine.ini 或其 (Platform)Engine.ini ,没有(Platform)Engine.ini则自己创建。
在 Engine.ini 文件中设置以下值:
[DevOptions.Shaders]
NeedsShaderStableKeys=true
b.在 DefaultGame.ini 文件中,设置以下值:
[/Script/UnrealEd.ProjectPackagingSettings]
bShareMaterialShaderCode=True
bSharedMaterialNativeLibraries=True
或者打开项目,在项目设置-项目-打包下勾选对应设置。
c.如果你是从头开始,请确保 (Project)/Build/(Platform)/PipelineCache 中没有文件。烘焙器会在这个位置寻找记录的缓存文件。如果这是你首次采集PSO,此文件夹可能根本不存在。
d.打开项目,输入控制台命令r.ShaderPipelineCache.Enabled 1,打包项目。(以防万一,手动输入
2.采集PSO缓存
a.在设备中安装项目
b.在.\Android\data\com.epicgames.ProjectWuKong\files\UnrealGame\ProjectWuKong\下添加一个UECommandLine.txt,内容为:-logPSO
c.打开项目,执行尽可能多的路径。例如,运行应用程序的所有关卡,所有特效
d.Log中应该会有相关内容,如LogRHI: Display: Encountered a new compute PSO: 359318230
e.不需要一次采集所有PSO缓存,可以多次运行。
f.每次运行应用程序时,系统将在 Saved\CollectedPSOs\ 下生成记录的缓存文件(rec.pipelinecache),将所有缓存文件复制到电脑里。
3.转换PSO缓存
a.打开项目对应的平台烘焙缓存,如Android:
.\ProjectWuKong\Saved\Cooked\Android_ASTC\ProjectWuKong\Metadata\PipelineCaches\
将稳定的着色器密钥 (.shk) 复制到你放置 rec.pipelinecache 文件的文件夹。例如:F:\PSOCaches
b.打开win控制台,使用下面的参数运行ShaderPipelineCacheTools命令:
C:\UE_5.2\Engine\Binaries\Win64\UnrealEditor-Cmd.exe -run=ShaderPipelineCacheTools expand C:\PSOCache\.rec.upipelinecache C:\PSOCache\.shk C:\PSOCache\[YourPrefix]_[ProjectName]_[ShaderFormatName].spc
提供的文件名应该由以下内容构成:
[YourPrefix] – 任意字符串,通常指定采集发生的时间。例如,这可能是当前构建的变更列表。
[ProjectName] – 项目的名称。例如:ShooterGame。这必须与你的项目名称完全匹配,否则无法选取。
[ShaderFormatName] – 项目的着色器格式,必须与着色器格式的名称完全匹配。.rec.upipelinecache或者.shk文件命名上有格式。
例如D:\UE_5.2\Engine\Binaries\Win64\UnrealEditor-Cmd.exe -run=ShaderPipelineCacheTools expand F:\PSOCaches\.rec.upipelinecache F:\PSOCaches\.shk F:\PSOCaches\20250312_ProjectWuKong_SF_VULKAN_ES31_ANDROID.spc
或者
D:\UE\UE_5.3\Engine\Binaries\Win64\UnrealEditor-Cmd.exe -run=ShaderPipelineCacheTools expand E:\PSOCaches\++UE5+Release-5.3-CL-29314046-ProjectWuKong_SF_VULKAN_ES31_ANDROID_F9E60B6098FB425D9E07462CE6247B89.rec.upipelinecache E:\PSOCaches\ShaderStableInfo-Global-SF_VULKAN_ES31_ANDROID.shk E:\PSOCaches\ShaderStableInfo-ProjectWuKong-SF_VULKAN_ES31_ANDROID.shk E:\PSOCaches\20250422_ProjectWuKong_SF_VULKAN_ES31_ANDROID.spc
最后生成一个 .spc 文件。
4.应用PSO缓存
a.将生成的 .spc 文件放到项目\Build\[PlatformName]\PipelineCaches 文件夹中。例如:
b.再次打包项目,Log中应包含
5.测试PSO缓存
a.使用 -logPSO 命令运行新打包的应用程序,观察Log,应该能看见类似于以下内容的行
LogRHI: Opened FPipelineCacheFile: ../../../ProjectWuKong/Content/PipelineCaches/Android/ProjectWuKong_SF_VULKAN_ES31_ANDROID.stable.upipelinecache with 422 entries.
该数量必须与打包日志中写入的二进制PSO数量一致。
b.还应该检查构建是否在日志中打印"Encountered a new graphics PSO"。如果你在与缓存采集期间相同的条件下(例如相同的可扩展性设置)看到相同的内容,则不应出现此种情况。