首页 > 其他分享 >SRP Batcher在真机上失效

SRP Batcher在真机上失效

时间:2023-05-23 13:22:05浏览次数:56  
标签:Batcher 机上 Shader 纹理 SRP Combine Delegate UWA 社区

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层级就不会加载进内存,所以纹理内存反而表小了。

经过测试,1024x1024 ETC2_8Bits格式的纹理,没开启mipmap是1MB,开启了变成333KB,512x512 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

标签:Batcher,机上,Shader,纹理,SRP,Combine,Delegate,UWA,社区
From: https://www.cnblogs.com/uwatech/p/17424389.html

相关文章

  • 物理机和虚拟机上CPU睿频的区别
    物理机和虚拟机上CPU睿频的区别关于睿频睿频是指当启动一个运行程序后,处理器会自动加速到合适的频率,而原来的运行速度会提升10%~20%以保证程序流畅运行的一种技术。一般max的睿频不能超过特别长的时间.他的能耗和TDP的影响都比较大.睿频与很多环境和硬件相关:1.供......
  • ipa文件怎么安装到iPhone手机上?
    ​ ipa文件怎么安装到iPhone手机上?无需越狱帮你把ipa文件安装到苹果手机上E86苹果签名简介:点击可查看很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app应用程序app是什么样的文件名吗? 是ipa文件。 ipa文件由三个部分组成,payload目录下的.app目录,是......
  • ipa文件怎么安装到iPhone手机上?
    ​ ipa文件怎么安装到iPhone手机上?无需越狱帮你把ipa文件安装到苹果手机上E86苹果签名简介:点击可查看很多人都知道apk文件是安卓的app应用程序文件名,但有人知道苹果ios的app应用程序app是什么样的文件名吗? 是ipa文件。 ipa文件由三个部分组成,payload目录下的.app目录,是......
  • 激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码
    激光切割机雕刻机桌面打标机打码机点胶机写字机上位机C#源码STM32F407控制板源码可用在各类切割机、雕刻机、打标机、点胶机、写字机、打孔机控制板STM32F407支持3轴手动操作,鼠标单击运行距离和速度可设置,通信方式为串口轴控模式:两轴和三轴三轴模式可调节z轴作为升降和角度控......
  • 手机上图片预览插件 PhotoSwipe简介
    官方介绍PhotoSwipe是专为移动触摸设备设计的相册/画廊.兼容所有iPhone、iPad、黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产品。为谁而用让移动站点的相册体验和原生App一样的设计师和开发者。绝佳特性PhotoSwipe提供给用户一个熟悉又直观的相......
  • 注塑机上位机源码数据追溯 1, 采用C#编写。 2, plc为s7_1500。 3, 双
    注塑机上位机源码数据追溯1,采用C#编写。2,plc为s7_1500。3,双重数据库,本地和远程同时存取,mssql2012。4,同时使用OPCDA和OPCUA。OPCDA链接1500,OPCUA链接注塑机。5,使用多线程,界面流畅有好。6,数据查询与导出。ID:8829644753787492......
  • PowerShell-get-counter-算机上找不到任何性能计数器集: 错误 800007d0
    #已经解决了,感谢国外大神的解答:https://techcommunity.microsoft.com/t5/windows-powershell/get-counter-could-not-find-any-performance-counter-sets-on-the/m-p/3811330/thread-id/6430#M6433 获取计数器:在192.168.50.101计算机上找不到任何性能计数器集:错误80000 ......
  • 台达DVP-20PM的追剪程序,同步运动,是用在卷纸管机上的 ,这份资料包括:
    台达DVP-20PM的追剪程序,同步运动,是用在卷纸管机上的,这份资料包括:1、电气图纸一份2、DVP-20PM的程序(有注释)3、台达伺服的参数设置源文件(从台达B2伺服中导出)4、说明书一份(动作流程图说明)5、触摸屏程序该款以2500P/R高分辨率编码器检查送纸速度与送纸长度;采用一台台达高性能变频器驱......
  • uni-app在手机上背景图片不显示
    需求:在uniapp代码中view的背景图加载 问题:直接使用background-image:url(../../static/icon_top_bg.png);会导致图片不显示 代码:<template><viewclass="index":style="{backgroundImage:`url(${indexBackgroundImage})`,backgroundSize:'cover&......
  • 【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用
    在计算机管理中启动时,发现mysql报错:mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。该问题的解决方式为:1找到Mysql的安装路径,看看有没有data文件夹,如果没有data文件夹,自己重新建一个;如果有的话,就把里面的内容全部清空,但保留该目录......