关于Unity 5.x Lightmap Shader 编译过慢的分析

来源:互联网 发布:qq群淘宝客机器人免费 编辑:程序博客网 时间:2024/04/28 06:42

关于Unity 5.x Lightmap Shader 编译过慢的分析

  • 缘起
    最近在研究Unity 5.x 的 Lightmapping 与 场景打包的相关的知识。发现坑深啊。关于怎么打包怎么用网上的教程太多了,就不再鳌述,在最后Lightmap和Scene可以通过bundle正常使用,却画不出颜色。翻阅很多的资料知道,这个问题和5.x之后的新功能 Shader Scripping有关。

  • Shader Scripping
    这里写图片描述
    这里选项的功能翻查了手册得知是和最终编译剥离冗余Shader和变量相关的设置项。如果选择Automatic, 在编译时,引擎会根据当前场景的Shader引用情况来觉得带哪些Shader功能进游戏,不需要的Shader会在这个环节被自动剥离掉。
    因为很多游戏一开始都是个空的Loading界面或者Logo界面,游戏里毫无Lighting, 所以Automatic就认为你完全不需要光照烘焙,智能的把相关Shader都剥离了。(汗)
    解决方案就是换智能为手动,这样理论上说妥妥的,因为和Lightmap 相关的代码肯定完整编进去了。然而问题出现了,当选择手动后,编译bundle神慢,慢到神么程度,就是整个进程半个小时都不会动一下。
    打开Log日志发现卡死的地方正是在Shader Compiling这一道上,由于没有剥离冗余功能,编译器要带着完整的Shader功能向各个平台版本做转化,不慢就出鬼了。
    好在Unity自己也想到大部分走到这一步的人会开始骂娘,于是聪明地在一窜勾选项后面加了个智能检测按钮。
    这里写图片描述
    那么现在我们只需要打开一个有最复杂GI Baked场景,然后按一下这个按钮检测一遍,Unity就把你不需要的东西勾掉了。
    这里写图片描述
    再次提交编译,编译过程再次回归丝滑。Y >_< Y

原创粉丝点击