| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> UGUI的DrawCall和Rebuild -> 正文阅读 |
|
[游戏开发]UGUI的DrawCall和Rebuild |
1.DrawCall的概念DrawCall是CPU调用图像编程接口,命令GPU进行渲染的操作。造成DrawCall过高的性能瓶颈其实是CPU而不是GPU。UGUI的合并原理是将相同的材质进行合并操作。因此UGUI减少DrawCall的方式是尽可能地进行动态合批。 2.DrawCall的计算原理2.1.计算Depth (1)跳过不渲染的节点,如果处于渲染状态切没有任何其他相交的渲染元素,depth=0。 (2)如果处于渲染状态切有其他元素相交则找到相交元素中最大的depth,判断能不能合批,如果能合批则depth=maxDepth,否则depth=maxDepth+1。 (3)depth与是否相交有关,与是否为子节点无关。 2.2.材质球 计算出depth后,针对depth相同的情况下,获得材质球的Instance ID进行升序排列 2.3.纹理 再获得纹理的Instance ID进行升序排列 (1)使用图集SpriteAtlas则Instance ID为图集的ID (2)单个图片没有图集Instance ID为图片的ID (3)一个字体的Text,Instance ID为字体的ID 2.4.总结 所以DrawCall的计算就是上面3点从上到下的优先级顺序进行升序排列,只有满足3点相同GUI才能进行合批操作,算为一个DrawCall。 3.Rebuild概念Canvas负责将子节点的UI元素的网格合并,并生成相应的渲染指令再发送到Unity的图形管道的过程。所以Canvas就是渲染UI的组件,当UI发生变化就要执行一次Batch,它是影响性能更大的元凶。注意Canvas的Batch只会影响其子节点,但不会影响其子Canvas。 4.Rebuild操作Rebuild分为Layout Rebuilds和Graphic Rebuild ?4.1.Layout Rebuilds 重新计算一个layout组件的子节点的适当位置或者大小的时候触发 4.2.Graphic Rebuilds graphic元素基本大小,旋转以及文字变化、图片的修改等触发 4.3.总结 Layout Rebuilds和Graphic Rebuilds都会触发Rebuild,UGUI会收集一帧的所有change,然后统一进行处理。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 16:36:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |