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的一个系列教程的基础上总结扩展而得 ...
随机推荐
- aop+自定义注解
自定义注解,并且实现,需要两个文件: 自定义注解类: package com.clc.server.annotation; import java.lang.annotation.ElementTyp ...
- SQL JOIN连接分类[转]
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符):包括相等联接和自然联接: 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行: 2.外联接.外联接可以 ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3
C. Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input ...
- HDU4292 Food —— 最大流 + 拆点
题目链接:https://vjudge.net/problem/HDU-4292 Food Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...
- HDU2102 A计划 —— BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- springboot web项目搭建
1.选择spring initializr 2.填写应用名称及设置相关配置,建议使用默认配置即可 3.选择相关技术,我们现在web技术 4.填写项目名称 5.项目文件结构如下 6.直接运行 java ...
- codeforces 414B B. Mashmokh and ACM(dp)
题目链接: B. Mashmokh and ACM time limit per test 1 second memory limit per test 256 megabytes input sta ...
- [Java]手动编译Java
1.安装JDK 2.编写 Example.java 程序放到C 盘 public class Example { public static void main(string[] args) { sy ...
- 【Codeforces 776B】Sherlock and his girlfriend
[题目链接] 点击打开链接 [算法] 将所有质数染成1,合数染成2即可 [代码] #include<bits/stdc++.h> using namespace std; #define ...
- bzoj 4987 Tree —— 树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4987 其实就是在树上找有 k 个点的连通块(路径上的点都选是最优的),之间的边都走了两遍,只 ...