Skip to content

Latest commit

 

History

History
89 lines (75 loc) · 4.87 KB

包体优化.md

File metadata and controls

89 lines (75 loc) · 4.87 KB

优化设置:

3d模型导入设置: https://docs.unity3d.com/Manual/FBXImporter-Model.html Model Tag:

  • Mesh Compression,
  • Read/Write Enabled, 不需要读取网格数据时关闭可以节省内存。但是当模型与网格碰撞粒子系统关联时,必须要打开。
  • Optimize Mesh, Unity重新排序顶点和索引以获得更好的GPU性能。
  • Keep Quads, 阻止unity将四边形网格拆分成三角形。使用曲面细分着色器是必定开启。
  • Index Format, 定义mesh索引缓冲区的大小,一般选16位。
  • Weld Vertices, 将相同位置的定点合并,默认开启。
  • Normals, 如果网格既不用法线贴图也不受实时光影响就关闭它。
    以上这些设置可以用来减少资源占用,节省内存。

Animation Tag:

  • Anim. Compression 动画有两种压缩形式
    • keyframe压缩 导入时减少冗余关键帧。 如果选中,则显示三种属性的“Animation Compression Errors”选项,调节选项会影响表现效果,牺牲效果换取压缩。 这会影响文件大小(运行时内存)以及如何计算曲线。值越大跳隔的帧数越多
    • Optimal 让Unity决定如何通过关键帧缩减或使用密集格式进行压缩。 仅适用于Generic和Humanoid动画类型。

图片优化:

  • 不需要A通道的就关闭,对应的压缩格式选择RGB
  • Max Size在不明显影响视觉效果的前提下越小越好
  • mipMap不用就取消勾选
  • 关闭不需要的Read/Write Enable
  • 内存压缩格式安卓首选ETC , IOS首选PVRT
  • 动态加载 JPG/PNG是不会压缩的
  • resize algorithm: Mitchell(默认)、Bilinear(更精细些,保留一些噪点和细节)
  • Crunched压缩: 2017.3后新加的压缩方式。提供更快的解压速度,减小文件尺寸,提供更快的分发纹理速度。但是在编辑器中给予压缩的时间较长。 可参看:unity中压缩格式对比 crunch压缩
  • 图集 -- 大图不应该进入图集 -- 透明区域太大的图不应该进入图集 -- 分类别生成图集,一套的最好放在一起

特效优化:

  • 尽量合并材质
  • 删除重复材质

音效优化: 加载类型

  • 加载时解压 : 对较小音效使用,可以减少动态加载时解压的性能开销
  • 内存中压缩 : 对稍大音效使用,对于ogg,vobis压缩格式有少许性能开销。
  • 流式加载 : 动态解码音效,以最少内存缓冲从磁盘读取并在运行中解压。但是无音频数据也会占据200k内存。 压缩类型
  • PCM : 适用于小文件,质量较高,占内存较大。
  • ADPCM : 适用于包含噪音且大量播放的文件。
  • vorbis/mp3 : 与PCM相反。 适合中等长度文件。
  • HEVAG : 用于PS上,与ADPCM差不多,不多说。

采样设置

  • 如果对于音频有优化需求,可以勾选Optimize Sample Rate 。Unity自动优化采样率。

关注点:

GPU

  • GPU性能受限于填充率(屏幕像素、着色器复杂度、overdraw乘积)、像素、几何复杂度(顶点数)。
  • 尽量共用材质
  • 使用图集
  • 如果使用了图集或者共享材质就使用Renderer.sharedMaterial接口付材质而不是 Renderer.material(注意不要修改前者返回的材质)。
  • 前向渲染的像素灯光很昂贵:尽量使用光照贴图,在质量设置中调整像素光数量以达到节约的目的。基本上只有前向光会使用逐像素光。其他基本使用逐顶点的。当然还是要基于游戏需求。(渲染管线相关)
  • 尽可能减小透明的屏幕覆盖率。
  • 减少不必要的通道
  • 渲染顺序尤为重要
  • 后处理开销很大,如果在手机上使用要谨慎

Shader -- 如果游戏在降低分辨率的情况下运行的更加流畅,那么你的游戏受限于填充率。此时尽量降低shader的复杂度

  • 非必要时避免使用alpha测试,用alpha混合替代
  • 使用简单,优化过的shader代码(例如Unity的“Mobile”相关代码)
  • 避免昂贵的数学运算(pow/exp/log/cos/sin/tan/...)可以考虑使用与计算的纹理来替代
  • 选用适合的精度:float,half,fixed(但是注意精度间转换会有开销)

CPU

  • 批处理会影响剔除效率以及光照覆盖
  • 查找,Getter性质的接口比较慢
  • 将不移动的物体设置为静态让unity内部自行静态批处理
  • 尽量做遮挡剔除

物理 -- 物理对CPU的压力比较大。

  • 可以根据你游戏的节奏调整timestap , 值越低物理刷新间隔越快。
  • 不要滥用碰撞盒,使用想想是否有更好的方法
  • 不要尝试移动静态碰撞盒(例如一个没有刚体的碰撞盒),因为这会导致大量的性能消耗,在Profile中可以找到它(“Static Collider.Move”,具体在Physics.Simulation下),如果有必要的话加个刚体,并且勾选IsKinematic。