| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> [游戏开发][unity]NGUI研究 -> 正文阅读 |
|
[游戏开发][游戏开发][unity]NGUI研究 |
NGUI是啥用过的老铁都知道。渲染UI也遵循基本的渲染物体条件
这和渲染3D物体没有区别,唯一的小区别是,UI是平面的,6个在同一平面的顶点组合成一个长方形。一张图片如何渲染出来大家都懂,但UI不是一张图,而是一个复杂的堆叠关系,NGUI就是一个管理渲染堆叠关系的框架。 图元是如何一层一层叠上去的?看一下NGUI的Shader就知道,开启深度测试但不开启深度写入,换言之,后面渲的会覆盖前面渲的。 难道说,NGUI的功能就是把所有要渲的物体排好序然后依次渲到屏幕上?事情肯定没这么简单,看下面的图 测试场景中有两个UISprite,如果是依次绘制的话肯定是要Draw Mesh Wooden Atlas两次,从FrameDebugger中看很明显两张图是一起渲的。此处没有GPUInstance也没有SRP Batch合并技术,很明显他们压根就是一个Renderer渲染出来的,它到底是怎么实现的呢
NGUI的图集是干啥的,就是开发功能的同学尽可能的把同时出现在一个屏幕内的Texture合并成一个大的Texture。如果不合并,大胆猜测一下渲染两张图的流程大概是这样子,Renderer(物体A) +?材质Material + Shader + Mesh网格顶点(物体A) + Texture贴图(物体A) + UV(物体A)?,再来一遍Renderer(物体B) +?材质Material + Shader + Mesh网格顶点(物体B) + Texture贴图(物体B) + UV(物体B) ,而合并后,由于贴图变成了一个,渲染流程变成了Renderer+?材质Material + Shader + Mesh网格顶点(物体A+?物体B) +?合并贴图?+ UV(物体A+物体B)? 顶点+贴图是如何在渲出来两张图的?不懂渲染基础的小伙伴建议看我另一篇比较基础的文章 [游戏开发][渲染篇][第一篇]渲染的本质_liuyongjie1992的博客-CSDN博客_渲染本质
?上文已经验证了打包图集可以一次渲多个UI,其本质还是因为他们共用了一个图集。下面我们介绍一种情况,即便是同一个图集的两张图,也会分两次渲染,看下图 操作是将两个GameObject放到两个新建的panel上,分别是Panel1和Panel2,为何会这样?原因是UIPanel是渲染的管理层,每个Panel的渲染独自管理。 下面看一下UIPanel的代码,如何管理渲染,核心创建的地方是FillAllDrawCalls函数,调用该函数的条件是mRebuild参数为true。
FillAllDrawCalls有几点需要注意的地方 1:FillAllDrawCalls的函数会Destroy当前全部UIDrawCall并再次遍历生成新UIDrawCall,因此项目中任何频繁调用它的地方都要优化掉 2:遍历UIWidget时如果发现material或Texture或Shader发生变化时都会把上一个UIDrawCall存进List并再次生成一个新的UIDrawCall,请注意变化的检测条件! 下面看一下UIDrawCall具体是干啥的
上文说了UIPanel对UIDrawCall的管理,但UIPanel并不负责渲染,把渲染物体需要的参数传给UIDrawCall后由它来负责。 比较核心的函数有UpdateGeometry、UpdateMaterials、CreateMaterial() DrawCall创建或变化时优点调用UpdateGeometry函数,该函数的作用是
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 22:24:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |