头图

URP自带的Tone mapping性能开销问题

1)URP自带的Tone mapping性能开销问题
​2)图集中未使用到Sprite也会被加载到内存中的问题
3)GPU带宽:从纹理出发优化带宽①
4)GPU带宽:从纹理出发优化带宽②
5)GPU带宽:从纹理出发优化带宽③


2023年伊始,从本期第320期的UWA《厚积薄发》开始,本专栏将以全新的面貌和大家见面。UWA将为大家精选UWA社区的热门话题,保留了经典的QA环节,并增加了UWA社区中相关的游戏开发技能,助力大家全面地掌握更多元的知识点。

UWA社区主页:https://community.uwa4d.com
UWA QQ群:465082844

Rendering

Q:想了解下URP自带的Tone mapping性能开销,有用过的大佬分享下吗?

A:Tone mapping,如果在LDR的情况下使用ACES的Tone mapping,会有非常高的开销,如果是HDR,则几乎是免费的,只有一个纹理采样的开销。因为HDR的情况下,会在LUT的DrawCall中将 Tone mapping烘焙到32x1024的小图里面,所以开销是非常低的。如果是LDR,ACES的Tone mapping则会在UberPost的DrawCall里面进行非常高分辨率(渲染分辨率)的计算,因此开销会非常高。另外一种Netural则不论HDR还是 LDR,只会令UberPost的复杂度增加2,但是LDR下的ACES则会让UberPost的复杂度增加23。

感谢小ben@UWA问答社区提供了回答

SpriteAtlas

Q:我有一个图集(里面包含两个图片:Sprite_A和Sprite_B),进入游戏后,调用spriteatlasBundle.LoadAssetWithSubAssetsAsync(“Sprite_A”);但是打开Profiler查看,发现Sprite_B也被加载到内存中了。这是正常的吗?

Unity版本:Unity 2020.3.26

A:这就是依赖加载。要检查出来,就是扫Prefab里面哪个依赖了这个资源。
Sprite本身的尺寸可以忽略。若图集加载了,图片就会有,Sprite那点消耗可以不关心。<br/>
值得注意的是,小心Sprite依赖加载,导致额外加载的整个图集。

感谢欧月松@UWA问答社区提供了回答

Rendering

GPU带宽:从纹理出发优化带宽①

如果大家看过很多实际项目的带宽数据,就不难总结出一个规律:一般读纹理带宽占带宽开销的大头。GPU在读纹理时会取当前画的像素附近N*N的区域到OnChip缓存中,若下一个像素要采样的点恰好落在这N*N中,就不需要向更远的地方去取造成更高的带宽,即通过这种方式降低了Cache Miss的概率。基于这个原理,我们对于绘制3D物体的贴图纹理要选择合适的分辨率,防止出现用大纹理画小物体时,画下一个像素时在大纹理上的采样点跳变,导致落在N*N范围内概率低的情况。最好的办法是直接为所有非2D UI的、有深度的物体的贴图纹理都开启Mipmap,此时GPU会自动选择合适的Mipmap分辨率层级,从而降低Cache Miss概率、有效控制带宽。

GPU带宽:从纹理出发优化带宽②

除了开Mipmap这个简单暴力的手段外,还需要关注:
开启各向异性或三线性插值会大幅增加采样次数,从而导致Cache Miss概率上升,移动端项目一般不建议用或项目中个别纹理效果使用即可。
另外,纹理格式也会造成影响,像RGBA32这种未压缩格式的纹理单个像素存储的信息越多,造成的带宽开销也就越高,应尽量使用压缩率更高的格式。

GPU带宽:从纹理出发优化带宽③

还有一种特殊的,也就是Render Texture资源需要额外提一下。其中,RT使用的精度越高,带宽开销越高,一般在移动端上用ARGB32格式或RGB111110Float就够了,如果用到ARGBHalf可能就存在浪费了;另外,RT的Copy、下采样操作也会造成较高的带宽,常见的如Copy Color、Copy Depth和Bloom后效都会产生较高带宽。

期待更多讨论,欢迎大家转至UWA社区交流

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:https://community.uwa4d.com
UWA学堂:https://edu.uwa4d.com
UWA官方技术QQ群:465082844

UWA官网:[链接]

33 声望
12 粉丝
0 条评论
推荐阅读
URP Shader FrameBuffer Fetch Mali Crash
1)URP Shader FrameBuffer Fetch Mali Crash​2)Unity模型Lightmap UV相关的疑问3)动画上下半身融合问题4)AnimatorControllerPlayable.PrepareFrame函数在什么情况下调用

侑虎科技

封面图
如何在运行时优雅地Reset DOTS
1)如何在运行时优雅地Reset DOTS​2)用顶点着色器进行旋转的Shader放在Image上不能正常工作3)FrameBuffer Fetch在确定支持的手机上显示全紫4)Unity系统中,Android端判断GamePad文件在不在

侑虎科技阅读 275

封面图
Unity升级后打包AssetBundle变慢
1)Unity升级后打包AssetBundle变慢​2)打包使有些资源合成了一个资源data.unity3d,有些分开的原因3)Unreal在移动设备中无法使用Stat命令获取到GPU Thread的耗时4)Unity中如何看到相机视野范围内的剔除结果

侑虎科技阅读 263

封面图
MeshRenderer如何使用GPU Instancing的材质球正常合批
1)MeshRenderer如何使用GPU Instancing的材质球正常合批​2)关于AssetBundle加密,如何重新实现LoadFromFile接口3)移动端开放世界类型游戏中选择动态阴影技术以及优化方案组合4)Unity导出Gradle工程,如何防止...

侑虎科技阅读 247

封面图
SRP合批问题
1)SRP合批问题​2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题3)粒子系统对GPU Instancing的支持4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间)

侑虎科技阅读 235

封面图
获得将要生成的资源的GUID
1)获得将要生成的资源的GUID ​2)多个小资源包合并为大资源包的疑问 3)模型Meta中的hasExtraRoot参数的作用和历史原因 4)合批注意点

侑虎科技阅读 181

封面图
TMP的阴影性能如何
1)TMP的阴影性能如何​2)CommandBuffer.DrawMeshInstanced无法画阴影问题3)Unity编辑器在Require大量加载Lua文件时,经常报出not enough memory4)场景制作的时候,2D资源受后处理调色影响比较大

侑虎科技阅读 174

封面图

UWA官网:[链接]

33 声望
12 粉丝
宣传栏