Font Texture的内存值异常高
1)Font Texture的内存值异常高
2)UWA报告Overdraw的统计以及数据解读疑问
3)URP安卓平台下,高光有马赛克
4)UGUI因为Different Material Instance导致合批被打断
5)Unity地形TerrainData里面的SplatAlpha的压缩疑惑
这是第255篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
Font
Q:我们的检测报告中看到一个占用很大的Font Texture,且是从刚进入游戏就一直存在。不过我想不通的是它仅有256*256,为什么会有61MB的占用?
版本:Unity 2019.4.3f1
A:在2018中没有见过这种问题,应该是Unity 2019的Bug,在Unity 2019.4.21中修复了。
感谢Xuan@UWA问答社区提供了回答
Rendering
Q:在UWA的测试报告中,我们游戏的整体Overdraw比较高,我想在内网复测一下Overdraw数据,有几个问题想请教一下:
1. 我使用UnityOverdrawMonitor在Editor中测试整个场景的Overdraw,测试结果要比UWA的小一些,我又测试了几个相同的画面,都是UWA上的结果值更高一些,这个工具的统计值比UWA报告中的总填充数要小一点点,想问一下大家是怎样测试游戏中某个时刻的Overdraw?
2. UWA报告中这几个数据的关系是怎样的?总填充数、平均填充倍数和单像素最大填充数等。
3. 关于其它工具,我把ParticleEffectProfiler拿到内网,它可以统计单个特效的单像素最大填充数,测试了几个单独的特效,Overdraw高的达到了4、5、6,大多数特效都是2,已经整理出Overdraw过高的特效给美术去优化了。
PS:由于公司项目是在内网开发,所以项目在Editor中的数据没法截图,我贴几张UWA上的报告截图:
A:1. 如果UnityOverdrawMonitor是以下这个开源工具:https://github.com/Nordeus/Unite2017/
那么,这里面的统计是不准确的,因为它的底层原理是通过Shader Replacement把Shader换成半透明的Shader来进行渲染,从而计算其Overdraw,这个并没有考虑深度遮挡、剔除等问题,所以计算出来的值是有问题的,有时候甚至会引起不必要的误导。
- 这些数值的具体说明可见:《UWA新功能| GPU性能优化,One Step!》
总填充数峰值
项目运行过程中,单帧填充像素的数量峰值。总填充数均值
项目运行过程中,平均每帧的填充像素数量。填充倍数峰值
项目运行过程中,单帧中整个屏幕被填充的倍数峰值;倍数越高,则GPU的压力越大。填充倍数均值
项目运行过程中,平均每帧的填充的倍数均值;倍数越高,则GPU的压力越大。从截图中看,你们的特效Overdraw压力还是不小的,建议题主特别留意。
该回答由UWA提供
Rendering
Q:最简单的场景,包含一个Unity默认球体,使用URP Lit Shader。
在编辑器中显示正常:
工程输出到安卓之后,高光部分马赛克非常严重:
材质只设置了颜色:
请问有人遇到过这个问题吗?
Unity版本:2021.1.9f1
URP版本:11.0.0
A:需要修改URP源码。
在Packages/com.unity.render-pipelines.core@11.0.0/ShaderLibrary/Common.hlsl文件中1225行:
// Normalize that account for vectors with zero length real3 SafeNormalize(float3 inVec) { real dp3 = max(FLT_MIN, dot(inVec, inVec)); return inVec * rsqrt(dp3); }其中real需要修改为float:
// Normalize that account for vectors with zero length float3 SafeNormalize(float3 inVec) { float dp3 = max(FLT_MIN, dot(inVec, inVec)); return inVec * rsqrt(dp3); }
所以最终还是移动平台精度设置有问题。
感谢题主WTF-082699@UWA问答社区提供了回答
UGUI
Q:如下图所示,因为Different Material Instance合批被打断,但是的确是相同材质球,请问什么原因?
A1:会不会是材质名字相同,可以开Debug模式看看Instance ID是否一样。
感谢范世青@UWA问答社区提供了回答
A2:已解决,模板测试导致的。
感谢题主cwf@UWA问答社区提供了回答
Rendering
Q:Unity地形TerrainData里面的SplatAlpha为非压缩格式,内存占用特别大,有没有比较好的压缩办法?
A:我不确定在Unity的原生Terrain中这张图是否可以压缩,原理上似乎是可以的(除非这张图是运行时在内存生成的)。
但是这张图存储的并不是颜色信息,因此压缩之后效果可能比较差,比如混合的边缘有马赛克。我们之前用T2M转成Mesh之后,压缩过这张混合贴图,效果很差,最后还是在某些可以接受的地块使用16位来减少一半内存,有问题地块还是使用的32位的原图。
感谢贾伟昊@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)