本文操作环境:Windows7系统、Dell G3。
pso缓存是什么?
PSO 一是指工艺认证(Process Sign-Off),此为客户对供应商/代工厂进行的生产工艺流程的审核;二是指微粒群优化算法。
当Link完了之后,生成一个program,我们会拿到这个data,把它存下来,存在一个文件里。我做了一个虚拟的文件系统,这个虚拟文件的key就是那段program的data。存下来以后,当第一次运行游戏时这个文件是空的。
每次都会Link,然后存进去。当第二次运行的时候,情况就会变好了。以前曾经Link过的,我直接在文件里找到,通过这个Program加载进来,也不需要去设置Shader,也不需要Link,直接就可以用了。
第三个是多个PSOcachefile。UE4自己有一个功能是对PSO的缓存,原来是叫Shadercache,后来改成pipelinecache。他只有一个文件,我们改进了这个功能。在录的时候,我们可以录很多个文件。
比如我们在打Boss战的时候,那个Boss以前从没出来过。他一出来,不管你是Link还是怎么样,反正他会卡顿。因为就算是你Link了,他往显卡送的那一刻,往镜头送那一刻,他也会有一定的时间开销。然后当那个Boss从来没出现过。
一出来就卡一下,这个效果不太好。还有就是我们游戏运行Loading完了之后,我们需要播一个CG,那个CG有很多也是游戏不太用到的资源,它也会卡一下。我们还是想用引擎的PSO功能,记录的功能,然后把它预热一下。
但是一个不够,尤其是出现怪物的时候。然后我们就做了一个录不同的PSO的cache。PSOcache需要录渲染所有的参数,Shader,各种参数都录下来。录下来之后当你需要播这些、需要画这些文件的时候,它会在后台给你把这些东西跑一遍。
这样的话,当你真正渲染模型的时候就不会卡顿,我们做了多个这样的文件。比如说,在这个Loading条结束的时候,我们需要播CG,那在Loading条结束的时候,就加载这个场景所对应的记录好的文件。当这个CG播放的时候就会非常的平滑。
没有一丝的卡顿。对于boss也是这样,快到播boss的时候,我们也在后台把这个cache文件加载进来,做一下这样的预热,就会达到非常好的平滑效果。今天的分享大概就是这些,非常感谢。