Draw Call

为将对象渲染到画面中,Unity的渲染引擎针对OpenGL、Direct3D等图形API发行了渲染调用 (Draw Call)。

Unity引擎可按特定的顺序在一帧内渲染多个多边形网格。
由于多边形网格的渲染分别依靠材质、纹理等资源,需要依靠不同于当前渲染中使用的资源来渲染多边形时就要变更资源了。
由于变更资源的负荷较高,所以要将使用相同资源的多边形进行分组,尽量通过一次渲染调用来进行渲染,这样就可以完成高效率的渲染。我们将这样的处理称为批处理 (Batching)。

材质变更

资源变更中,材质的变更伴随着着色器的变更,还需要重新构建内部的渲染状态,所以是非常缓慢的处理。这样的处理被称为SetPass。

纹理变更

纹理的变更中着色器属性更新的部分其内部渲染状态没有改变,只是增加了一次渲染调用,因此并不像材质变更那样处理得较为缓慢。

提高渲染性能

要提高渲染的性能,重要的不是减少渲染调用(批处理)的次数,而是如何减少SetPass的次数。
A A A B B B 2次渲染调用,2次SetPass
材质变更
A A A B A A 3次渲染调用,3次SetPass
纹理变更
A A A a A AA 3次渲染调用,1次SetPass

UI元素的批处理是分别在其各自的画布单位中进行的。
使用相同材质、相同纹理的元素被批处理了。
如果各个元素没有重叠,可以通过批量排序 (Batch Sorting) 结构进行优化处理。批量排序是将可以集中渲染的没有重叠的UI元素的渲染顺序进行自动变更,以使材质和纹理最低限度的变更的一种优化批处理的结构。

A A B A B B 4次渲染调用
A A A B B B 2次渲染调用

小建议
1 仅为需要特殊处理的内容使用特别的材质
2 为众多UI元素使用一种材质
3 精灵尽量集中于一个纹理图集中
4 同一个界面尽量少使用不同字体
5 层级结构的变更也是一种负荷较高的处理,需要对画布上的所有图形元素进行重新计算,也伴随着批处理的重新计算,要尽量避免
6 图形元素在移动时每次都需要重新生成顶点,是负荷较高的处理,可以去掉包含移动图形元素的画布的Pixel Perfect属性的勾选,或者在图形元素开始移动前去掉,在移动结束后再勾选

uGUI学习篇: UI元素的渲染与性能相关推荐

  1. Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理

    Unity UGUI 效果 之 UI 元素 多边形UI (例如雷达图,圆形,不规则多边形 UI等)显示 的简单实现的几种方法整理 目录 Unity UGUI 效果 之 UI 元素 多边形UI (例如雷 ...

  2. Vue学习笔记进阶篇——多元素及多组件过渡

    本文为转载,原文:Vue学习笔记进阶篇--多元素及多组件过渡 多元素的过渡 对于原生标签可以使用 v-if/v-else.但是有一点需要注意: 当有相同标签名的元素切换时,需要通过 key 特性设置唯 ...

  3. 【前端学习之HTMLCSS】-- HTML第七篇 -- 图片元素与多媒体元素

    [前端学习之HTML&CSS]-- HTML第七篇 – 图片元素与多媒体元素 文章目录 [前端学习之HTML&CSS]-- HTML第七篇 -- 图片元素与多媒体元素 前言 图片元素 ...

  4. Unity基础UGUI学习

    使用 UGUI来开发UI,离不开Canvas组件,所有的 UI 元素,一般都是放在包含 Canvas 组件的节点. Canvas组件都有那些属性? RenderMode: 渲染模式,大概有三种: Sc ...

  5. 【微信小程序开发学习篇】

    微信小程序开发学习篇 概述 相关信息 笔记制作时间:2022-9-25 参考视频:黑马视频 参考文档:微信小程序官方开发文档 文章目录 微信小程序开发学习篇 概述 相关信息 小程序基础 1.数据绑定与 ...

  6. Silverlight 2 DispatcherTimer和通过XAML创建UI元素

    XAML标签元素在silverlight运行时被转换成相应的对象,通过XamlReader类的Load方法,动态创建UI元素: 指定一条XAML内容字符串,为按照XML规则运行,XamlReader. ...

  7. [网络安全学习篇60]:文件上传

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

  8. LVGL之学习篇(一)

    LVGL之学习篇(一) 学习目的 LVGL简介 LVGL本身是一个图形库,前身是litterVGL.其作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以 ...

  9. 如何使用深度学习识别 UI 界面组件?

    导读:智能生成代码平台 imgcook 以 Sketch.PSD.静态图片等形式的视觉稿作为输入,可以一键生成可维护的前端代码,但从设计稿中获取的都是 div.img.span 等元件,而前端大多是组 ...

最新文章

  1. R EnhancedVolcano 绘制火山图
  2. Linux技术研究-基础篇(raid与LVM,配额)
  3. Java消息服务JMS详解
  4. 命令行 蓝牙_Noble - Window平台NodeJs蓝牙BLE开发库
  5. MS SQL SERVER2005 分页存储过程
  6. springmvc中的单例问题
  7. 关于maven打包成.exe
  8. 最好电脑操作系统_操作系统都有哪些呢
  9. SqlServer2008修改编辑前200行
  10. jquery 遍历无限极树_jQuery parent()和children()树遍历函数示例
  11. java mybatis缓存机制_mybatis缓存机制与陷阱
  12. python绘图-增加子区域
  13. micropython(esp8266)SG90舵机控制
  14. 窝囊同事做测试三年未涨工资,被开当天,bat全部高管门口迎接。
  15. office_word_如何创建目录
  16. 超级好上手的告白小程序
  17. 3.3 三角函数的积化和差与和差化积
  18. java爬取携程景点门票数据
  19. Shell脚本中:#!/bin/bash和#!/bin/sh是什么意思以及区别?
  20. 百度地图如何准确定位?注意surroundingPois

热门文章

  1. python批量重命名图片、文件脚本
  2. VB源码之友终于开发完毕了
  3. C++ 高精度除法运算(c=a/b)
  4. Javascript轻应用命令行工具
  5. 2020年8月编程语言排行榜出炉:C语言位居第一,Java、Python位居二三
  6. SP91 未知唤醒源日志
  7. @CrossOrigin Enabling CORS
  8. 【续】DeepMind项目取得新进展:一种改进机器人学习系统的新思路
  9. 音视频学习之-YUV裸数据
  10. UIC564-2 附录10 – 橡胶法兰产品的阻燃防火测试