PSO缓存可提前为你的应用创建并存储最常用的管线状态对象数据,以提高渲染性能,尤其是在运行应用程序时减少卡顿。本指南提供了在虚幻引擎(UE)中为Android项目实现PSO缓存的操作说明。
本页面提供了捆绑的PSO缓存方法的说明,该方法是UE 5.2及更早版本中使用的旧版手动PSO缓存系统。我们推荐使用5.3及更新版本中的PSO预缓存系统(如果对你的项目可行)。请参阅PSO预缓存的文档,了解更多详情。
必要设置
要学习本指南,你需要以下内容:
-
以Android为目标平台设置的虚幻引擎项目。
-
兼容你当前虚幻引擎版本的Android SDK和NDK版本。
-
启用了开发者模式和USB调试的兼容Android测试设备。
如需详细了解哪些Android设备兼容你的虚幻引擎版本,请参阅Android开发要求
为PSO缓存进行项目设置
要配置你的项目设置以支持PSO缓存,请执行以下步骤:
-
在虚幻编辑器中打开你的项目。
-
打开 编辑(Edit) > 项目设置(Project Settings) 。
-
找到 项目(Project) > 封装(Packaging) ,并确保 共享材质着色器代码(Share Material Shader Code) 和 共享材质原生库(Shared Material Native Libraries) 都已启用。
-
在下一步中,你需要手动编辑配置文件。因此请先关闭虚幻编辑器,以免你的手动编辑与项目设置冲突。
-
打开项目的
Config/Android文件夹,然后打开AndroidEngine.ini。添加以下设置:[DevOptions.Shaders] NeedsShaderStableKeys=true
运行你的游戏并收集PSO
现在你的项目设置已兼容PSO缓存,请在启用 -logPSO 命令行的情况下运行项目版本。
-
确保你的测试设备已连接到你的计算机。
-
在虚幻编辑器中打开你的项目。
-
点击 平台(Platforms) > 项目启动程序(Project Launcher) 。
-
在项目启动程序中,点击 + 添加(Add) > 创建自定义配置文件(Create Custom Profile) ,创建新的启动配置文件。
-
将你的配置文件重命名为 PSO Caching - ETC2 。
-
在 你想如何烘焙内容?(How would you like to cook your content?) 旁边的下拉菜单中,点击 按常规烘焙(Cook by the Book) 。
-
选择 Android_ETC2 作为你的目标平台。
-
在 部署(Deploy) 下,选择你的移动设备作为目标设备,并将 变体(Variant) 设置为 Android_ETC2 。
-
在 启动(Launch) 类别下,将
-logPSO命令添加到 额外命令行参数(Additional Command Line Parameters) 。
你可以使用 Android文件服务器(Android File Server (AFS)) 将
-logPSO命令添加到你设备上的现有应用版本中的UECommandLine.txt文件。如需更多详情,请参阅AFS的文档。 -
启动你的配置文件。UE会编译并打包项目,然后将其部署到你的设备。
-
运行完你的游戏。每当你的游戏记录新PSO时,输出日志都会显示消息。
之后再运行PSO收集会话时,你可以复用你在此小节中创建的配置文件。
关于收集PSO的提示
你收集的PSO越多,当你打包最终应用时,游戏的启动时间就越长,因为必须加载所有PSO后,用户才能开始运行游戏。因此,我们建议专门在你确信常用并有显著卡顿的位置收集PSO,因为这些位置的PSO缓存能为用户体验提供最多的提升。
只要一个位置发生重大更改,之前为该位置收集的PSO将变得过时。因此,请确保在整个开发过程中经常收集PSO。
从你的设备检索已收集的PSO数据
记录你的PSO后,你需要从你的测试设备检索数据并将其整合到新版本中。要检索你的PSO数据,请执行以下步骤:
-
将你的测试设备与计算机断开,并关闭你的游戏。
如果你尝试从项目启动程序关闭游戏,你的设备可能不会保存它记录的PSO数据。
-
关闭你的项目,并将你的测试设备重新连接到计算机。
-
从以下目录提取PSO:
Internal Storage/Android/Data/[package name of project]/files/UnrealGame/[project name]/Saved/CollectedPSOs你可以使用以下任一方法提取CollectedPSOs目录中的内容:
* 使用Android文件服务器(AFS)运行以下命令:
UnrealAndroidFileTool -p [package name] -k [security token] pull ^saved/CollectedPSOs [destination path]* 将你的设备连接到计算机,并使用计算机的文件系统找到PSO的位置。
-
将
.UPIPELINECACHE文件复制到你的计算机上可轻松访问的位置。此示例使用了项目目录中名为Import/PSOFiles的文件夹。
编译最终PSO缓存数据并将其添加到你的项目
要将你的PSO缓存整合到版本中,请执行以下步骤:
-
打开你的项目文件夹并找到Saved/Cooked/Android_ETC2/[项目名称]/Metadata/PipelineCaches。将此文件夹中的文件复制到Import/PSOFiles中。
-
打开你的命令行工具并找到你用于开发项目的引擎版本的安装目录,然后找到Engine/Binaries/Win64文件夹。例如:C:/Program FIles/Epic Games/UE_5.2/Engine/Binaries/Win64。
-
运行以下命令行:
UnrealEditor-Cmd.exe "YourProjectPath.uproject" -run=ShaderPipelineCacheTools expand C:\PSOfiles*.rec.upipelinecache C:\PSOfiles*.shk C:\PSOfiles\"Alias Name"_"Project Name"_"Used Graphics API".spc -
命令行成功运行后,Import/PSOFiles目录应该包含新的PKCS #7证书文件。将其复制到你的项目的Build/Android/PipelineCaches文件夹。
-
重新编译并再次启动你的游戏。新版本就包含了最终PSO缓存数据。
结果
启动时,你还应该会看到一条日志消息,声称加载了多少PSO。运行你的游戏时,在你收集过PSO的位置上,所有渲染卡顿都应该会得到解决。