乐趣区

关于字体: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 中修复了。

参考网址: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 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(原群已满员)

退出移动版