资源管理
Q1:最近的项目使用了AssetBundle的资源管理方案,对于Shader的部分全部放到了Always include里面(这里不仅是系统内置的Shader,还包括自定义的Shader),然后打Bundle资源的目录里是不包含任何Shader的。但是现在发现,Shader还是被作为依赖关系打进了最终的Bundle里,而且造成了冗余,问问大家有没有遇到这个情况呢?我的Unity版本是5.3.4f1。
首先,只要资源在工程里并且需要用到它,就会被打包进AssetBundle。然后Always include里built-in Shader不会被打包进AssetBundle,这是一个特例。这个特例仅限于没有放到工程里的部分,有些项目会自己下载built-in Shader放到工程里,这样的Shader和自己写的没有区别,也会被打包。 最后,你遇到的问题是正常现象,需要你们通过资源管理的策略避免掉。
此问答来自于UWA 问答社区,感谢 Walker的回答。
https://answer.uwa4d.com/question/595c56283a75401430781007
如您对该问题仍有疑问,可以转至社区进行进一步交流。
资源管理
Q2:自定义Shader放入Always include里面,造成Bundle 资源冗余。项目中的某一个自定义的Shader 使用了Shader feature ENABLE_CLIP,Shader被打进最终的Bundle包的时候,这个Shader feature 不起作用了,是因为这个Shader Variant没有被打入最终包吗,官方文档里的说明是:
the only difference is that unused variants of shader_feature shaders will not be included into game build. So shader_feature makes most sense for keywords that will be set on the materials, while multi_compile for keywords that will be set from code globally.
但是我确实有个材质是使用了这个Shader Feature的,为什么这个Shader Variant 没有进入最终的Bundle包呢?
据了解,Unity官方有在英文论坛里提到Asset Bundle team正在解决这个问题。如果不将Shader对应的Material与Shader一同打包,当前另外的解决方案包括:
- 使用dummy materials / ShaderVariantCollection 与shader打在同一ab内。
- 使用multi_compile替换shader_feature。
研发团队可以参考以上方式进行下尝试。
此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/595c9ec472c96d467bd7cfad/
如您对该问题仍有疑问,可以转至社区进行进一步交流。
资源管理
Q3:我把FBX和粒子系统分开打包了。加载的时候先加载FBX文件,然后再加载粒子系统,结果那些粒子系统是Mesh模式的时候,它们的UV会消失。怎么办呢?开了Read/Write able就不会消失。不分开打包也不会消失,这种情况如何破?
建议考虑在 FBX 的 AssetBundle 里再放一个带粒子系统,并且引用这个 Mesh 的 Prefab(但不去加载,也不去使用它),只是为了让 UV 可以被正确获得。 理论上这样做的话,基本不需要修改原来的加载方式,也不用开Read/Write。
渲染
Q4:想问下,下图这一项是指渲染透明物体的渲染消耗么,主要是提交DrawCall是么,现在游戏的GPU消耗在20ms以内Xcode Profiler结果。但是有些粒子系统比较耗CPU,就是这个涨得比较厉害,峰值有7~8ms,请问有没有什么优化建议?
首先,需要说明的是,Draw Call是CPU端的耗时开销,XCode上GPU上的开销统计与其关系不大。其次,图中红框所示确实表示的是半透明物体渲染在CPU端的耗时,其不仅与Draw Call数量相关,也和渲染State的切换相关(从图中可以看出,项目使用的是Unity 4.x版本,对应的需要关注Shader.SetPass的开销)。再次,粒子系统的耗时开销很高,如果还是持续在7~8ms左右,那么研发团队关注较高耗时处的游戏场景,并控制粒子系统的使用数量,粒子系统的优化并没有“神奇”的方案,目前研发团队需尽可能控制粒子系统的使用数量,研发团队可以参考此文:UWA性能报告解析—粒子系统篇。
原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。