首页 > 其他分享 >如何选择Unity的4种批处理方式

如何选择Unity的4种批处理方式

时间:2024-06-04 11:12:48浏览次数:25  
标签:社区 合批 批处理 Batch 选择 Unity UWA uwa4d

1)如何选择Unity的4种批处理方式
2)Unity编辑器卡顿
3)如何解决横屏APP在鸿蒙悬浮窗错误的变为竖屏了
4)Hindi问题


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

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

Rendering

Q:在网上看了不少Unity的关于静态批处理、动态批处理、GPU Instancing和SRP Batcher这4种批处理的解释,但是我应该怎么选择哪种方式还不清楚,希望大佬能帮忙分析或者介绍一下选择方法或是案例。

A:可以参考《Unity移动端游戏性能优化简谱》的介绍:

3.2.3 Batch(DrawCall)

在Unity中,我们需要区分DrawCall和Batch。在一个Batch中会存在有多个DrawCall,出现这种情况时我们往往更关心Batch的数量,因为它才是把渲染数据提交给GPU的单位,也是我们需要优化和控制数量的真正对象。

降低Batch的方式通常有动态合批、静态合批、SRP Batcher和GPU Instancing这四种,围绕Batch优化的讨论较为复杂,再写一篇文章也不为过,所以本文不再展开来讨论,但在UWA DAY 2020中我们详细讨论和分享了DrawCall与Batch的关系以及这4种Batching的使用详解,供大家参考:《Unity移动游戏项目优化案例分析(上)》。

下面简单总结静态合批、SRP Batcher和GPU Instancing的合批条件和优缺点。

  1. 静态合批
    条件:不同Mesh,只要使用相同的材质球即可。
    优点:节省顶点信息地绑定;节省几何信息地传递;相邻材质相同时, ,节省材质地传递。
    缺点:离线合并时,若合并的Mesh中存在重复资源,则容易使得合并后包体变大;运行时合并,则生成Combine Mesh的过程会造成CPU短时间峰值;同样的,若合并的Mesh中存在重复资源,则会使得合并后内存占用变大。
  2. SRP Batcher
    条件:不同Mesh,只要使用相同的Shader且变体一样即可。
    优点:节省Uniform Buffer的写入操作;按Shader分Batch,预先生成Uniform Buffer,Batch内部无CPU Write。
    缺点:Constant Buffer(CBuffer)的显存固定开销;不支持MaterialPropertyBlock。
  3. GPU Instancing
    条件:相同的Mesh,且使用相同的材质球。
    优点:适用于渲染同种大量怪物的需求,合批的同时能够降低动画模块的耗时。
    缺点:可能存在负优化,反而使DrawCall上升;Instancing有时候被打乱,可以自己分组用API渲染。

在URP项目中,一般主要靠SRP Batcher(需要确保排除和优化Shader不支持、穿插等导致合批失败的情况),辅以针对特定渲染物体的运行时静态合批(集中但不重复的小物件)和GPU Instancing(大量重复模型),从降低整体Batches数量。

特别地,针对UI和粒子系统这类走自身合批方式的半透明渲染物体需要额外具体分析。

具体可参考UWA学堂的以下课程:
《Unity移动端游戏性能优化简谱》
《Unity移动游戏项目优化案例分析(上)》
《详解UGUI DrawCall计算和Rebuild操作优化》

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


Editor

Q:UGUI在制作阶段时在场景界面会出现拖拽卡顿,看堆栈这个下面这个内容,不知道什么原因,很影响开发。

Unity版本:2020.3.48

 

A:建议查看工程中是不是有基于编辑器的拓展;或者UnityEditor.AnimatedValues下的某类实现,或者看看BaseAnimValue.valueChanged之类的。

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


HarmonyOS

Q:最近QA测出一个Bug,我们游戏为横屏游戏,然而在华为鸿蒙系统下,切入悬浮窗后,会变为竖屏,这个问题很是苦恼,其他安卓平台是正常的。

查了下米哈游的《崩坏》,游卡的《三国杀》,腾讯的《火影》,这几个都是正常显示的,不知道他们是如何做的?我解开他们的包查看Manifest,无非就是增加了如下屏幕适配。

 <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true"/>

  

后续我自己建了个空Demo,跑下来也是错的,不知道各位是否知道该修改哪儿吗?本人demo android:resizeableActivity="true",上面的supports-screens也设置了。错误视频如下,期望情况是拖到小窗时,用一个横屏的小窗去展示。

视频链接:https://uwa-ducument-img.oss-cn-beijing.aliyuncs.com/Blog/TechSharing_388/2.mp4

 

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/664c53ee5ce8a46b00fc4d45


UI

