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。 添加以下设置:C++[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。
运行以下命令行:
C++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的位置上的所有渲染卡顿都应该会得到解决。