最近遇到这个问题,有时候复杂的shader 编译会花几百毫秒,所以研究了一下,有以下几点可以优化:
1. Shader Cache, 这个是引擎肯定要支持的,不可能每次渲染都编译,把结果的handler存起来。
2. Async Compile,异步编译也非常好理解,主线程跑起来就是,只是需要渲染的物体可能会延迟几帧才会被渲染出来。
3. Offline Compile,把编译结果的机器码存下来,需要的时候从硬盘上读取。不过这种方式会让游戏的数据变大,不过不是时间换空间就是空间换时间,总是要有舍取。
现在看来,都多核了,当然异步编译应该是比Offline编译要好,时间不会长,空间也节约了。