Unity-Sprite Atlas+UGUI系统的运行原理

news2024/11/25 20:52:54

每日一句:别听世俗耳语,看自己的风景就好

目录

SA的原理:

SA的优点:

SA的缺点:

DrawCall是什么?

批处理是什么?

我们先了解一下UGUI系统的运行原理吧!


提到图集优化,我想引出一个经典的游戏优化案例:

《超级马里奥》的Tile压缩方法:

由于红白机的性能相比现在的家用主机来说极为有限,无论是储存器性能还是处理器性能,所以当时的开发者采用“Tile瓦片”(每个瓦片8X8像素大小)作为基本的图片存储单元,然后再把这些瓦片拼接在一起。

如此以来画面分辨率256X240的红白机用8X8瓦片来填满只需要32 * 30 = 960张瓦片,给每个瓦片一个0至255的编号,那么最多只需要960B来表示一个屏幕里的所有图片,并且瓦片的内容是重复的并且个数是有限的,所要求的存储性能以及内存性能都因此大大降低。

当然为了极致的性能压缩性能,那个时代的开发者也应用了不少的技巧:

1.一个角色的行走动画,用一张图片进行左右交替翻转就能实现,减少了存储压力。

2.天上的云地上的草叠加放置,表现大小规模不同。

3.角色的图片只存储一半,用的时候再翻转拼接,又进一步压缩了存储。

这些前人的智慧也对主流的游戏引擎有着深远影响:Sprite Atlas(精灵图集,以下统称SA)

不仅仅局限于以上描述的方面,SA甚至可以应用于2D 和 3D 项目中的 UI、粒子系统、贴图等等。

现在我们对SA进行一个详细的归纳总结:

SA的原理:

是一种将多张小图汇总,打包成为一个大图的技术。在游戏运行时只需要载入一张大图到内存便可以实现多个素材的载入,是一种优化性能的手段,减少多次DrawCall对性能的占用。

SA的优点:

将多个图片合并到一张大图中,减少多次DrawCall对性能的占用。

SA的缺点:

当不经常使用的素材被放到图集中时,即使改素材不被使用也会被载入内存,浪费了内存资源;并且图集的大小固定为长边的二次幂,如果图集内素材的大小差距过大,会直接造成储存的浪费。

前期要求:

首先我们先找到PackageManager,在Unity Registry中下载2D包。不然无法在项目中创建SA内容。


点击“install”,下载这个包

然后找到Project Setting选项>Editor>Sprite Atlas>Mode

Mode默认是Disabled,更改为Always Enabled,V1和V2两个版本目前没有很大的区别,选V1就行

其他两个选项的意思是:Enabled For Builds——在项目导出后应用图集,所以在编辑器里面看到的图集仍然是原来的那些图片。

为了保证项目能接近玩家原生感受选择Always Enabled。

SA的创建:

项目内右键Project>2D>Sprite Atlas创建SA。

这里如果没有前期准备的内容,就无法创建SA。

配置SA:

点击我们新创建的SA

解释一下该面板的几个重要内容的意义:

  1. Include in Build:是否在游戏发布后构建到游戏中
  2. Allow Rotation:是否允许旋转图片,如果勾选,在构建图集时可能会旋转对应的图片,建议禁用
  3. Tight Packing:选中可根据图片的轮廓而非默认矩形轮廓来打包精灵,让图片排列更紧密,建议禁用,否则UI元素在显示时可能会重叠显示其他的图片,因为在获取对应Sprite时是按矩形轮廓来获取的
  4. Padding:不同UI元素之间的间隔,单位为像素,避免图片之间过近导致显示出问题
  5. Objects for Packing:需要打包的UI元素,可以放文件夹或者单个图片,放文件夹可以将文件夹所有的图片打包进这个图集中,图片的格式需要设置为Sprite(2D and UI),一个图集最大的尺寸是2048*2048

以上为SA的使用方法以及原理当然还有其他的图集系统类似于Texture Atlas的内容,不过原理上也大同小异,下面我们深入的了解一下图集优化的内容。

前文提到了DrawCall,这里解释一下DrawCall的相关概念:

DrawCall是什么?

当我们在渲染一个物体时,需要通知GPU执行渲染的指令,这一过程叫做“DrawCall”。而调用DrawCall的次数越多,对GPU和CPU的性能开销就越大,本身电脑的性能就有限,因此我们便要减少DrawCall的次数,减轻对GPU的性能负担。所以开发者们就想到了上述类似Sprite Atlas的方法,以减少性能开销。

批处理是什么?

