Camera和 tris,verts的优化
Unity的Camera组件有很多可调节的参数,当需要做优化的时候,stats面板中的tris和verts这两个重点项都与Camera组件的参数有很大关系,有些参数的意义Unity手册说得不够详细,经过我们的测试和咨询,把结论记下来,如果有不对欢迎留言~
Field Of View 这个值的范围从1-179,是一个角度,具体是哪个角呢,是从Camera自身坐标系x轴方向看过去的红色夹角,如图所示,在这个角度下摄像机的远近裁剪面与y轴平行
Clipping Planes 远近裁剪面,就是下图中梯形的下底和上底
接下来是本文的重点,请大家仔细阅读,我就一个常见问题,stats面板中显示的GPU渲染的面数tris及顶点数verts到底如何计算出来的?
这个问题之所以常见是因为影响Unity渲染效率或者游戏画面是否卡顿的最关键指标,就是stats面板中的tris和verts,搞清楚这两个指标的确切含义对于优化的意义不言而喻。
之前我一直以为这两个数据就是模型落在camera梯形中的顶点数,后来发现并不是这样,我把远裁剪面弄得与近裁剪面很接近,或者调整 field of view 都会改变这个梯形的体积,里面容纳的顶点看起来没有,但是stats面板里的数据确一直有。如下图,看起来这个梯形里没有顶点但是tris和verts的数据都显示GPU渲染出了那个矩形,12个tris(空场景本身有2个tris,剩下矩形6个4边面等于12个tris三角面)加24个verts(这个数字受多因素影响,不能从表现上解释):
camera 组件参数如下(注意field of view)
当我改变 field of view 到 120 以上时候,在game视图下我们就能看到那个cube了,换句话说,真正的结论就是:
Unity stats 视图中的 tris 和 verts 并不仅仅是视锥中的梯形的 tris 和 verts,而是 field of view 所有取值下的 tris 和 verts,换句话说,哪怕你在当前game视图中看不到这个 cube,如果当你把 field of view 调大到 179 过程中都看不到这个 cube,stats面板才不会统计,gpu才不会渲染,否则,都会渲染(见下图),而且unity不会把模型拆分,这个模型哪怕只有1个顶点需要渲染,unity也会把整个模型都渲出来。
Unity 模型优化中很常见的一个问题就是美术用max做出来的模型,在max里显示面数和顶点数少于unity中的,或者出现不一致的情况,根据我们的实际项目经历原因:
1)是max的数据显示的是四边面,而unity里status面板里的面tris是三角面,这两个的对应关系我根据数据总结是三角面的数量是四边面的2倍。
2)大家看一下这篇博主的文章 Unity 与 max 中顶点数面数区别的原因,其中提到的 Unity 这种将顶点一分为多的原因,主要有两个:一个是UV splits,一个是Smoothing splits。我们遇到的主要是 UV split,用通俗的语言解释就是UV 分割(max中用了几张UV网),比如一个人,他的UV分为头,身子两部分,一个车UV分为窗户,轱辘等等,UV分的越多,到Unity中的顶点数就会越多。所以最终的结果就是有的模型面多顶点少(如人物),有的模型面少顶点多(结构复杂的车),这也就解释了为什么max和Unity中模型的面数一般是一致的但是顶点数并没有直接的对应关系。
3)不同的制作方式对模型最终到Unity里也就是GPU的渲染下也会有不一样的结果,下面上一组图,三个不同颜色的加号,因为制作方式的不同导致了截然不同的渲染效率(而且这点往往和美术同学的认识相悖)
以下三个加号,绿的是两个box横竖穿插,红的是一个矩形挤压出横向矩形,黄的是一个竖box加左右两个横向box删掉横向box与纵向重叠的面,具体表现大家看数据吧~
Camera和 tris,verts的优化的更多相关文章
- Android--从系统Camera和Gallery获取图片优化
前言 之前有两篇博客讲解了如何从系统内已有的Camera和Gallery应用中获取图片的例子,看到评论里有朋友说有时候会报错,导致程序崩溃的问题.本篇博客主要就这个问题分析讲解一下,最后将以一个简单的 ...
- [Unity优化]批处理01:Statistics窗口
参考链接: https://docs.unity3d.com/Manual/RenderingStatistics.html unity版本:2018.3.8 新建一个场景,只保留Main Camer ...
- Unity 5 Stats窗口
Unity5的 Statistics上的统计信息和Unity4 有一些区别, Statistics窗口,全称叫做 Rendering Statistics Window,即渲染统计窗口(或渲染数据统计 ...
- unity优化建议
使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用.不同平台和不同硬件得到的值会不一样,可 ...
- Unity Optimization UNITY优化关注列表
这里主要罗列Unity引擎进行开发的应用或游戏,可以进行优化的各个关注点.(此文会持续更新) C# GC alloc Update LateUpdate Serialize String ToStri ...
- Unity 性能优化(力荐)
开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...
- Unity3d优化
检测方式: 一,Unity3D 渲染统计窗口 Game视窗的Stats去查看渲染统计的信息: 1.FPS fps其实就是 frames per second,也就是每一秒游戏执行的帧数,这个数值越小, ...
- u3d 性能优化
http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...
- 【Unity技巧】Unity中的优化技术
http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...
随机推荐
- opencv VS2010配置
一.下载 opencv下载地址:http://www.opencv.org.cn/ 点击下载栏 最新的可能有3.2了,但是支持的VS版本是VS2012等版本.这里只选用2.4.9版本 下载后就是安装 ...
- DeepLearningFlappyBird-深度学习玩游戏-1-环境搭建
-------------------------------------------------------------------------------------- https://githu ...
- redis的图形界面管理工具
大部分人都知道redis是一款用在缓存服务器上的软件,它与memcache类似,都可以存储海量的数据,用在大访问量的web网站.聊天记录存放等方面,但是又与memcache不同: 1.缓存数据可以持久 ...
- SVN回滚机制
引子 工作中遇到一个新同事提交代码时不知怎么的出现了大面积的代码覆盖,由于对SVN也不是特别了解,就看着别人处理问题,自己也验证性的实践了一下,总结一下. 总结 svn每一次提交成功,都会有一个`编号 ...
- @class && #import
先前被问到@class和#import的区别,我很直白的说使用@class是对要引用的类进行一个声明,不让编译器报错,到后面要用的时候再引入相应的类,而#import则会引入类的所有实例变量和方法.接 ...
- UIProgress控件的属性和方法
进度条控件是IOS开发中一个简单的系统控件,使用总结如下: 初始化一个进度条: - (instancetype)initWithProgressViewStyle:(UIProgressViewSty ...
- MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)
知识点八:MySQL触发器的应用(16,17) 触发器的定义: 什么是触发器: 触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据是触发执行,他比数据库本身标准的功能有更精细和更复杂的数据 ...
- JQuery树形插件Dynatree的包装对象
这是JQuery Dynatree插件的包装对象,做了些改进和增强,增加了右键菜单,以及相应事件等扩展1. [代码]MagicDTree的基本使用 <SCRIPT type=text/javas ...
- 各种java生成word解决方案的优缺点对比
解决方案 优点 缺点 Jacob 功能强大 直接调用VBA接口,程序异常复杂:服务器必须是:windows系统+安装Office:服务器端自动化com接口容易产生死进程造成服务器宕机 Apache P ...
- 简单的JDBC封装
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...