Unity DrawCall优化 - UGUI优化

这篇具有很好参考价值的文章主要介绍了Unity DrawCall优化 - UGUI优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、DrawCall是什么?

Unity 展示出来的画面,是通过GPU绘制出来,才显示出来的。

在场景中,一个场景内的物体,分几个批次提交给显卡来绘制,就是几个DrawCall。

在Unity中,两个地方可以查看DrawCall,

1.在Game视口,的Stats,点击一下打开一个窗口,Batches:后面的就是Drawcall值。

unity drawcall怎么看,Unity优化,unity,游戏引擎

2.运行时,在菜单栏Window->Analysis->Profilter.再打开的窗口中,点击Rendering,在底部蚕食信息中就会有Draw Calls:就是了。

unity drawcall怎么看,Unity优化,unity,游戏引擎

unity drawcall怎么看,Unity优化,unity,游戏引擎

 二、降低DrawCall为什么对性能有好处?

1.cpu:一次提交给GPU,会比多次提交的性能更好,省cpu;

2.gpu:吞吐量,一次性处理多少个面(Unity是三角面),每次提交的物体越多,GPU性能就更容易发挥。

三、UGUI降低DrawCall的方法

 没有优化前的DrawCall,如下图(可以看出目前消耗DC是14):

unity drawcall怎么看,Unity优化,unity,游戏引擎

 3.1那么问题来了,如何查看UGUI占了几个DC呢?

其实很简单,就是运行时,通过隐藏UGUI来查看,Batches的值变化,比如下面操作:

没有隐藏前,查看是14个DC

unity drawcall怎么看,Unity优化,unity,游戏引擎

隐藏后,查看是2个DC 

unity drawcall怎么看,Unity优化,unity,游戏引擎

 说明了,我们这个UGUI界面,占用了14-2 = 12个DC,

其中这2个DC是什么呢?其实一个是天空盒一个是默认背景。

3.2UGUI如何降低DC呢?

合并DC要满足几个条件:1.shader得一样;2.纹理对象要一样;满足了这两个条件才能合并到一个DC。

在这里界面的DC有12个,主要原因是每个图都是单独的,每一次渲染都是单独的DC,

unity drawcall怎么看,Unity优化,unity,游戏引擎

要想减少他们的渲染,可以将他们打入到同一个图集中,然后在绘制UGUI的时候,根据纹理坐标,找到对应的小图。

这样,在同一图集中,就满足了同一个纹理,同一个shader,可以合并为一个DC了。

3.3如果打图集呢?

UGUI常用优化DC的手段,就是将GUI图片打成图集

3.3.1.开启图集模式

在菜单栏Edit--> Project Settings-->Editor-->EditorSettings-->Sprite packer;

unity drawcall怎么看,Unity优化,unity,游戏引擎

将Sprite Packer 的 Mode 设置为 Always Enabled;

unity drawcall怎么看,Unity优化,unity,游戏引擎

 这样设置即可。

3.3.2 指定哪些图片打入到同一个图集

注意:博主用的是Unity2020版本,在这之前的版本(2019以前),以上设置后,PackingTag即可使用了,但是在Unity2020 之后,需要在添加一个包2DSprit

2DSprit包添加,

        3.3.2.1 在菜单栏Window-->Package Manager,打开该界面后,选择Unity Registry,unity drawcall怎么看,Unity优化,unity,游戏引擎

然后在下面列表中即可看到2DSprite ,点击Install安装即可。

unity drawcall怎么看,Unity优化,unity,游戏引擎

在图片中有一个 PackingTag ,将所选图片,

        3.3.2.2 然后手动创建一个Sprite Atlas文件

在Project视图右键,Create>2D>Sprite Atlas。

unity drawcall怎么看,Unity优化,unity,游戏引擎

        3.3.2.3 添加要打包的图片或文件夹

将要打包的图片或文件夹,放置到图集文件的Objects for Packing中。然后单击PackPreview按钮,可以看到图集预览。 

unity drawcall怎么看,Unity优化,unity,游戏引擎

 然后点击 Pack Preview 即可查看图集内容了。