上面我们了解了Sprite Atlas的运行原理,而批处理便是该原理的名称;由于每一次DrawCall就可以大致理解为一个渲染批次(batch)。Draw call属于资源密集型的指令,图形API要为每个Draw call做大量的工作。造成CPU性能消耗的主要是渲染状态的切换导致的,例如切换到不同的材质,这会导致在图形驱动中产生密集的资源验证和切换。为了减少draw call的调用Unity引入了两种优化技巧:

  1. 动态批处理对于足够小的mesh,动态批处理通过将他们的顶点整合到一个批次中进行绘制。
  2. 静态批处理:通过将不会移动的静态物体合并到更大的mesh中,以提升渲染速度。

材质方面的要求

只有使用了相同材质的物体才能够实现批处理。如果两个不同的物体,使用的两个材质,只是纹理上的差别,那就把他们的纹理合并到一起,这样就可以使用同一个材质。脚本中使用Render.material属性时,会重新生成一个原来材质的拷贝,所以用Render.sharedMaterial可以保持材质的一致性(但是使用同一个材质的物体,都会被改变)。关于阴影,只要材质中使用的是相同的Shadow Pass,就可以实现批处理,即便他们不是同一个材质。

我们先了解一下UGUI系统的运行原理吧!

UGUI是在3D网格下建立起来的UI系统,它的每个元素都是通过3D模型网格的形式构建起来的。当UI系统被实例化时,首先要做的就是构建网格。【也就是说,Unity在制作一个图元,或者一个按钮,或者一个背景时,都会先构建一个方形网格,再将图片放入网格中。可以理解为构建了一个3D模型,用一个网格绑定一个材质球,材质球里存放要显示的图片。】

那么这里有一个问题界面上成千上万个元素就会拥有成千上万个材质球。如果GPU对每个材质球和网格都进行渲染,将会导致GPU的负担重大,怎么办呢?

UGUI对这种情况进行了优化,它

  1. 部分相同类型的图片集合起来合成一张图,
  2. 然后将拥有相同图片、相同着色器的材质球指向同一个材质球,
  3. 并且把分散开的模型网格合并起来,
  4. 这样就生成几个大网格和几个不同图集的材质球

以及少许整张的图集节省了很多材质球、图片、网格的渲染,UI系统的效率提升了很多,游戏在进行时也顺畅了许多。

这就是图集概念,它把很多张图片放置在一张图集上,使得大量的图片和材质球不需要重复绘制,只要改变模型顶点上的UV和颜色即可。

我们设想一下,如果每时每刻都在移动一个元素,那么UGUI系统就会不停地拆分合并网格,也就会不停地消耗CPU来使得画面保持应有的样子。这些合并和拆分的操作会消耗很多CPU,我们要尽一切可能节省CPU内存尽量把多余的CPU让给核心逻辑。UGUI系统在制作完成后,性能优劣差距很多时候都会出现在这里。

我们要如何想方设法合并更多的元素,减少重构网格的次数,以达到更少的性能开销目的呢?(UI优化)请阅读这篇文章啦

