技术分享连载(六十二)-阿里云开发者社区

开发者社区> 人工智能> 正文

技术分享连载(六十二)

简介:

资源管理

Q1:在Unity 的 Profiler里,有些记录右边会有Warning的个数信息,请问这个是否影响性能,或者是否有必要修改呢?

请输入图片描述

这种字符的出现很可能会导致后续的物理更新出现较大的性能开销,包含在Physics.Simulate/Processing中。出现这种情况主要是受限于Unity版本中的PhysX在移动静态碰撞体是开销较高的问题(虽然文档中说5.x下已经解决,但我们确实发现在5.x的项目中该项仍然存在)。因此,我们建议给需要移动的Collider加上RigidBody并勾选Is Kinematic复选框,从而将其变为动态碰撞体,如下图所示。对于不移动的物体,则直接将模型的Apply Root Motion选项进行关闭,从而直接省去Static Collider.Move的性能开销。
请输入图片描述


资源管理

Q2:我们设置了TargetFrameRate为30,想避免过高的耗电和发热,请问这样做是合理的么?

这种设置仅在帧率本身很好的情况下,才会起到减少耗电和发热的作用。但如果本身游戏已经较为卡顿,那么该设置方法意义不大。对于耗电和发热,研发团队需从CPU、GPU和IO入手,尽可能降低这三方面的负载压力,比如:

(1)CPU:针对UWA性能测评报告中的Top10函数进行优化,根据性能堆栈定位性能根源并进行优化;
(2)GPU:针对报告中的OverDraw对GPU负载较大的根源进行完善和优化;
(3)IO:尽可能控制资源加载的粒度和网络传输的频率。对于资源粒度的划分,我们曾有过较为深度的分析:可以参考《技术分享连载五十九》。


图形渲染

Q3:我们美术在制作场景地面的时候,会有如下图所示的非常明显的一条模糊和清晰的分割线。我清楚这是由于Mipmap的使用导致的,我们不想让这条线这么明显,初步的想法是设置Texture的mipMapbias这个参数,这个参数没有在Texture的配置界面上提供。
请输入图片描述

Q3.1:想问下Unity有没有办法全局设置这个值?或者只能像我们现在这样在贴图导入的时候由脚本来设置?官方给的这个值的建议是“Note that using large negative bias can reduce performance, so it’s not recommended to use more than -0.5 negative bias.”,按照我之前的理解,这应该对应到Mipmap偏移层数的设置,应该是个整数。

目前来说我们没有发现能全局设置的办法。

Q3.2:不清楚这个建议不超过-0.5的值具体含义是对应几层Mipmap偏移?我们也尝试了Trilinear的Filter Mode设置,并没有明显的效果,按理说这个设置应该是会让mipmap采样两层中的8个点进行混合,这点也有点奇怪。

Mipmap的层级数的确是一个整数。mipMapbias是由Unity引擎定义的一个参数,按照Unity官网解释来看整数代表了比当前层级更低(级数更大,更模糊)的Mipmap,负数代表了比当前层级更高的Mipmap。“-0.5”具体是偏移多少层级目前也不是很清楚。

Q3.3:我们也尝试了Trilinear的Filter Mode设置,并没有明显的效果,按理说这个设置应该是会让Mipmap采样两层中的8个点进行混合,这点也有点奇怪。

Trilinear应该是会比Bilinear效果好一些,但是也差强人意。原因是这样:传统的Mipmap(不采用Anisotropic Filtering)都是每层将u,v两个方向缩减一半,即:512x512的下一层是256x256。这就导致在两层交界处在不同层采样出来的纹理在u,v两个方向都被拉伸(或者叫变模糊)。Anisotropic Filtering的方式可以简单理解为在交界处只在某一个方向上被拉伸,另一个方向保持原有采样率(或者叫纹理分辨率),这样才能明显降低突变的模糊感。

Q3.4:目前我们给美术的建议是使用Aniso Level,调整一个比较高的值,比如大于6,会有比较理想的效果,但是查了一下这个的性能消耗貌似很大,不知道UWA有没有对这个参数做过性能的分析,具体的性能消耗有多大?

使用Anisotropic Filtering不仅纹理内存占用会增高,而且采样率也增高(因为有一个方向的保持不变),因此它比传统的mipmap更耗时,耗时在于GPU端对纹理进行采样时增加了访存,在CPU端没有影响。虽然Anisotropic Filtering 耗时增加,但是相比于直接增加mipmap level(也就是设置-0.5的偏移),要达到相同的效果,Anisotropic Filtering的时间耗时还是相对更低的。这个参数影响的是GPU端的时间开销,我们没有单独统计过,研发团队可以尝试提交一个版本到UWA网站上(www.uwa4d.com),我们从整体效率进行分析检测。

此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/590198b09db5d16c66166148
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q4:我们使用的是Resources.Load和LoadAsync的方式加载资源,这个与AssetBundle的方式比较,能大概帮解释一下优劣么?

目前大量项目都在使用AssetBundle进行加载。相较于Resources加载,其好处有如下几个:
(1)游戏启动更快,Resources文件夹下文件数量越多,游戏启动越慢,而AssetBundle的使用可以极大减少Resources文件夹下的文件数量;

(2)更方便于资源的加载和热更新,AssetBundle可以让资源组织更为灵活,根据项目的不同情况,可以更为方便地对部分模块进行预加载或热更新。


资源管理

Q5:在Unity工程里启动游戏时,会有大量的Warning(类似定义了没有使用的变量这样的Warning)请问这个对真机的性能是否有影响,是否有必要修改掉这些Warning?

如果在真机运行时,依然会存在这些Warning,那么对于性能来说是有影响,建议尽可能将其去掉。而像问题中提到的"类似定义了没有使用的变量这样的Warning",这种属于编译时候的Warnning,是不影响运行时性能的。





原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章