1. 手动采集PSO的话有什么好的经验吗?因为项目关卡特别多,怪物都是随机刷新的,特效也很多,能不能做一个专门用来收集PSO的关卡,在里面逐个放置特效这样做?以及有什么注意点,比如光照对Shader变体生成的影响?
2. PSOPrecache这个功能和手动采集是分开的吗?有什么比较推荐的做法吗?
1. 手动采集PSO的话有什么好的经验吗?因为项目关卡特别多,怪物都是随机刷新的,特效也很多,能不能做一个专门用来收集PSO的关卡,在里面逐个放置特效这样做?以及有什么注意点,比如光照对Shader变体生成的影响?
2. PSOPrecache这个功能和手动采集是分开的吗?有什么比较推荐的做法吗?
您好,官方文档里其实已经提到了您说的问题,在Q&A里面 https://dev.epicgames.com/documentation/zh\-cn/unreal\-engine/manually\-creating\-bundled\-pso\-caches\-in\-unreal\-engine
总结一下就是可以这么做,但有时候这样可能无法全面收集到所需的PSO。可以多个关卡一起收集(多台设备上不同的人同时进行),然后合并生成的upipelinecache文件,当然更好的是可以通过自动化测试框架进行
如果是延迟渲染,光照数量不会影响PSO数量,但是静态光照/是否使用光照贴图、不同顶点工厂/材质静态开关等,会改变着色器组合和顶点声明,从而产生不同 PSO
precache和手动采集(我们称为Bundled PSO)是两套流程
precache不需要预先收集,而是在第一次运行的时候,在加载阶段会提前创建PSO(而不是渲染的时候创建)
如果开启 r.ShaderPipelineCache.ExcludePrecachePSO,可以让被precache下来的PSO不被记录到bundledPSO中,这样可以减少BundledPSO的数量
可以理解为两者是互补的关系