技术分享连载(七十一)

news/2024/7/10 4:20:29 标签: shader, 渲染, 粒子系统, 优化

原文链接:https://blog.uwa4d.com/archives/1897.html

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。
UWA QQ群:465082844
UWA 问答社区:answer.uwa4d.com


资源管理

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性能报告解析—粒子系统篇。


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站(answer.uwa4d.com)上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
官方技术QQ群:465082844(仅限技术交流)



http://www.niftyadmin.cn/n/1031853.html

相关文章

关于c语言的安卓软件,C语言英才宝典app

C语言英才宝典app是一款专门为由空闲时间,想提升自我的人打造的一款专业学习应用。本应用集合多为名师共同整理,各路专家给你解题,分析习题,让你学习无疑问。喜欢的用户欢迎下载。关于C语言英才宝典由多位名师共同整理,各路专家为…

技术分享连载(七十二)

原文链接:https://blog.uwa4d.com/archives/TechSharing_72.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群&am…

技术分享连载(七十三)

原文链接:https://blog.uwa4d.com/archives/TechSharing_73.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群&am…

C语言编译器的历史,请问这样的C语法在哪个编译器是允许的?-应该相当有历史的编译器...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼找到一个开源项目。它有这样的语句:[code]#ifdef MOUSE#ifdef GRAPH#ifndef ISG"If MOUSE is defined X11, WIN, MSG, BGI, or MACG must be too"#endif#endif /* GRAPH */#endif /* MOUSE */[/code]而且它还…

技术分享连载(七十五)

原文链接:https://blog.uwa4d.com/archives/1981.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群:4…

c语言商品销售课程设计,(终稿)C语言课程设计_服装销售管理系统.doc(OK版)...

《C语言课程设计_服装销售管理系统.doc》由会员分享,可免费在线阅读全文,更多与《(终稿)C语言课程设计_服装销售管理系统.doc(OK版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、Comany[];商品厂家floatroductPrice&…

技术分享连载(七十六)

原文链接:https://blog.uwa4d.com/archives/2000.html 我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。 UWA QQ群:4…

c语言ll 1 语法分析器,LL(1)语法分析器的设计与实现

LL(1)语法分析器的设计与实现作者:万能超指导老师:张玉州摘要:语法分析是编译器的核心部分。词法分析只是将字符形式的源程序中的各个单词识别出来,形成单词的机内表示形式,但是这些单词串如何构成更大的语法成分—语句…