Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案

这篇具有很好参考价值的文章主要介绍了Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


环境

Unity : 2020.3.37f1
Pipeline : BRP

(另一个项目在 2021.1.xx 的 LTS 下的 URP 管线同样如此,目测:因为 UGUI 不受渲染管线切换而变化)


目的

便于索引,记录搬砖


Screen Space - Overlay

可以看到,下图
Canvas 的 Render Mode 在使用: Screen Space - Overlay 模式下的DC为 8
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

这里导致合批失败的有两个问题:

  1. 图片显示有相互的堆叠遮挡
  2. 部分UI组件的localPosition.z != 0

UI AABB overlap
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

localPosition.z != 0
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

DrawCall 就会增加很多
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

相当于一个都合批不了,要是UI复杂,有多,那么性能就渣渣了


优化

如下图

我们修改了这些内容,即可合批:

  • Canvas Render Mode 调整为:Screen Space - Camera,并指定相机
  • 然后将 UI 的 Hierarchy 层级嵌套要展平,需要同级化
  • 然后 shader 需要开启 alpha test 和 ZWrite On, ZTest LEqual

Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

Canvas Render Mode 调整为:Screen Space - Camera,并指定相机
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

然后将 UI 的 Hierarchy 层级嵌套要展平,需要同级化
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

Alpha Test, ZWrite On, ZTest LEqual
Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败

Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案,unity,unity 搬砖,unity,ui合批,UI AABB重叠,z不等于0,合批失败


限制

这个方案目前总结下来有那么一些限制:

  1. 如果透明区域不是偏向 矩形的,那么只能开启 alpha test
  2. 如果开其alpha test 那么边缘效果黑背景混合锯齿感比较强
  3. hierarchy 视图中的 go 层级需要调整,导致无法使用 parent 的整体移动
  4. 如果需要整体移动需要自己写组件同步位置

该方案起源

其他项目组的一位 TA 大佬,分享了一下 UI 的 AABB Overlap 下的合批
结果他自己做了一些尝试,发现可以这么整
这种如果有 UGUI 黑箱部分的合批逻辑,都会比较好处理(比如,如果你们项目有购买 unity 引擎源码,那是可以一探究竟,甚至可以自行修改的)

然后我们没有unity引擎源码,在这种情况下,这位TA大佬都测试出来了,真的牛逼

(然后这种方式其实在 UWA UGUI 优化课程中也有讲到类似的优化,到时连接我就不方便发了,给自己看,我也贴上来吧:Unity - UGUI 优化 (NGUI vs UGUI) - 笔录 - UWA大神推荐学习篇)


因此我将这次大佬的研究成果直接记录笔记,便于后续索引,备忘


另外,这些内容纯纯是搬砖,都是基于别人的引擎(unity引擎)下使用UGUI 的一些问题

较真怎么才不属于搬砖:

  • 寻找硬件物质材料
  • 制作硬件
  • 制作芯片
  • 编写硬件芯片驱动程序
  • 编写操作系统
  • 再操作系统上编写编程语言(不使用二进制指令的编写方式,规模大就不可维护)
  • 编写编译器
  • 编写IDE
  • 使用你自己的IDE编写引擎APP
  • 再使用你自己的系统编写引擎的渲染器
  • 再编写渲染与硬件加速渲染结合

那么恭喜你,终于不是搬砖了文章来源地址https://www.toymoban.com/news/detail-643306.html

