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