魔兽世界9.0插件推荐_魔兽世界9.1插件推荐

魔兽世界9.0插件推荐_魔兽世界9.1插件推荐上一篇博客主要是简单的介绍了下NGUI合并DrawCall的基本原理,就是将一个UIPanel里所有的UIWidget按照Depth的大小进行排序,然后遍历排序后的UIWidget列表,将Depth相邻的并且懂事引用同一个Atlas的UIWidget的几何数据存入到一个UIGeometry中然后统一由一个UIDrawCall来调用GPU绘制。那么知道了NGUIDrawCall的基本原理我


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

      上一篇博客主要是简单的介绍了下NGUI合并DrawCall的基本原理,就是将一个UIPanel里所有的UIWidget按照Depth的大小进行排序,然后遍历排序后的UIWidget列表,将Depth相邻的并且懂事引用同一个Atlas的UIWidget的几何数据存入到一个UIGeometry中然后统一由一个UIDrawCall来调用GPU绘制。

那么知道了NGUI DrawCall 的基本原理 我们就可以对游戏里的UI进行优化以达到减少DrawCall的目的,那么该如何优化呢?

     1、首先,我们的UI要分模块话,将只有该模块用到的图片尽量打包一个Atlas里,而一些其他模块都会用到的图片打包一个通用的Altas里,这样可减少Atlas的穿插应用,即减少了内存也方便管理,更主要的是这样我们更容易为后续减少DrawCall做准备。

      2、然后就是尽可能的将引用到同一个Atlas的UIWidget的Depth相邻,这样能让后续UIWidget排序时将引用同一个Atlas的UIWidget相邻。比如我在项目中会将引用到同一个Atlas的UISprite的Depth设置在一个范围里,字体的设置在另一个范围里,尽可能的让它们之间少参插。

OK,大概的优化思路就是这样,接下来让我们做个例子来看看实际的效果:

魔兽世界9.0插件推荐_魔兽世界9.1插件推荐

上面的图就是我创建了5个UISprite但是他们应用的都是同一个Atlas,这时当你的这个UIPanel里所有的UISprite引用的都是同一个Atlas并且没有其他UIWidget时,Depth就不用管了,从图可以看到5个UISprite只有一个DrawCall,那么如果有引用了两个Atlas,那么DrawCall会不会只有两个?答案是否定的,只能说DrawCall最少有两个。继续看例子:

魔兽世界9.0插件推荐_魔兽世界9.1插件推荐

从图里可以看到我引用了两个Atlas但是DrawCall却有5个,这是不是有点恐怖,你想想如果没个UIWidget都要一个DrawCall的话,那我们UI的DrawCall就会大的让你无法接受,要是这样的游戏装在手机上玩那你的手机都可以煎鸡蛋了,呵呵。。 这样肯定是不行的。那么我是怎么做才会有这么都的DrawCall的呢,其实就他们的Depth进行了参插,将第二个和第四个sprite1引用Atlas设成了Refractive Atlas。下面就用上面说的优化思来优化尽可能的优化到2DrawCall,我这里是很容易做到的,如果UI很复杂的话我们就尽力而为吧,好了,看结果:

魔兽世界9.0插件推荐_魔兽世界9.1插件推荐

哦啦,DrawCall真的减少了而且是减到最少了,我的做法就是把引用到Wooden Atlas的UIWidget的Depth设成相邻的0、1、2,而引用Refractive Atlas的UIWidget的Depth设成3和4了,这样就达到了上面的效果了。

哦啦,NGUI DrawCall的优化就写到这啦,写的很简单,如果大神有更好的建议或补充请指教!!!!!!



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193084.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springboot 之 使用jasypt加密解密插件[通俗易懂]

    springboot 之 使用jasypt加密解密插件[通俗易懂]简单使用jasypt是一个java实现的安全框架1、该工具支持注解方式开启jasypt功能,以及注解方式引入一个或多个需要处理的配置文件。 2、该工具同时支持properties与yml文件的解析处理。 3、该工具支持自定义加解密类型和复写加解密方法。引入插件<dependency> <groupId>com.github.ulisesbocchio&…

    2022年9月25日
  • ffmpeg解析MP4封装的avc1编码问题「建议收藏」

    ffmpeg解析MP4封装的avc1编码问题「建议收藏」0、问题  遇到的问题:使用ffmpeg直接读取avc1编码的mp4视频,将读取到的帧写下来(H264码流),播放失败。  原因:ffmpeg解码获取的AVPacket只包含视频压缩数据,并没有包含相关的解码信息(比如:h264的sps,pps头信息),这些解码信息包括编码的profile,level,图像的宽和高,deblock滤波器等。没有这些编码头信息解码器就不能进行解码。1、mp4…

    2022年10月17日
  • elasticsearch size+from 在分布式系统中深度分页查询慢分析

    在实际的项目中数据量较大,查询ES进行查询并做分页处理,导致当分页页码过大的时候,查询响应非常的慢,在网上找打这一个分析,记录一下!Tip在 reindex 中解释了如何 能够 有效获取大量的文档。分页在之前的 空搜索 中说明了集群中有 14 个文档匹配了(empty)query 。 但是在 hits 数组中只有 10 个文档。如何才能看到其他的文档?和 SQL 使用 LIM…

    2022年2月27日
  • 在Java Web项目中引入Mondrian多维分析框架

    在Java Web项目中引入Mondrian多维分析框架

    2021年8月31日
  • RuntimeException异常

    RuntimeException异常/*Exception中有一个特殊的子类异常RuntimeException(运行时异常)。 *RuntimeException非常特殊,它的的子类也可以直接抛出,不用声明。 *1.如果在函数内容抛出该异常,喊上可以不用声音,编译通过。 *2.如果函数上声明了该异常,调用者可以不用进行处理,编译一样能通过。 *3.之所以不用在函数上声明,因为不需要让调用者处理。 *4

    2022年7月24日
  • leetcode-1074. 元素和为目标值的子矩阵数量(前缀和+hash)

    leetcode-1074. 元素和为目标值的子矩阵数量(前缀和+hash)给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐标不同(如:x1 != x1’),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,1],

    2022年8月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号