到了这里,关于Unity - 搬砖日志 - UGUI合批优化 - Overlap(UI AABB 有重叠), Z != 0 照样合批的方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

    Unity - 搬砖日志 - BRP 管线下的自定义阴影尺寸(脱离ProjectSettings/Quality/ShadowResolution设置)

    Unity : 2020.3.37f1 Pipeline : BRP (好久没搬砖了,偶尔健身一下,顺便将这些无技术含量的内容,记到 blog,不要记在脑子) 最近给项目做优化的过程中 发现 BRP 管线下的 Shadow Resolution 只能在 Project Settings/Quality/Shadow Resolution 去设置 而且发现 Shadow Resolution 的一些枚举为: Low Resolut

    2024年02月14日
    浏览(9)
  • Unity - 搬砖日志 - Android 的 Optimized Frame Pacing - 对应 ProjectSettings 配置字段:androidUseSwappy (影响锁帧)

    Unity - 搬砖日志 - Android 的 Optimized Frame Pacing - 对应 ProjectSettings 配置字段:androidUseSwappy (影响锁帧)

    备忘用,因为 project settings 动不动,会提交一堆不相关的配置字段修改 Unity PlayerSettings 的 GUI 上 Optimized Frame Pacing 和 实际的 ProjectSettings 字段名字差异太大 通过验证发现是: androidUseSwappy 字段 Android Performance Tuner 简介 (Unity) 注意 Optimized Frame Pacing 还会影响锁帧的作用,如果开

    2024年02月13日
    浏览(14)
  • Unity DrawCall优化 - UGUI优化

    Unity DrawCall优化 - UGUI优化

    一、DrawCall是什么? Unity 展示出来的画面,是通过GPU绘制出来,才显示出来的。 在场景中,一个场景内的物体,分几个批次提交给显卡来绘制,就是几个DrawCall。 在Unity中,两个地方可以查看DrawCall, 1.在Game视口,的Stats,点击一下打开一个窗口,Batches:后面的就是Drawcall值。

    2024年03月13日
    浏览(8)
  • Unity UI——UGUI

    Unity UI——UGUI

    包名: com.unity.ugui Canvas :   容纳所有UI元素的区域。   一种带有画布组件的游戏对象。   使用EventSystem对象来协助消息系统。 绘制顺序: 按照在 Hierarchy 中显示的顺序绘制,由上到下。 如果两个 UI 元素重叠,则后一个元素将显示在前一个元素之上 渲染模式:(Render Mode)

    2024年04月28日
    浏览(13)
  • 【UGUI】学会Unity中UGUI中UI元素自适应问题

    彻底学会Unity中UGUI中UI元素自适应问题 官方介绍:设计用于多种分辨率的 UI - Unity 手册 所所谓自适应就是画面元素跟随屏幕分辨率的改变而保持相对位置或者自身像素同步改变! 屏幕分辨率自适应:依靠画布缩放器组件完成 相对位置:依靠锚点位置完成,锚点主要负责保持

    2024年02月04日
    浏览(10)
  • Unity--UGUI创建基本的UI

    Unity--UGUI创建基本的UI

    随着UI系统的引入,已添加了新组件,这些组件将有助于创建特定于GUI的功能。其中一些元素包括文本,图像,按钮等。在本教程中,您将学习创建和使用基本UI。 通过Unity的用户界面(UI)系统,可以控制诸如:文本,图像,按钮和其他用户控件之类的元素,这些元素将为用

    2024年04月12日
    浏览(11)
  • Unity UGUI的DrawCall优化

    Unity UGUI的DrawCall优化

    Unity UGUI是一种强大的用户界面设计工具,它可以帮助开发者快速创建各种界面元素,从按钮和文本到滑块和面板等。然而,在使用UGUI时,一个常见的性能瓶颈就是DrawCall过多导致的性能下降。在本文中,我们将深入探讨UGUI的DrawCall优化方法,并给出对应的代码实现。 什么是

    2024年02月22日
    浏览(9)
  • Unity-UGUI优化策略

    Unity-UGUI优化策略

    界面出栈规则: 界面目录导航、策划界面回退需求造成界面套娃问题,夹带一系列层级问题,应该和策划进行友好沟通,避免界面不合理的出栈入栈规则 overdraw: 尽量减少同屏 半透明物体渲染 Unity 之 UGUI优化(Optimizing UGUI)—当最专业的拖拖拽拽

    2024年02月13日
    浏览(6)
  • Unity UGUI事件输入,点击UI无反应

    Unity UGUI事件输入,点击UI无反应

    之前被一个特别低级的UI点击问题卡了好久,记录一下,避免之后再犯同样的错误。 UI事件输入未接受到的原因无非就几个,一一排查总能找到原因。 1、若是直接使用的unity组件中的按钮,但是点击按钮没有反应。         1)查找是否被其他UI遮挡         2)查找是否接收

    2024年04月13日
    浏览(9)
  • Unity UGUI一键绑定UI控件工具(编辑器拓展)

    Unity UGUI一键绑定UI控件工具(编辑器拓展)

    全为一键生成 实现自动生成代码绑定UI控件 并生成字典保存UI控件 减少自己拖拽 和手动书写过程 适用动态加载面板 建议搭配UI框架使用 根据当前选中的gameobject 查找其下方是否有对应类型的控件 有就保存到字典中 然后通过向上递归拼凑地址,然后生成到粘贴板 直接粘贴到目

    2024年04月23日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包