从三个方面入手:
1:Fill Rate
2:GPU Memory Bandwidth
3:Vertex Processing
可以使用Unity Profiler查看数据进行性能分析
①打开Profiler界面,然后通过Window
> Analysis > Profile Analyzer 打开 ProfileAnalyzer的界面。
一:Fill Rate
1.减少 shader中的 Fragment Shader 的复杂度,因为Fragment shader 负责告诉GPU要怎么往屏幕上画像素。
2.使用更优化的Shader,比如 MobileShader
(Mobile Shader也可以用在除移动平台之外的地方)
3.如果使用的是Standard Shader,可以减少使用贴图的数量,这样Unity在编译时会自动优化。
4.需要分析所使用的Image Effect 对整体 Fill Rate 的影响,如果实在影响很大,那就要禁用某些Image Effect。
二:GPU Memory Bandwidth
1.Texture Compression
参考官方链接:https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
2.Mipmap和 Mipmap Streaming
Mipmap可以提升GPU的渲染性能,不会让视觉效果打折,减少可能产生的图像缺失;
注意:如果资源在 Z 方向未发生变化,就没必要使用Mipmap。Mipmap会增加内存占用。
不使用的地方 例如:
UI贴图
天空盒
图标
Cookies
不适用的贴图类型:
Decal贴图
probe 贴图
Unity Terrain 系统中的贴图
如果是通过像Graphics.DrawMeshNow这样的API直接加载的贴图,需要使用Texture Streaming API 手动设置Mip level
三:Vertex Processing
1.尽量减少网格上的顶点数量(简化模型)
2.使用 Normal Map 表现模型细节
3.如果模型上没有使用Normal Map,可以在 Model Import Setting 界面禁用此模型的Vertex Tangents 选项。
4.使用 LOD
5.降低自定义Shader中 Vertex shader 的复杂度(Vertex shader 是 shader中告诉GPU如何画出每个顶点的代码块)
6.如果使用的是标准着色器,那么尽量使用简单的着色器,比如Mobile Shader。
主要介绍一下LOD:
什么是LOD(Level of Detail)
1.按照摄像机离开物体的距离显示不同精度的模型。摄像机离开物体越远,所用于显示的模型精度越差。
2.在建模软件中制作同一模型的不同精度的版本,按照以下命名规则来命名:
比如说模型名称为Dropship,在每个模型后面加上_LOD+数字,比如_LOD0或者_LOD00。_LOD0为精度最高的版本,精度越低,最后的数字越大。
3.从建模软件把这些模型一并导入Unity,Unity会使用LODGroup组件制作支持LOD的预制件Prefab。
记录下目前学到的GPU相关的性能优化,后续再补...