unity性能优化初级入门篇

Draw Call
  • Draw call 主要影响的是cpu的性能,因为每发送一次Draw call 命令,cpu就要腾出性能来做准备工作
  • 如果Draw call 过多,会极大的影响的性能
Statistics面板
  • FPS是帧率 (后面是每一帧的渲染时间)
  • Batches 批处理次数【将几个DrawCall合并在一起进行绘制,unity内置的一种优化方法】
  • Verts 顶点数【摄像机视野内的顶点数,天空盒本身也包括一部分】
  • Tris 三角面片数
  • Screen 当前屏幕的分辨率,23.7M表示当前使用的内存
  • https://blog.csdn.net/wdmzjzlym/article/details/51335915
资源优化标准
  • 在移动端的动态模型的面片数<3000,骨骼数<50,材质数<3。
  • 相应的还有静态模型的标准顶点数<500
  • Audio
  • 对于长时间的背景音乐,使用MP3压缩格式。减少压缩包大小
  • 对于短时间的音乐,使用非压缩格式wav.因为要频繁的进行播放,来回的进行解压会很耗性能
    • Decompress On Load
      在硬盘上压缩这个文件,并在第一次加载到内存的时候解压它,这是加载声音文件的默认选项,大多数情况下我们应该使用这个选择 。
    • Compressed In Memory
      保持声音在内存中是压缩的并在播放时解压缩。这有更多的CPU开销(尤其是OGG / Vorbis格式的压缩文件),但可以提高加载速度并减少内存消 耗,因此这个选项适用于大文件。 在性能窗口可以看"DSP CPU"。
    • Streaming 选项
      直接从磁盘流音频数据。这只使用了原始声音占内存大小的很小一部分。 该方法使用最少的内存和最多的CPU,它有个很明显的缺点就是不能被引用超过一次。试着让 Audio Clip产生多个副本的时候会每个都产生数据缓冲区,如果非要这么做会产生大量的内存和cpu消耗。因此这个选择最好是给单实例的Audio Clip,如背景和环境音效。对于手游而言不要优先考虑使用这种方式。
    • https://blog.csdn.net/u012565990/article/details/51794486
  • Shader要减少复杂的数学运算
  • Texture长度要小于1024
  • 减少Discard操作
其他
  • 资源冗余
    • 在build的时候,如果是场景引用的文件,会自动进行打包,但是Resource里面文件,无论是否被引用,都会被打包
    • 不同目录下的相同资源文件如果都被引用,那么都会被打包
  • 贴图优化
    • 将贴图合并
  • 模型优化
    • 减少面片数与顶点数即可
  • 资源监测与分析,我们可以在开始项目时就对资源进行严格的把控。也可以在打包后,利用第三方分析工具对AssetBundle进行分析,或者对游戏分析
  • https://www.uwa4d.com
渲染优化的几种手段
  • Lod层级细节,需要美工配合,针对同一模型做出三种不同精度的模型
  • 然后挂载lodgroup组件,将三个模型分别挂在100%,30%,10%,就会在摄像机在不同距离的时候自动调用不同的模型显示以达到减少三角顶点数与面片数
  • 遮挡剔除 将所有需要遮挡剔除的物体设置为Occludee static 与Occluder static 遮挡物与被遮挡物静态物体
  • 然后在windows——Rendering——Occlusion Culling 选择开始烘焙
  • 被遮挡物挡住的被遮挡物不会进行渲染,通过这种手段来降低渲染的面片数与顶点数
  • 光照贴图 光照渲染进行动态计算的话会很耗费·性能,将物体勾选为LightMap Static 然后将灯光的Mode作为Baked,在Windows——Rendering——light setting ——点击generate light,就可以生成对应的贴图
  • 合并Mesh
  • 可以在3维建模软件里面进行合并,也可以在unity里面进行合并如果原来有一千个物体,那么渲染的时候CPU就要准备1000次,但是我们将这一千个物体合并成一个模型,那么CPU只需要准备一次就可以,对于GPU而言,工作量是相同的,但是更加节约CPU的·性能【同样也要合并材质】
void Start () {
        MeshCombine();
	}
	
    void MeshCombine()
    {
        MeshFilter[] filters = GetComponentsInChildren<MeshFilter>();

        CombineInstance[] combiners = new CombineInstance[filters.Length];

        for(int i = 0; i < filters.Length; i++)
        {
            combiners[i].mesh = filters[i].sharedMesh;
            combiners[i].transform = filters[i].transform.localToWorldMatrix;
        }

        Mesh finalMesh = new Mesh();
        finalMesh.CombineMeshes(combiners);

        GetComponent<MeshFilter>().sharedMesh = finalMesh;
    }
  • 编译性能优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值