https://www.jianshu.com/p/3b285110069f
https://blog.csdn.net/e295166319/article/details/79107399《第16章 Unity中的渲染优化技术》
角色模型面数:一个角色移动平台一般300 ~ 1500面,PC平台一般1500~ 4000面。
-
模型骨骼数:一般不多于30个骨骼
-
Draw Call计算公式
http://www.cnblogs.com/zhaoqingqing/p/4623839.html
在来谈到 Batch,其实也是 Draw Call 的另一种称呼。你可以想成每一次的 Draw Call 会产生一个 Batch,而 Batch 里装的是物件顶点信息,Batch 由 CPU 通过 “驱动程序” 将顶点信息送往 GPU,GPU接手后将物件画在画面上。由此可知,越多 Draw Call,CPU 就越忙碌。这下更清楚知道 Draw Call 数量所影响的是 CPU 效能而非 GPU。
NVIDIA 在 GDC 曾提出,25K batchs/sec 会吃满 1GHz 的 CPU,100% 的使用率。所以他们推出了一条公式,来预估游戏中大概可以 Run 多少个 Batch:
Draw Calls = 25K * GHzcpu * Percentcpu / FrameRate ;
举个例子:如果你的目标是游戏跑30FPS、使用2GHz的CPU、20%的工作量发給Draw Call來使用,那你每秒可以有多少Draw Call呢?
333 Batchs/Frame = 25K * 2 * 20% / 30 .
性能优化最直观的目标是提升帧率,帧率可以理解为我们常说的刷新率,通常用FPS表示,即游戏每秒钟的刷新次数Frames per second.
用几个数字大致了解性能优化的目标:
- FPS = 1/ T ; T为每帧游戏消耗的CPU时间。
通常比较理想的帧率为60,相应地,一帧的CPU的时间为T=1/60=0.016秒; - 苹果A11处理器最高时钟频率大约为 2.5 GHz,其运行速度为每秒6000亿次浮点计算,0.6T FLOPS(float point operation per second)。
以帧率60计算,A11处理器的运算次数为每帧不超过6000亿/60=100亿次计算。 - 如果将应用程序的一次指令集调用视为一次计算,可以理解为应用程序的Update中的函数语句调用次数不超过100亿次。
- 应用程序或者说游戏的一次Update到底有哪些事情在处理?
一次Update的工作:
逻辑+渲染
资源优化标准
Mesh动态模型:
- 面片数<3000
- 材质数<3
- 骨骼数<50
静态模型: - 顶点数<500
Texture贴图: - 长宽<1024
音乐资源优化 - Audio长时间音乐(背景音乐)压缩格式 mp3
- 短时间音乐(音效)非压缩格式 wav
Shader - 尽量减少复杂数学运算、
- 减少discard操作
-
Unity渲染统计窗口:https://blog.csdn.net/linuxheik/article/details/78866677
-
参数说明
-
优化概览
一、 Draw Call batching
https://docs.unity3d.com/Manual/DrawCallBatching.html
绘制调用合并,主要有static batching(合并渲染批次)、dynacmic batching、instancing(实例渲染)
Unity内置的批次合并,首先要求要合并的物体使用同一个材质。
1 static batching:静态批次合并
静态批次合并,是指Unity可以将静止并且材质相同的物体合并为一个巨大的mesh来渲染。
- 将游戏对象设置为静态。
- 使用同一个材质。只有使用同一材质的物体才可能被合并。因而,如果想要获得好的合并效果,要尽可能多的让不同的物件模型共用同一个材质。
- 纹理打包。如果有两个材质球,使用的Shader相同,仅仅是贴图不同,可以考虑合并这些贴图到一个大的贴图里,这个过程叫做图集打包——Texture atlasing。一旦这些贴图在一个图集里,就可以将这两个材质,用一个材质球代替。
2 dynamic batching:动态批处理
3 GPU Instancing:多实例渲染
- animation instancing:https://blogs.unity3d.com/cn/2018/04/16/animation-instancing-instancing-for-skinnedmeshrenderer/
https://www.cnblogs.com/88999660/p/5541695.html
在Unity中用手动方式降低Draw Call
如果我们想减少draw call,在Unity中或者在其他引擎上,可以尽量减少使用的material(材质)。基本上,这些可以还原为这些简单的步骤:
1.整理所有的material并且通过他们的shader类型收集他们
2.第二步:对于使用相同shader的材质,将他们的贴图做成一个图集(Atlas)
3.创建一个material,它将包含shader和图集(Atlas)
4.网格的所有UV重新映射,使用Shader适配图集的坐标
5.用映射的网格创建出步骤3的material
二、LOD
Levels of Detail的简称,意为细节层次。
三、Occlusion Culling
遮挡剔除,Culling Distance。
角色模型
针对角色模型
1. 角色模型
关闭光照探头、
关闭反射探头、
关闭接收阴影、一般效果要求开启投射阴影,但是接收应该没有必要开启,视情况而定
VBO(顶点缓冲对象Vertex Buffer Objects-是让APP存储和操作GPU内存中数据的一种机制,当GPU处理数据时,不需要从CPU内存中读取,可以节约内存带宽) Total的值是207.2KB,这与场景里没放物体207.2KB一样大小,这说明了动态批处理不仅优化了CPU的DC,还有优化了Memory(内存)大小!
影响因子:
1.光照
-
光照方程:
-
光照方程的加标示版本:
阴影
雾气
LOD