Q:有人遇到过这种问题的吗?印地语txt和Unity显示不一样,换了各种印地语字体试了都不行,UTF-8和Uncode编码都试了。

वेयरवोल्फ़

 

针对以上问题,有经验的朋友欢迎转至社区交流分享:
https://answer.uwa4d.com/question/664acb265ce8a46b00fc4d41

封面图来源于网络


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

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

标签:社区,合批,批处理,Batch,选择,Unity,UWA,uwa4d
From: https://www.cnblogs.com/uwatech/p/18230397

相关文章

  • 企业应如何选择安全合规的内外网文件摆渡系统?
    网络隔离是一种安全措施,旨在将网络划分为不同的部分,以减少安全风险并保护敏感信息。常见的隔离方式像物理隔离、逻辑隔离、防火墙隔离、虚拟隔离、DMZ区隔离等,将网络隔离成内网和外网。内外网文件摆渡通常指在内部网络(内网)和外部网络(外网)之间安全地传输文件的过程。由于内网通常包......
  • (十三)统计学基础练习题七(选择题T301-350)
    本文整理了统计学基础知识相关的练习题,共50道,适用于想巩固统计学基础或备考的同学。来源:如荷学数据科学题库(技术专项-统计学二)。序号之前的题请看往期文章。301)302)303)304)305)306)307)308)309)310)311)312)313)314)315)316)317)318)319)320)321)322)......
  • 分享一个自制 Excel 转 Unity ScriptableObject 工具
    视频演示链接:https://www.bilibili.com/video/BV1Nw4m1q7qt/资源文件:https://github.com/asyaB404/ExcelToScriptableObject上网找了半天都找不到满意的,所以就自己写了一个本人菜鸟一枚,第一次分享自己的成果,有什么问题或者改进的方式请立即联系我工具包含一个名为Excelabl......
  • 搭子交友app小程序,线下陪玩系统选择:价钱并非唯一标准,功能全面才是关键!
    在当今社会,随着科技的发展和人们生活水平的提高,陪玩行业逐渐兴起。为了满足市场需求,各种各样的陪玩系统应运而生。然而,面对市场上琳琅满目的陪玩系统,消费者往往陷入了一个误区:过分追求价格。事实上,这种选择方式往往会让消费者陷入困境,甚至成为各个软件公司的冤大头。那么,如何在......
  • UniTask入门指南:简化Unity中的异步编程
    UniTask入门指南:简化Unity中的异步编程介绍:UniTask是一个轻量级、高性能的异步编程库,专门针对Unity开发进行了优化。与Unity标准的Task系统相比,UniTask提供了更加简洁和高效的异步编程方式。在Unity项目中使用UniTask可以大大提高开发效率,简化异步操作的编码过程。UniTask......
  • Unity ScrollRect中,拖拽移动Item的顺序
    *UnityScrollRect中,拖拽移动Item的顺序*目标需求制作方法完整代码最终效果备注unitypackage目标需求Unity在制作下拉菜单时,用户可通过拖拽Item,替换当前Item的位置。本教程使用UGUI制作方法创建脚本ScrollRectManager,用于管理整个ScrollRect,我是将脚本Scro......
  • 大数据信用报告多久查一次比较合适?如何选择查询平台?
    大数据信用在当今提及的频率比较高,同样的也越来越受重视,不少人都在积极的了解自己的大数据信用情况,那大数据信用报告多久查一次比较合适呢?接下来本文带大家从几个方面了解一下,一起去看看吧。从应用场景方面分析:一、风险自测半年一次比较好大家都知道大数......
  • 小程序,选择颜色,去水印
    //在页面中添加一个canvas组件<canvascanvas-id="myCanvas"bindtap="handleTap"></canvas>//在页面的js文件中处理图片Page({ data:{  imgUrl:'',//存储用户选择的图片路径  startX:0,//用户指定区域的起始坐标X  startY:0,//用户指定区域的起始......
  • 压力测试接口选择策略指南
    选择哪些接口进行压力测试是确保系统在高负载下仍能正常运行的关键步骤。以下是一些策略,可以帮助你确定哪些接口需要进行压力测试:###1.业务关键性- 核心功能接口:选择那些对业务运作至关重要的接口。例如,支付、订单处理、用户登录等。- 高流量接口:识别那些在正常运......
  • vue-elementui中el-table跨页选择和v-if导致列错乱/选择框无法显示
    在vue-elementui中使用el-table,当type="selection"的时候,分页数据进行不同页跳转选择需要这种功能的时候我们需要在el-table的标签上为每个el-table-column都创建一个id;所以就用到了row-key="id"这个属性;然后我们就需要在el-table-column为type="selection"添加一个属性reserve......