1)UGUI和粒子特效的交叉应用问题
2)我的项目导入多个Spine动画合批后升高DrawCall问题
3)Font Texture占用内存问题
4)Unity Texture Streaming的疑难


这是第261篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

UGUI

Q:UGUI中粒子在滑动列表中应用时,须要将特效放在两个Image两头展现,如果将高低两个Image与特效都加Canvas后,滑动列表的Mask就不会起作用,有什么好方法吗?

A1:举荐一个不错的开源我的项目:Particle Effect For UGUI

感激张首峰@UWA问答社区提供了答复

A2:我也举荐一个不错的计划:UIEffect

感激马三小伙儿@UWA问答社区提供了答复</font>

Rendering

Q:我的项目中应用到了Spine插件,在场景中应用了大量的Spine动画,每一个动画就是一个DrawCall,场景应用60个动画就是同时存在60个DrawCall,有没有方法将其合批到一次或者几次绘制?

Spine动画都是这样的:

A:这里提供一种可能可行的方法:我的项目降级到URP,应用SRP Batcher对Spine进行合批。

首先在内置的渲染管线中,我在场景中复制了完全相同的10个的Binary导出的Spine和10个Json导出的Spine。如图,连齐全Copy的Spine动画都无奈合批:

那URP如何操作呢?不是所有的对象都能够应用SRP Batcher来渲染,Shader必须与SRP Batcher兼容。但默认的URP工程中并没有封装Spine应用的Shader。所以,Spine官网提供了对URP的反对:http://zh.esotericsoftware.co...。

下载官网提供的UPM包、通过PackageManager装载到应用Spine的URP我的项目中:

在URP的我的项目里,把测试用例稍作批改:我导入了两个图集、材质等因素齐全不同的Spine(Spineboy和Hero),来测试不同的Spine能不能被SRP Batcher合批。

资源导入结束后,把原来Spine资源的Shader改为URP版本的Shader。如下图,“Spine/Skeleton”改为了“Universal Render Pipeline/Spine/Skeleton”:

批改完后,查看Frame Debugger,所有的Spine的渲染都合并成一个Batch了,阐明SRP Batcher岂但能合批反复的Spine动画,更能使齐全不同的Spine动画合批。

感激Faust@UWA问答社区提供了答复

Memory

Q:Font Texture占用内存问题:真机连贯Profiler、真机连贯RenderDoc和Unity运行Profiler对应的Font Texture不统一,Unity版本:2018.2.16f1:

Unity运行Profiler:

真机连贯Profiler:

Unity连贯Profiler1:

真机连贯RenderDoc1:

A:因为我近期在做一些纹理相干的试验时发现局部Unity版本会使真机上Alpha8格局的纹理大小不合乎计算结果:

多台手机、多个版本的测试比照,看得出这种异样产生在了一些特定手机中(其余版本也有产生轻微内存变动的,但远没有2018.2版本幅度这么大)。

按理来说1024×1024分辨率的Alpha8格局纹理大小应为1MB,然而真机上是4MB。我测试的其余版本(2018.4、2019.2、2019.4、2020.3)中则失常为1MB。且Mipmap、Read/Write等选项的开关也不影响内存翻了4倍的状况。

联合本帖的问题,我做了如下比拟试验(真机上的内存数据我用了UWA GOT Online Assets运行时资源检测服务,能够清晰看到内存的小数点后两位)。

场景中应用了一张1024×1024 Alpha8纹理和原大小为0.5MB的Font Texture字体纹理。

  • 2018.4版本

编辑器中:1024×1024 Alpha8纹理 2MB
Font Texture 0.5MB

真机上:1024×1024 Alpha8纹理 1MB
Font Texture 0.5MB
Font Texture 0.125MB

  • 2018.2版本

编辑器中:1024×1024 Alpha8纹理 2MB
Font Texture 0.5MB

真机上:1024×1024 Alpha8纹理 4MB
Font Texture 1.25MB(0.5MB×2.5)
Font Texture 0.32MB(0.125MB×2.5)

留神,此处内存尽管增大很多,然而纹理格局并没有变动,还是Alpha8。和帖子的状况非常靠近。所以猜想是个别Unity版本的问题。

题主的版本是Unity 2018.2.16f1,和我试验的状况根本吻合。就是2018.2版本时Alpha8这种格局在真机上的内存大小会异样减少。如果这对我的项目有影响能够思考升到2018.4。

感激Faust@UWA问答社区提供了答复

Texture

Q:目标 :应用同一份资源,在低内存设施间接应用低级别Mipmap。

实现形式游戏启动调用:
QualitySettings.streamingMipmapsActive = true;
QualitySettings.streamingMipmapsAddAllCameras = true;
QualitySettings.streamingMipmapsMaxLevelReduction = 2;

资源设置有开启Mipmap:
(SystemInfo.supportsMipStreaming == true )

理论运行成果跟下面三个办法是否调用没有关系。不知是办法调用谬误,还是了解谬误,望解答。

A1:要是单纯想要应用低级别Mipmap,那么不须要Texture Streaming。运行时将TextureQuality改成Half Res或者更低的即可。

感激范世青@UWA问答社区提供了答复

A2:如果是在编辑器外面测试,记得在Editor Settings外面勾上Enable texture streaming in edit mode。Scene窗口的模式能够调成Texture Streaming,看看到底需不需要加载第N层的图片。

感激萧小俊@UWA问答社区提供了答复

20210802
更多精彩问题等你答复~

1.Shader多pass渲染的程序问题
2.Unity层通明Render over native UI
3.如何实现AAB包的增量更新

封面图来源于:Particle Effect For UGUI
此插件为Unity 2018.2+中的UGUI提供了一个渲染粒子成果的组件。


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:793972859(原群已满员)