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(原群已满员)