• Unity-性能优化


    1. 性能分析器
    1. 在窗口->分析->分析器中打开性能分析器
    2. DrawCall:位于渲染模块中,表示图像渲染次数
    3. Vertices:位于渲染模块中,表示三角形顶点数
    1. 批处理(Batches)
    1. 解释:GPU用于绘制图形渲染,CPU发送消息队列给GPU,GPU从队列中依次渲染图像。渲染的过程很快但取出解析,以及CPU准备,发送消息的过程较慢,因此合并处理再发送可优化性能,即批处理。
    2. 准备工作:将 项目设置->Player->动态批处理 进行勾选,启用动态批处理,这样采用同样材质,( 小于900顶点的对象 | 静态对象)会被同时绘制。

    这里用20个立方体进行测试:
    启用时:(Batches)DrawCalls 为 7
    在这里插入图片描述
    禁用时:(Batches)DrawCalls 为 83
    在这里插入图片描述

    2. 资源优化标准

    在这里插入图片描述
    在这里插入图片描述

    3. 资源加载类型
    1. Decompress On Load(加载时解压缩)
      在硬盘上压缩这个文件,并在第一次加载到内存的时候解压它,这是加载声音文件的默认选项,大多数情况下我们应该使用这个选择 ,适用于小文件。
    2. Compressed In Memory(压缩内存)
      保持声音在内存中是压缩的并在播放时解压缩。这有更多的CPU开销(尤其是OGG / Vorbis格式的压缩文件),但可以提高加载速度并减少内存消 耗,因此这个选项适用于大文件。
    3. Streaming(流式处理)
      直接从磁盘流音频数据。这只使用了原始声音占内存大小的很小一部分。
      该方法使用最少的内存和最多的CPU,它有个很明显的缺点就是不能被引用超过一次。试着让
      Audio Clip产生多个副本的时候会每个都产生数据缓冲区,如果非要这么做会产生大量的内存和CPU消耗。因此这个选择最好是给单实例的Audio Clip,如背景和环境音效。对于手游而言不要优先考虑使用这种方式。
    4. 层级细节LOD技术
    1. 该技术实现了根据对象距离摄像机的距离,使用合适的渲染数据(来对对象进行渲染。当距离摄像机特别近时展现更多的细节,比如布料纹理,花纹。当距离摄像机特别远时,,这些渲染就没有效果了。
    2. 若想使用该功能,为组件添加 LOD Group 组件
    3. 可在LOD选择条,选择LOD Levels,进行编辑(增删改),以及查看效果。
      在这里插入图片描述
    4. 将对应纹理组件拖拽到渲染器中,即可实现该渲染模式。
    5. LOD 偏离 使得不同质量级别下,执行LOD逻辑的距离比不同。该数值越大,执行LOD逻辑(切换到较低分辨率纹理)的距离越大。
      在Editor>ProjectSettings>Quality>Other>LOD Bias(LOD 偏离)进行设置。
    5. 质量设置
    1. 通过内置的 Quality 配置画面质量等级,并在游戏内通过程序动态切换画面质量,实现画面质量切换功能。
    2. QualitySettings 类静态函数(level 从上到下 0 - 5)
    静态函数描述
    DecreaseLevel降低当前的品质级别。
    GetQualityLevel返回当前的图形品质级别。
    IncreaseLevel提高当前的品质级别。
    SetQualityLevel设置新的图形品质级别。
    6. 视锥体剔除Frustum Culling 和遮挡剔除 Occlusion Culling
    1. 视椎体剔除
      Unity 在渲染时不会显示完全位于视锥体之外的游戏对象,这就是视椎体剔除。默认情况下,摄像机执行视锥体剔除。
    2. 遮挡剔除
      视锥体剔除不会检查视锥体内被挡住的游戏对象,所以Unity还是会渲染这些不可见的游戏对象。这时就会用到遮挡剔除,让视锥体内不可见的游戏对象不执行渲染。
      遮挡剔除配置方法
      • 打开 window -->Rendering(渲染) -->Occlusion Culling(遮挡剔除)

      • 创建一个Occasion Area,设置Area范围 ,即相机可移动或者可以剔除的范围。 在这里插入图片描述

      • 设置需要剔除的物体的Static,勾选Occluder Static 和 Occludee Static

      • 点击Bake 烘焙。

      • 为对应相机勾选遮挡剔除。
        在这里插入图片描述

      • 可视化中点击摄像机查看效果。
        采用前:
        在这里插入图片描述
        采用后:
        在这里插入图片描述

    7. Mesh合并

    合并当前对象及所有子对象的蒙皮网络进行合并

     // 获得所有子对象的蒙皮网格
    MeshFilter[] filters = GetComponentsInChildren<MeshFilter>();
    // 用于描述要使用Mesh的网格的结构。
    CombineInstance[] combines = new CombineInstance[filters.Length];
    for (int i = 0; i < filters.Length; i++)
    {
        // 新创建一个蒙皮网格
        //combines[i].mesh = filters[i].mesh;
        // 仅仅给予引用
        combines[i].mesh = filters[i].sharedMesh;
        // 位置信息
        combines[i].transform = filters[i].transform.localToWorldMatrix;
    }
    // 创建新的蒙皮网格
    Mesh finalMesh = new Mesh();
    // 将多个网格合并到此网格中。
    finalMesh.CombineMeshes(combines);
    // 赋予给该网格过滤器
    GetComponent<MeshFilter>().sharedMesh = finalMesh;
    

    保存到本地

    string path = "Assets/Resources/data.mesh";
    
    Mesh meshToSave = finalMesh;
    // 优化网格数据以提高性能
    MeshUtility.Optimize(meshToSave);
    
    AssetDatabase.CreateAsset(meshToSave, path);
    AssetDatabase.SaveAssets();
    
  • 相关阅读:
    [翻译] FXGL Assets/资源
    树莓派4B安装ffmpeg
    npm run dev后浏览器没有出现页面
    算法练习第六十四天
    20--Django-项目实战-博客开发之终章-文章评论、添加文章功能实现
    新华三路由器+华为交换机,实现华为交换机指定端口访问外网
    【数据结构】——排序
    脱壳工具:反射大师的使用详解
    Shell sed编辑器
    十几年稳坐“大哥”位,搞Java的程序员就是这么“牛x”!
  • 原文地址:https://blog.csdn.net/qq_50682713/article/details/125356326