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

news/2025/3/24 0:15:35/文章来源:https://www.cnblogs.com/uwatech/p/18230397

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/719756.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离线资源手册下载地址

离线手册下载下载地址 https://www.php.cn/xiazai/ 如下图:

MES与PLC集成时的几种握手方式及特点

方式1:定期抓取数据 某些设备的关键工艺参数(如变速器轴齿热处理炉的温度)非常重要,需要定期抓取以生成实时曲线,及用于长期追溯分析。 这些工艺参数通常都是模拟量,数值始终不停地变化。 通常我们可以通过OPC软件读取这些数据,经过精度处理,然后定期写入实时数据库中。 …

RAID 存储策略

这篇文章总结不错: https://cloud.tencent.com/developer/article/2304179RAID x 存储策略 备注0 无备份,分条存储1 镜像备份5 使用奇偶校验,分条存储6 使用双奇偶校验,分条存储10 RAID0 + RAID150 RAID0 + RAID560 RAID0 + RAID6分条存储,数据被有意打散放在不同的磁盘上…

npm报错A complete log of this run can be found in:的解决办法

npm 启动项目 npm run serve/dev的时候报了个错:再次记录一下 1.问题原因 项目启动失败,一直报错,翻译一下,大概意思就是依赖包或者模板有问题 2.解决方法 (1)需要找到node_modules把这个文件夹删掉 (2)然后cmd或者vscode终端再运行npm install即可,这个命令会重新安装…

SQL之HAVING

初识 HAVING 关于 SQL 中的 HAVING,相信大家都不陌生,它往往与 GROUP BY 配合使用,为聚合操作指定条件 说到指定条件,我们最先想到的往往是 WHERE 子句,但 WHERE 子句只能指定行的条件,而不能指定组的条件,因此就有了 HAVING 子句,它用来指定组的条件。我们来看个具体示…

SQLite 删表后删物理文件

sqlite 删除表后文件还是很大如果在SQLite中删除了一个表,但是文件大小没有减小,这通常是因为SQLite的空间回收机制。SQLite不会在删除数据后立即重新缩小数据库文件,以避免频繁的文件大小调整。 要减小文件大小,可以使用VACUUM命令。VACUUM命令会重建数据库文件,删除未使…

idea - git的提交日志框不见了 -解决

有时候不小心点了什么快捷操作导致没了,需要在设置这里勾选上即可 本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/18230341响应开源精神相互学习,内容良币驱除劣币

连接 Dynamics 365 Customer Engagement (on-premises)

AuthType = AD创建项目模板是.NET framework 4.6.2的控制台程序添加nuget包 Microsoft.CrmSdk.CoreAssemblies,Microsoft.CrmSdk.XrmTooling.CoreAssemblyProgram类添加以下代码 using System; using System.Configuration; using Microsoft.Crm.Sdk.Messages; using Microsoft…

visual studio 2019 c++与汇编混合代码

1、visualstudio2019下x64架构的CPU配置不支持内联汇编代码的嵌入,即不支持__asm{}语句。 2、通过创建.asm汇编代码文件封装汇编函数的方式实现c++代码调用汇编函数: 第一步:修改工程的生成依赖项第二步:创建.asm汇编代码文件第三步:编写汇编代码的函数第四步:在c++文件调…

基于ReAct机制的AI Agent

当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己的LLM推出了自己的AI Agent,比如字节的Coze,百度的千帆等,还有开源的Dify。你是否想知道其中的原理?是否想过自己如何实现一套AI Agent?当然,借助LangChain就可以。当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己…

正也科技之芒哥合规管理系统解决方案

正也科技的芒哥合规管理系统是一个针对医药企业的合规性解决方案,旨在帮助企业建立并维护一个符合法律法规要求的合规管理体系。该系统结合医药行业的特点,为企业提供了一系列合规管理工具和功能,以应对复杂的合规挑战。以下是芒哥合规管理系统的主要优势: 全面的合规性支持…

《计算机网络微课堂》实验23 VLAN间通信的实现方法:使用三层交换机

本仿真实验的目的在于验证 VLAN 间的通信可以使用三层交换机来实现。本仿真实验的目的在于验证 VLAN 间的通信可以使用三层交换机来实现。我已经在仿真软件中构建好了我们理论课中所使用的网络拓扑,并在各主机的旁边都标注好了所需配置的 IP 地址和地址掩码。 ​​ ‍博主注:…