unity drawcall怎么看,Unity优化,unity,游戏引擎

 打好图集后,再次运行,看下DC情况(DrawCall为4):

unity drawcall怎么看,Unity优化,unity,游戏引擎

 减去天空盒和背景的两个,4-2=2就是2个DC.

3.3.3 为什么这个界面占用了2个DC呢?

仔细看下这张图

unity drawcall怎么看,Unity优化,unity,游戏引擎

其实是文字(Text)和图片各占了一个DC,所以是2个。

3.4 Text的主要原理与DC的影响

 Text对于Unity来讲,底层用的和Image是同样的shader;

也就是说 Text --> Image 是一样的,就是文字贴图;

Unity的Text的核心原理:

        通过Text组件 + 矢量字库 + 字体大小 +文本内容   来生成一个 贴图;

        最后Unity底层把文本当贴图对待,只不过这个贴图不是image,而是通过Text组件,绘制到一个纹理贴图对象上的。

Unity对Text的处理:

        再上图里可以看出,有多个Label,但只形成了1个DC。

        Unity在处理多个Label的时候,尽可能的将文字绘制到一个纹理里(当然这里受纹理图集的大小限制),跟文本内容和字体的大小、字号、样式没有关系。

四、RawImage对DrawCall的影响

RawImage 与 Image有什么区别?

1.RawImage支持Sprite + Texture,Image只支持Sprite;

2.RawImage支持设置UV坐标,Image不支持;

3.Image支持做一些其他效果(比如九宫格),RawImage单独占用一个DC,无法合并DC(即使是同一图集,不同图片,是不能合并的)。

4.RawImage会打乱DC的渲染顺序(如果RawImage影响了正常的DC渲染,以RawImage为节点,DC会拆分)

...文章来源地址https://www.toymoban.com/news/detail-839420.html

到了这里,关于Unity DrawCall优化 - UGUI优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Unity3D赛车游戏优化篇】【十】汽车粒子特效和引擎咆哮打造极速漂移

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity游戏demo – 😶‍🌫️版本: Unity2021 😶‍🌫️适合人群:Unity初学者进阶 😶‍🌫️学习目标:3D赛车游戏的基础制作 😶‍🌫️技能

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

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

    2024年02月13日
    浏览(48)
  • Unity优化之UI篇(UGUI)

            在Unity中UI优化的核心问题就是重绘和批处理之间的平衡。虽然说可以通过一些简单的技巧单方面地减少批次或者减少重绘,但进行过一波优化之后,最终还是要面临批次和重绘的平衡问题。         Canvas是UGUI的基本组件,它生成表示放置在其上的 UI 元素的网

    2024年02月04日
    浏览(49)
  • Unity UGUI图片锯齿严重怎么解决

    在开发的时候,发现图片锯齿严重,打包到移动端或者在编辑器都这样,如下图 查了一些资料,找到了原因如下: 关于为什么会发生这种情况:看起来你的源资源比你在屏幕上显示的大小大得多。所以当双线性滤波试图平滑它时,它只能平滑源纹理中的2x2块纹理,这可能只

    2024年02月04日
    浏览(45)
  • 【游戏开发解答】Unity中对UGUI的Image进行倾斜变形(UGUI | 精灵图 | OnPopulateMesh | 顶点偏移 | 变形)

    本文最终效果 一、前言 嗨,大家好,我是新发。 前同事问了我一个问题,如何将 UGUI 的 Image 进行变形,变成斜斜的, 最直接的就是出图的时候直接就画成斜的,我们不讨论这种情况,这里我们单纯的从技术实现上去思考能不能在 Unity 中通过 UGUI 的 Image 对图片进行倾斜变形

    2024年02月04日
    浏览(56)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(79)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(78)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(66)
  • Unity vs Godot :哪个游戏引擎更适合你?

    游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有各自的优势,没有绝对的好坏之分。Godot开源免费,上手简单,更适合2D和小型游戏

    2024年01月23日
    浏览(98)
  • 30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月11日
    浏览(74)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包