zoukankan      html  css  js  c++  java
  • Unity3D性能优化

    一、美术资源优化
     
    1.动态物体,角色、怪物、NPC
    (1)控制面的数量,300-2000个
    (2)控制Skinner Mesh Renderer的数量,1个
    (3)控制材质数量,1-3个
    (4)控制骨骼的数量,小于30个
    2.静态物体
    (1)控制网格顶点数,少于500个
    (2)标记为static,静态批处理
    (3)移除不需要的组件
    3.自带地形
    (1)控制地形的分辨率,高度图尺寸小于257
    (2)地形纹理中尽量使用少的混合纹理数,不要超过4个
    4.纹理
    (1)格式,采用压缩格式
    (2)尺寸,长宽小于1024
    (3)建议使用MipMap,有可能增加程序大小,但会提高渲染效率
    5.音频
    (1)长音乐(背景音乐),使用ogg或mp3格式
    (2)短音乐,使用wav或aif格式的未压缩格式
     
    二、引擎优化(设置)
     
    1.光源
    (1)控制光源的数量,数量越多,drawcall越多
    (2)控制Important光源的数量(实时作用于动态物体),1个或0个
    (3)Pixel Light Couht(动态物体上作用的光源数量,不包含mportant光源),1-2个
    2.相机
        裁剪平面,根据不同场景进行不同的修改
    3.粒子
    (1)屏幕上的粒子总数,建议小于200个
    (2)每个粒子发射器发射的粒子总数,建议小于50个
    (3)粒子的大小,粒子的size应尽可能的小
    (4)对于非常小的粒子,在粒子的纹理中可以去除Alpha通道
    4.物理引擎
    (1)尽量使用Sphere Collider/Box Collider,避免使用Mesh Collider
    5.渲染
    (1)避免使用Alpha Test和Alpha Blend,Alpha Test的性价比较低,可能的话使用Alpha Blend代替Alpha Test
    (2)将使用的Alpha Test和Alpha Blend的像素数降至最低,尽量不要超过两个两个屏幕的像素数
     
    三、DrawCall
     
    1.Static Batching
    原理:<1>静态VertexBuffer + 动态IndexBuffer
               <2>将同种材质的物体合并在一个大的VertexBuffer中
               <3>在运行时,通过视锥裁剪来动态的改变IndexBuffer
    注意:使用static batching后会额外增加内存开销来存储Batch后的数据
     
    2.Dynamic Batching,对于相同材质的动态物体,Unity会自动对其进行batching
    原理:<1>动态VertexBuffer + 动态IndexBuffer
     
    注意:<1>目前之支持小于900顶点的网格物体
          <2>如果shader中使用了Position/Normal/UV三种属性,只能Batching 300顶点以下数的物体;如果使用Position/Normal/UV/UV1/Tangent等属性,则只能Batching 180顶点以下的物体
          <3>缩放物体无法与非缩放物体进行Batching
     
    四、纹理合并
     
    五、遮挡剔除,Occlusion Culling
     
    六、代码.
    if(Time.frameCount % 6 == 0){ }
    (2)减少使用临时变量,尤其是在Update方法中
    (3)定期垃圾回收
    (3)优化数学运算:<1>减少使用float,使用int
                       <2>减少使用复杂的数学函数,比如sin/cos等函数
                       <3>改除法为乘法
     
  • 相关阅读:
    C++如何对接sqlitepp
    c++11中的condition_variable和之前的pthread_cond_timedwait的不同之处
    浏览器设置代理模式后的报文是怎么样的?
    C++11中令人吐血的"移动语义"和"新的右值引用"
    MYSQL的事务及锁操作
    Microsoft Word —— 使用宏脚本将所有表格添加边框
    Navicat——如何导出数据字典
    Redis——配置详解
    keepalived——tengine集群主备均有VIP
    Docker——如何修改运行中容器的映射端口
  • 原文地址:https://www.cnblogs.com/fuyunzzy/p/5300272.html
Copyright © 2011-2022 走看看