首页 > 编程知识 正文

ugui源码剖析,ugui是什么

时间:2023-05-04 16:35:43 阅读:20953 作者:2454

UGUI性能优化的Draw Call游戏开发圈的人一定听说过优化游戏会降低Draw Call。 Draw Call到底是什么呢? 要了解什么是Draw Call,请从图形引擎渲染屏幕开始。

另一方面,图形引擎呈现画面的过程Unity (或基本上所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述。

1 .可见性测试引擎首先经过简单的可见性测试,确定摄像机上可见的物体

2 .准备需要绘制数据这些物体的顶点(包括局部位置、法线、UV等)、索引)、顶点如何构成三角形(变换)、物体的位置、旋转、缩放、摄像机位置等)、相关光源

3 .假设通知图形API开始绘制通知图形API——,或仅仅通知GPU——开始绘制,则GPU经过一系列操作,在屏幕上绘制成千上万个三角形,最终组成一张图像。

二、Draw Call Draw Call ,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程

Draw Call的优化主要是CPU的速度优化,CPU和GPU并行运行。 处理方法是在CPU和GPU之间有命令缓冲区,CPU在其中添加命令,GPU从其中检索并执行命令。 性能瓶颈是CPU,而不是GPU,因为GPU的渲染速度通常远远高于CPU的处理速度。

例如,如果我有需要渲染的图像,CPU会准备此图像的数据(请注意,CPU准备这些数据的时候,是需要进行大量的计算的,比如法线、UV、顶点、位置、缩放、旋转、光照、纹理、渲染方式等等)并将其放入缓冲区,当GPU检测到缓冲区中有命令时运行,然后渲染此图像如果有10张、100张照片呢? CPU是否需要准备并添加10次、100次数据到缓冲区? 显然不合理。 因为理论上,几个相同的命令可以一起存储在缓存中。 这就是Draw Call优化http://www.Sina.com /

三、如何优化Draw Call如上所述,优化Draw Call其实就是把同样的数据放在一起,一起交给GPU处理,也就是批量批量处理。 问题是所有元素都可以批量处理吗? 处理器还不能到此为止。 元素之间的批量是有条件的。合批

首先,我将介绍纹理和渲染方法。 因为最好是理解和处理。层级、纹理、渲染方式,当这三者都相同的时候,就会合批(Batch):其实是地图。 纹理使用的是同一张贴图,或者是同一张图集中的不同贴图,就可以认为它们的纹理是相同的:渲染方法由Shader计算。 在unity中,材质球附着到着色器材质,并通过将材质添加到元素来指定渲染方法。 所以, 渲染方式; 请注意,如果UI元素(Image、原始图像和文本)的材质为None,则UGUI将指定默认的着色器UI-Default。

说明纹理和渲染方法,并说明级别。材质球Material相同,即可认为它们的渲染方式相同

如果级别相同,则判断为纹理、纹理一致,如果从渲染方法来看也一致,则开始合并批处理数据,处理数据后添加到命令缓冲区,GPU接收到命令后开始渲染。

在同一个Canvas中,UGUI的层次计算方法: 1、UI元素在它所占的屏幕范围内(通常为矩形),如果下面没有UI,则其层次号为0 (底部);

2、如果UI在下面,并且UI可以与其一起批处理,则级别编号与下面的UI级别相同;

3、如果UI在其下但不能Batch,则其级别编号为下UI的级别1;

4、当多个UI在下面时,用前两种方法遍历所有的层次号进行计算,其中最大的为自己的层次号。

为什么水平最难,最难处理? 举个例子吧。

在上图中,rapidhit和5rapidhit在同一本写真集中,bomb和wild在同一本写真集中,一共batch了两次。 没有问题,正如期待的那样。 请看下图:

在上面的照片中可以看到一共生成了4个batch。 因此,如果在两张相同写真集的图像之间插入另一张写真集的图像,发生重叠,则这两张图像不一致。 调整等级,看看下图。

在上图中,我们提高了bomb的级别,使rapidhit和5rapidhit级别连续,bomb和wild级别也连续。 此时,同一张专辑的图像被汇总了。 因此,我们在制作UI或写真集时,http://www.Sina.com /

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。