使用Sprite Packer对UI图集进行打包的问题

1)使用Sprite Packer对UI图集进行打包的问题
​2)Unity处理视锥剔除的问题
3)Profiler查看Shader.CreateGPUProgram的具体Shader信息
4)PPS的UberPost内存占用较高


这是第270篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

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

UI

Q:使用Sprite Packer对UI图集进行打包:
1. 使用系统自带的Sprite Packer打包,图集大小设置成1024,这样打出来的图集会分为好几个Group,那么相同图集不同Group能够合批吗?

2. 由于Sprite Packer是自动分配的Group,这种情况下打开功能的时候是所有Group都会加载的,那么这种设置1024是否还有必要,改成2048会不会好一点?

3. 图集设置成2048变大了,对加载速度和内存有影响吗?这个需要按图集里图片数量多少做不同的设置吗?

A:可以参考以下答案:

  1. 不同Group是不会合批的,一般也没有UI图集大小的建议。

  2. 最好自己手动控制图集的Group,在UI制作时可以以UI Prefab为单位收集一下哪些Group的图集是当前UI需要使用的,加载UI预设时按需加载对应的Group就好了。

  3. 如果图集中的图片资源都用到了,同时图集的填充率也差不多,那加载1张2048和4张1024,对加载影响可能并不是很明显,内存占用也是一样的,但如果2048填充率并没那么高,或许1024的会比较好。

该回答由UWA提供


Rendering

Q:最近在研究场景管理的问题,想了解Unity是否有处理视锥剔除,于是做了测试(Unity 2020.3.11f)。创建了两个Cube,移动第二个Cube,对比顶点数量变化。

 

 

 

 

为什么同样在视锥体范围内,批次和顶点数会不同?当第二个Cube不在视锥范围内,顶点数也可能不同,那Unity是否有视锥剔除,其处理逻辑是怎么样的?

A:应该是灯光绘制ShaowMap时候,投影的范围将那个相机外的Cube包进去了,受Light的影响,关了Light就可以了。

感谢范世青@UWA问答社区提供了回答


Shader

Q:由于目前项目Shader挺复杂的,变体也非常的多,如果用ShaderVariantCollection的方式解析一次耗时太高了,而且如果用Shader.CreateGPUProgram耗时很高并且频率也很高,所以就想问下:有没有什么办法可以知道是哪个Shader造成的?这样我才好做策略去解决。

我以前Unity 2017是能够知道哪个Shader造成的,在Profiler里面可以把Shader.CreateGPUProgram继续展开,但是现在Unity 2018.4.36不行。

A:Profiler的Timeline视图可以看到。

感谢黄晓文@UWA问答社区提供了回答


Shader

Q:URP项目,下面这个Shader是做什么用的?有没有相关的变体算法和优化建议,谢谢。

 

A:UberPost是一个大杂烩,有好多处理都集中在这里,项目确定不用的变体之后,就可以用#pragma skip_variants xxx 跳过。例如:#pragma skip_variants _TONEMAP_NEUTRAL _DITHERING。

感谢怀特@UWA问答社区提供了回答

 

 

20211011
更多精彩问题等你回答~

  1. Unity增量打包AssetBundle没变化的资源也会被重新打包
  2. 在模型有UV2的情况下开启Generate Lightmap UVs
  3. 如何实现AAB包的增量更新

封面图来源于网络


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

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

posted @ 2021-10-13 18:21  UWATech  阅读(144)  评论(0编辑  收藏  举报