1.基础
渲染分析:
FPS:(Frames Per Second):一秒内渲染多少帧。

手机端30帧就行,太高会耗电。

1.摄像机深度
摄像机的默认深度是-1, 深度越高,越晚绘制,所以深度低的就被深度高的覆盖了。

将不需要渲染的物体设置在一个层级,在摄像机面板的Culling Mask中取消这个层级

2.模型
1.尽可能降低三角面片数和UV数(UV数最好在4000一下,如果不是那就拆分),尽可能用同一张UV,贴图最好能循环使用,为了降低调用drawcall的次数。

2.Unity:不动的物体设置为Static,不会受到碰撞的物体取消或者删去碰撞检测,物理系统。同理,阴影也是。

3.合批batching
1.动态合批规则

材质相同时合批的前提,如果是材质实例的话(C#脚本中用shareMaterial),则不能合批.

支持不同网格的合批,材质相同就行

单个网格最多300个顶点,900个顶点属性

如果shader中用到网格的Position、normal和UV,则最多是300个顶点

如果shader中用到网格的Positon、normal、UV0、UV1和tangent,则最多180个顶点。

镜像的transform不能合批

Lightmap对象不能合批

2.静态合批规则:

选中相同材质的物体,设置为static,将layer设置为static batching,一个批次的物体会被渲染成同一个网格,所以会导致网格容量变大。

当顶点数超过32k后会生成另一个合批.

3.GPU实例化

用于对多个对象(网格一样、材质一样、但是材质属性不一样)合批,单个合批最大上限为511个对象。

4.设置LOD和Mip Map,使用LightMap
5.贴图
降低贴图尺寸,多个物体使用一张贴图,或者将几个贴图合并成一张贴图。

6.光照
减少像素光照,比如在场景中保持一个方向光采用逐像素的光照,其余的设置为Not Important。

2.shader优化
1.精度优化

2.能放到顶点的不要放在片段,因为片段是逐像素渲染,很耗性能。

3.一个Subshader内如果含有多个pass(不包含unity中起特殊作用的pass),则会渲染多次,同时不能进行合批。

4.在不需要Tilling和Offset的贴图属性前加入[NoScaleOffset]

5.GrabPass如果不指定贴图的名称,则每个对象的GrabPass都会每帧生成一次,如果指定贴图名称,则所有对象的GrabPass在一帧内只会生成一次。

6.尽量使用vertex/fragment(Unlit shader)而不是surface shader

7.利用shaderLOD实现高中低配硬件的区分

8.减少overdraw(一个物体被渲染多次就是overdraw),一般出现在渲染模式为透明的场景中。在场景【scene】下拉列表中选择overdraw就能看见,越亮的地方就是overdraw最多的部分。

9.减少变体的数量

定义变体:#pragma multi_compile _ FOG_LINEAR  //定义了一个fog_linear和一个空的变体

剔除变体:#pragma skip_variants FOG_EXP FOG_EXP2//剔除了FOG_EXP和FOG_EXP2变体

#pragma shader_feature D E F

如果在属性面板勾上“剔除没有被使用的shader_feature”,那么那些没有使用到材质中的shader_feature会不被计入变体数量中,但是如果都没有被使用,那么至少第一个shader_feature会被计入。

如果变体的功能是在游戏中被人手动关闭开启的,那么这些变体必须是multi_compile,而不是shader_feature,其余情况尽量使用shader_feature(特效,美术类).

Shader variants collection变体收集器:

将游戏中使用到的变体添加到变体收集器中,游戏会在开启前对这些变体进行预加载,防止游戏中加载导致卡顿。这样会增加shaderLab内存。

project setting-->Graphics-->shader loading中可以看到场景中变体的数量。

研究下远程三丰云提供的 免费云服务器 和免费虚拟主机 看看能不能弄一个

游戏开发-unity 游戏性能优化相关推荐

  1. 游戏开发48课 性能优化6

    3.7.2 算法优化 思路是找出最耗CPU的算法或逻辑,优化之. 空间换时间.利用预排序/预处理/缓存/动态规划等等思路换取CPU的性能. 选取更快的算法.属于数据结构和算法的范畴,思路是将O(n2) ...

  2. 游戏开发57课 性能优化14

    5. 内存优化 内存优化目的是加快IO,防止卡主线程,防止频繁操作(创建/删除)内存,避免内存碎片化和占用过高. 5.1 缓存法 与CPU的缓存计算类似,思路是将需要重复创建的对象缓存起来,销毁时将它 ...

  3. 游戏开发51课 性能优化9

    4.5 光照模型(Lighting/Illumination Model) 4.5.1 Flat Shading(平面着色) 根据表面法向量计算光照,并应用到整个面片上.速度最快,效果最差,容易暴露物 ...

  4. Unity游戏开发之游戏存档方式

    目录 1.Unity自带存储方式PlayerPrefs 2.XML存储方式 3.Json类型存储方式 1.Unity的序列化问题 2.Unity中支持序列化的类 3.Unity中Json的使用方法 4 ...

  5. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例

    C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例 Unity中循环遍历每个数据,并做出判断 很多时候,游戏在玩家做出判断以后,游戏程序会遍历玩家身上大量的所需数据,然后做出判断,即首先判 ...

  6. C#开发Unity游戏教程之判断语句

    C#开发Unity游戏教程之判断语句 游戏执行路径的选择--判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...

  7. C#开发Unity游戏教程之Unity中方法的参数

    C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号"( )",有意义吗?看起来最 ...

  8. C#开发Unity游戏教程之游戏对象的行为逻辑方法

    C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑--方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...

  9. C#开发Unity游戏教程之使用脚本变量

    C#开发Unity游戏教程之使用脚本变量 使用脚本变量 本章前面说了那么多关于变量的知识,那么在脚本中要如何编写关于变量的代码,有规章可循吗?答案是有的.本节会依次讲解变量的声明.初始化.赋值和运算. ...

最新文章

  1. 【周末阅读】5G时代新型基础设施建设白皮书
  2. python系统-python做系统
  3. 《Cisco IPv6网络实现技术(修订版)》一2.6 配置练习:使用Cisco路由器配置一个IPv6网络...
  4. php正则表达式,数组,函数
  5. windows10配置make命令
  6. 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简介
  7. 计算机组成原理 唐朔飞 知识点,计算机组成原理知识点总结(唐朔飞版)
  8. 北京链家买二手房的经历与感受
  9. 手机布局rem的使用(rem)
  10. 猜大小游戏(条件判断)
  11. CVE-2018-1273漏洞复现
  12. java SSM项目基础(day 5)[实现用户添加功能(注册)]
  13. 01 | Java入门级学习指南
  14. cookie、seesionStorage、localStoreg的区别
  15. 26、BDS B1I电文处理实现
  16. 民航大学计算机复试题,中国民航大学考研复试
  17. 企业级集群架构体系实战(一)
  18. 微信接入微信JS-SDK----签名算法
  19. 弘辽科技:拼多多搜索排名规则,怎么查?
  20. 校园云盘(私有云存储)育网解决方案

热门文章

  1. sid,eld,sidd dataset介绍,eld dataste, dng图像处理
  2. 美国老姐看完200+中国学生SCI论文,怒写超详细“中国人英文论文写作指南”,还被推上了B站热门…...
  3. 使用VirtualBox安装Ubuntu系统
  4. 解决IE9浏览器报 ‘console’未定义的问题
  5. 晋中达内python培训
  6. app混淆加固+防止反编译+360加固
  7. Nginx Rewrite重写
  8. fedora20 安装搜狗输入法及各种问题的解决
  9. DirectDraw动画编程
  10. from PIL import Image不能导入Image