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中修复了。

参考网址:https://unity3d.com/unity/whats-new/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 lengthreal3 SafeNormalize(float3 inVec){    real dp3 = max(FLT_MIN, dot(inVec, inVec));    return inVec * rsqrt(dp3);}

其中real须要批改为float:

// Normalize that account for vectors with zero lengthfloat3 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(原群已满员)