乐趣区

关于rendering:SRP-Batcher在真机上失效

1)SRP Batcher 在真机上生效
​2)Shader 外面对同一张纹理屡次采样会影响效率吗
3)为什么纹理开启了 mipmap 后,纹理内存反而降落了
4)TMP 为什么有屡次 Delegate.Combine() 的 GC


这是第 336 篇 UWA 技术常识分享的推送,精选了 UWA 社区的热门话题,涵盖了 UWA 问答、社区帖子等技术知识点,助力大家更全面地把握和学习。

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

Rendering

Q:Shader 是 Compatible 的,在编辑器外面 DrawCall 也是 SRP Batcher 合批的,然而在真机上却没有合批胜利,是什么起因造成的?

A:须要排查对应的 Shader 是否存在在 Constant Buffer 中却不在 Properties 中的 Uniform 变量,这种情况会导致在 OpenGLES 的真机上 SRP Batcher 生效,然而这种情况在编辑器外面是 SRP Batcher 合批且 Shader 显示是 Compatible 的。

感激 Xuan@UWA 问答社区提供了答复

Shader

Q:Shader 外面对同一张纹理做屡次采样会影响效率吗?

float2 flowVector = tex2D(FlowMap, IN.uvMainTex).rg * 2 - 1;
float noise = tex2D(FlowMap, IN.uvMainTex).a;

如上代码,有材料简略提了一句说 Shader 代码编译的时候会主动优化到一次采样外面去,不过并没提是 SurfaceShader 才有的编译优化还是所有的 Shader 的编译优化都会这样?

A:测试后果来看,只有是 uv 雷同的贴图采样,surface 和 unlit shader 编译之后都会优化掉多余的采样次数。

感激范世青 @UWA 问答社区提供了答复

Texture

Q:为什么纹理开启了 mipmap 后,纹理内存反而降落了?

A:很可能是 Quality Settings 外面的 Texture Quality 抉择的不是 Full Res 导致的,比方抉择的是 Half Res,这样对于开启了 mipmap 的纹理来说,第 0 层的 mipmap 层级就不会加载进内存,所以纹理内存反而表小了。

通过测试,1024×1024 ETC2_8Bits 格局的纹理,没开启 mipmap 是 1MB,开启了变成 333KB,512×512 ETC2_8Bits 格局的纹理,开启 mipmap 前后别离是 256KB 和 128KB。

感激 Xuan@UWA 问答社区提供了答复

Lua

Q:只有一个界面对一个 TMP 的 OnPreRenderText 进行了一次 += 的操作,为什么在其余界面也发现有 Delegate.Combine()的 GC,且每次大小不同?

这是惟一操作过的界面:

这是其余界面,有 2M 的,还有些几十 K 的。

A:Unity TextMeshPro (TMP) 组件的 OnPreRenderText 事件是一个委托类型,能够通过 += 运算符来订阅事件,但每次订阅事件时都会创立一个新的委托实例。如果须要屡次订阅事件,须要应用 Delegate.Combine() 办法将多个委托实例合并为一个。然而,每次应用 Delegate.Combine() 办法都会创立一个新的委托实例,这可能会导致频繁的垃圾回收。

依据你的形容,只有一个界面对一个 TMP 的 OnPreRenderText 进行了一次 += 的操作,但在其余界面也发现了 Delegate.Combine() 的垃圾回收。这可能是因为 TMP 组件在外部订阅了 OnPreRenderText 事件,并且每次订阅事件时都会应用 Delegate.Combine() 办法。此外,可能还存在其余脚本或组件订阅了该事件,导致创立了额定的委托实例。

每次 Delegate.Combine() 办法创立的委托实例的大小可能不同,这取决于合并的委托实例的数量和每个委托实例的大小。因而,每次 Delegate.Combine() 办法调用时,垃圾回收器可能会回收不同大小的垃圾。为了缩小垃圾回收的频率和影响,你能够尽可能减少应用 Delegate.Combine() 办法的次数,并确保及时勾销订阅不再须要的事件。

感激轩辕小羽 @UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,咱们遇到的问题只是冰山一角,UWA 社区愿伴你同行,一起摸索分享。欢送更多的开发者退出 UWA 社区。

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

退出移动版