Unity—UI-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63330263/article/details/136473724?spm=1001.2014.3001.5501本文成果由CSDN博主“Lyrissss_”与我共同创作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现 1、乐观锁,悲观锁的区别2、总结 💖The Begin💖点点关注,收藏不迷路💖 1、乐观锁,悲观锁的区别 悲观锁(Pessimistic Lo…

会声会影调速怎么用 会声会影如何调整音频速度

会声会影是一款功能强大的视频编辑软件,可以帮助我们轻松的实现剪辑。 会声会影的操作简单易懂,界面简洁明快。适合家庭使用, 我们使用会声会影可以在家就能将视频剪辑成好莱坞大片。但是在使用的过程中,仍然会遇到一些操作上的问…

mac下安装airflow

背景:因为用的是Mac的M芯片的电脑,安装很多东西都经常报错,最近在研究怎么把大数据集群上的crontab下的任务都配置到一个可视化工具中,发现airflow好像是个不错的选择,然后就研究怎么先安装使用起来,后面再…

「React」useEffect 与 useLayoutEffect 使用与区别

前言 useEffect 与 useLayoutEffect 是两个 Hooks,前者比较常用,后者在一些场景下也会用到,下面说明两者区别和应用场景。 使用 useEffect 和 useLayoutEffect 是React Hooks里用于处理副作用的钩子(Hooks)&#x…

单机一天轻松300+ 最新微信小程序拼多多+京东全自动掘金项目、

现代互联网经济的发展带来了新型的盈利方式,这种方法通过微信小程序的拼多多和京东进行商品自动巡视,以此给商家带来增加的流量,同时为使用者带来利润。实践这一手段无需复杂操作,用户仅需启动相应程序,商品信息便会被…

自定义一个SpringBoot场景启动器

前言 一个刚刚看完SpringBoot自动装配原理的萌新依据自己的理解写下的文章,如有大神发现错误,敬请斧正,不胜感激。 分析SpringBoot自动配置原理 SpringBoot的启动从被SpringBootApplication修饰的启动类开始,SpringBootApplicaiotn注解中最…

单片机LCD1602显示电子时钟设计

基于52单片机电子时钟的设计 摘要 本次设计的多功能时钟系统采用STC89C52单片机为核心器件,利用其定时器/计数器定时和记数的原理,结合液晶显示电路、时钟芯片DS1302电路、电源电路以及按键电路来设计计时器。将软硬件有机地结合起来,使得系…

十一、Python循环语句「长期更新Python简单入门到适用」

在python中,它的循环语句有 for 与 while 1、while循环 在python 中 while 语句的一般形式: while 判断条件 : 声明 同样需要注意冒号和缩进。另外,在Python中没有 do..while 循环。 以下实例使用了 while 来计算 1 到 50 的总和&#…

Adobe Camera Raw 11 for Mac/win:摄影后期处理的革命性飞跃

在数字摄影的世界里,RAW格式以其未压缩的原始数据特性,为摄影师提供了更大的后期处理空间。而Adobe Camera Raw 11,作为这一领域的翘楚,以其卓越的性能和创新的功能,为摄影师们带来了前所未有的创作体验。 Adobe Came…

全网最全网络基础思维导图合集(38张)

计算机网络基础知识点多且杂,想要系统地学习,思维导图肯定是必不可少的。 今天整理了38张思维导图,帮助你轻松理清思路,快速掌握关键内容。建议你收藏起来慢慢看,在看过之后最好能重新动手画一画,让计算机…

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData DotNet-MetaData是一款针对.NET恶意软件的安全分析工具,该工具专为蓝队研究人员设计,可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。 工具架构 当前版本的DotNet-MetaData主要由以下两个部分组成&#xf…

element-ui 前端ui框架用法开发指南(2024-05-22)

Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 1、npm安装 // npm安装:npm install element-ui --save 能更好地和 webpack 打包工具配合使用 2、cdn在线引入 访问最新版本的资源地址 - element-uiThe CDN for element-u…

C#解析JSON的常用库--Newtonsoft.Json

一、库介绍 在C#中,解析JSON的常用库有Newtonsoft.Json(也称为Json.NET)和 System.Text.Json(从 .NET Core 3.0 开始引入)。本文主要介绍 Newtonsoft.Json。 二、下载 官网: https://www.nuget.org/pack…

C语言之指针进阶(3),函数指针

目录 前言: 一、函数指针变量的概念 二、函数指针变量的创建 三、函数指针变量的使用 四、两段特殊代码的理解 五、typedef 六、函数指针数组 总结: 前言: 本文主要讲述C语言指针中的函数指针,包括函数指针变量的概念、创建…

简易进程池的实现

什么是进程池? 进程池(Process Pool)是一种用于管理和复用多个进程的技术或设计模式。在进程池中,一定数量的进程会被预先创建并保持在内存中,以便在需要时立即使用,而不是每次需要进程时都重新创建新的进程…

同名在线查询系统微信小程序源码下载支持多种流量主,附带系统教程

同名在线查询系统微信小程序源码下载支持多种流量主这是一款支持查询同名的一款微信小程序 该款小程序支持多种查询模式 重名查询,热度查询,概率香查询 源码免费下载地址抄笔记(chaobiji.cn)

LaTex 模板 - 东北师范大学申研申博推荐信

文章目录 NENU-Letter-Template项目地址示例特性项目结构如何使用main.texletterContent.tex 如何编译方式 1 :在线编译方式 2 :本地编译 参考 NENU-Letter-Template NENU’s recommendation letter template. 东北师范大学推荐信模板 项目地址 GitHu…

Linux驱动设备导论(1)

最近本人在学习Linux驱动,本系列教程是本人在一边学习,一边总结的系列教程,希望能够给很多刚学驱动小伙伴一些总结。 1.Linux设备分类 驱动针对的对象是存储器和外设,不是针对CPU,可以分为以下三大类: 1.…

WordPress Country State City Dropdown CF7插件 SQL注入漏洞复现(CVE-2024-3495)

0x01 产品简介 Country State City Dropdown CF7插件是一个功能强大、易于使用的WordPress插件,它为用户在联系表单中提供国家、州/省和城市的三级下拉菜单功能,帮助用户更准确地填写地区信息。同时,插件的团队和支持也非常出色,为用户提供高质量的服务。 0x02 漏洞概述 …

统计信号处理基础 习题解答10-4

题目: 重复习题10.3,但条件PDF变为: 以及均匀先验。如果非常大,这样先验知识很少,则会出现什么情况。 解答: 如果记 那么,根据条件独立性质,得到: 其中,&am…