UE4.27 PSO Caching
发布网友
发布时间:2024-10-04 11:01
我来回答
共1个回答
热心网友
时间:2024-10-05 03:25
UE4.27引入的PSO Caching系统是一个全面的渲染状态缓存解决方案,相比之前的FShaderCache,PSO Caching不仅缓存了Shader代码和二进制ByteCode,还额外缓存了渲染状态信息。这使得缓存集涵盖了渲染所需的全部关键信息,如顶点声明、Primitive类型、RenderTarget像素格式等,向Vulkan的Pipeline Cache理念致敬。
PSO Caching通过存储Shader路径的SHA1 Hash作为唯一索引,而非直接保存Shader代码或路径,确保了高效且可靠的管理。Shader的真正内容由FShaderCodeLibrary负责。缓存过程涉及稳定ShaderKey的生成和PSO数据的收集与保存。
启用ShaderStableKeys是PSO Caching的第一步,这在执行Cook时生成稳定的ShaderKey。通过在ProjectName/Config/DefaultEngine.ini(或平台相关配置文件)中添加特定值来开启此功能。执行打包后,会生成稳定ShaderKey的目录,以及对应项目和引擎的文件。
运行时捕获PSO数据通过添加-logPSO参数或修改配置文件来实现。官方文档建议通过ProjectLauncher启动游戏,添加-logPSO参数并使用ADB连接手机来收集数据。对于无法连接的情况,可修改AndroidEngine.ini打包安卓版本至手机进行数据收集。
收集的PSO数据以*.scl.upipelinecache文件形式保存在手机的存储路径下。为了进一步处理这些数据,生成*.stablepc.csv文件,这一步骤结合了UE4和UE5的文档指导,通过创建文件夹和CMD脚本整合相关文件进行操作。
生成*.stable.upipelinecache文件是关键步骤。这涉及到将*.stablepc.csv文件放入本地Build/Android/PipelineCaches目录下,并进行打包。通过执行特定命令,引擎在Cook时使用stavlepc.csv创建PipelineCache,从而实现PSO缓存的生成。通过研究源码和编译日志,我们得出流程包括创建shk文件和执行相关代码片段,最终生成特定目录下的缓存文件。
验证PSO缓存成功启用后,打包的应用在启动时会显示日志信息,确认了缓存已激活。通过这种方式,UE4.27实现了高效、全面的渲染状态缓存管理,显著优化了渲染性能。