PSO入门和踩坑史
前言
管线状态对象(PSO)缓存工具可用于减轻虚幻引擎4关卡加载内容块时出现的卡顿,
比如在进游戏第一次开枪, 开枪的火花特效就会造成卡顿
这些现象在性能较弱的移动端尤其明显
本文简单记录一下PSO的整个流程, 目标平台Meta Quest2(Android), 版本4.27-plus
借用官网的图, 下面开始整个流程, 当中踩了不少坑, 一部分要归功于不是很有条理的官方文档
建议严格按照本文的笔记进行, 当中有不少容易踩的坑
收集缓存
要收集缓存的前提是为项目开启ShaderStableKeys
我们是在安卓平台的, 那么就要在Project\Config\Android\AndroidEngine.ini
文件(没有就新建)内添加下面2行
1 | [DevOptions.Shaders] |
如果不添加, 那么这一步的数据就得不到,
这里不得不提一下第一个坑, 来自官网的错误, 4.27已经将后缀为scl.csv
的文件改成了shk
了
因为接下来要打包, 在打包之前添加几个渲染参数, 这个可以借鉴官网的方式
选择对应平台, 添加console变量, 图上的是必须的
还可以用同样方式添加额外的2个变量, 用于开启相关日志
1 | r.ShaderPipelineCache.LogPSO=1 |
或者, 直接把这些控制变量添加到DefaultEngine.ini
中
1 | Config/DefaultEngine.ini |
接下来的目的是完成cook, 官网通过ProjectLaunchuer
来cook, 如果你对此不熟悉, 那么完全可以用直接打包或者launcher游戏来进行
cook后会产生下面2个文件(项目图形api选的是vulkan)
跑图
上面已经打包了, 接下来就是跑图, 尽量跑尽各个角落, 触发各个带材质的效果
然后就能在设备的游戏路劲内发现后缀为.rec.upipelinecache
的一个文件, quest2的路径为下图
拷贝出来, 可以将前面的2个,shk
和这个文件放一起, 本案例都放在了E:\PSO
内
所以到这一步应该拥有下列3个文件
生成csv
这一步的官方文档
接下来我们的利用引擎自己的command工具, 将上述3个文件生成一个新的csv
文件, 这个文件记录了所有需要的shader
信息
找到引擎 Engine\Binaries\Win64
下的UE4Editor-Cmd.exe
, 创建快捷方式,建议把这个快捷方式一起丢到我们的数据文件目录
接下来就是给快捷方式添加一串启动指令
又是坑, 按照官网说的输入命令保证就让人痛不欲生了
我这里最终的指令是如下,项目路径替换成自己的, E:/PSO/
是放数据的路径
1 | 项目路径/NextVR.uproject -run=ShaderPipelineCacheTools expand E:/PSO/*.rec.upipelinecache E:/PSO/*.shk NextVR_SF_VULKAN_ES31_ANDROID.stablepc.csv |
如果是图形是GL, 文件名称应该是项目名称_GLSL_ES3_1_ANDROID.stablepc.csv
运行以后生成如下文件
这里很有可能没有在当前目录生成这个文件, 去引擎的Binaries/Win64
下找
如果没有生成, 那一定是前面哪一步做错了
再次打包
到这里我们已经有了所需要的数据文件了
把这个.stablepc.csv
文件放到Build\Android\PipelineCaches
中,
注意: 这个路径只跟发布平台有关, 不管Android-ASTC还是其他都统一是Android
然后打包, 正常情况, 打包 的时候会出现若干条下面格式的日志
1 | "Loaded %d shader info lines from %.*s." |
如果没有报错, 那么打包就是成功了, 确保万无一失, 去设备的游戏路径下查看
在Content
下会出现一个新的叫PipelineCaches
的文件夹, 里面有一个后缀是.stable.upipelinecache
的数据文件, 这就对了
完成!