Unity 移动端静态资源优化技巧与经验分享

1. 音频

在这里插入图片描述

1.1 Force To Mono 将双通道的音频转换为单通道

  • 注意:如果此音频文件两声道波形不一样,这里混合就会出现错误的音频

1.2 LoadType 加载类型

  • Decompress On Load 推荐压缩后<200kb的音频文件
  • Streaming 推荐较大和背景音乐

1.3 Compression Format 压缩格式

  • Andriod 推荐 Vorbis
  • iOS 推荐 MP3 或者 Vorbis
  • 对于短小音效,可以使用ADPCM:压缩比小,但是解码速度快

1.4 Sample Rate Setting 采样频率

  • 可以选择Optimize Sample Rate 让Unity 针对平台优化采样率,一般移动平台28000的采样率即可

2. 模型

2.1 模型导出规范

  • 统一单位
    • 如scale 大小,模型坐标轴等
  • 导出的网格必须是多边形拓扑,不能是贝塞尔曲线、样条曲线、细分曲面等
    • Unity 不支持这些数据
  • 在导出之前确保所有Deformers都烘培到网格模型上
  • 不建议模型使用的纹理随模型导出
    • 影响Unity项目中资源规划
  • 如果需要导入Blend shape normals时,必须指定光滑组Smoothgroups
  • 建议导出时不携带如摄像机、灯光、材质等场景信息

2.2 原始模型影响性能点

  • 最小化面数,不需要微三角形面,三角面尽量分布均匀
  • 合理的拓扑结构与平滑组,尽可能是闭包
  • 尽量少的材质个数
  • 尽可能少的蒙皮网格·尽可能少的骨骼数量
  • FK与IK节点分离,导出时删除IK骨骼节点

2.3 导入设置

在这里插入图片描述

  • Import xxx
    • 没有特殊需求就不用开启
  • Mesh Compression
    • 只能降低在包体中的大小,内存中没有变化
    • 在一些不规范的模型下使用,可能产生错误
    • 闭包模型比开放式模型更不容易产生错误
  • Read/White
    • 开启后会在显存中多一份备份, 不动态修改情况,关闭已节约内存
    • Skinmess需要开启用于动画
  • Normals
    • 不需要法线时可以关闭
  • Generate Lightmap UVs
    • 不使用光照贴图时,保持关闭

2.4 Player 全局设置

在这里插入图片描述

  • Vertex Compression
    • 可对模型顶点中各种数据进行压缩
  • Optimize Mesh Data
    • 更具网格使用的材质删除不需要的数据

3 纹理

3.1纹理大小经验设置

  • 不同平台、不同硬件配置选择不同的纹理大小, Unity下可以采用bundle变体设置多套资源、通过Mipmap限制不同平台加载不同level层级的贴图。
  • 根据纹理用途的不同选择不同的纹理加载方式,如流式纹理加载Texture Streaming、稀疏纹理Sparse Texture、虚拟纹理VirtualTexture等方式。
  • 不能让美术人员通过增加纹理大小的方式增加细节,可以选择细节贴图DetailMap或增加高反差保留的方式。
  • 在不降低视觉效果的情况下尽量减小贴图大小,最好的方式是纹理映射的每一个纹素的天小正好符合屏幕上显示像素的天小,如果纹理小了会造成欠采样,纹理显示模糊,如果纹理大了会造成过采样,纹理显示噪点。这一点做到完美很难保障,可以充分利用SceneView- > DrawMode->Mipmap来查看在游戏摄像机视角下哪些纹理过采样,哪些纹理欠采样来调整纹理大小。
    Mipmaps 视角
    图中蓝色区域代表欠采样,红色区域代表超采样。

3.2 纹理压缩

  • 现阶段最好的压缩方式为ASTC。
  • 一般情况下ASTC6x6可以做得和ETC2几乎一样的效果,并且大小是ETC2的一半。
  • iPhone 在6以上支持ASTC
  • Android 需要OpenGL ES 3.1 或者 Vulkan
  • 现阶段不满足需求的老式安卓占比在<5%
  • 可通过以下函数检测是否支持ASTC:
    • SystemInfo.SupportsTextureFormat(TextureFormat format)

3.3 Mipmap

  • Mipmap纹理
    • 逐级减低分辨率来保存纹理副本。相当于生成了纹理LOD,渲染纹理时,将根据像素在屏幕中占据的纹理空间大小选择合适的Mipmap级别进行采样。
  • 优点:
    • GPU不需要在远距离上对对象进行全分辨率纹理采样,因此可以提高纹理采样性能。
    • 同时也解决了远距离下的过采样导致的噪点问题,提高的纹理渲染质主。
  • 缺点︰
    • 由于Mipmap纹理要生成低分辨率副本,会造成额外的内存开销。大约1/3。
      • 可以通过设置Streaming Mipmap来规定只加载某个级别下的mipmap

3.4 渐变图处理

在这里插入图片描述

  • 类似红框中,粒子效果的渐变图。可以使用动画曲线,或者1*X 单像素方向渐变图来替代

4 动画

4.1 骨骼导入设置

在这里插入图片描述

  • Skin Weights
    • 默认4根骨头,单对于一些不重要的动画对象可以减少到1根,节省计算量
  • Strip Bones
    • 建议开启,在导入时自动剔除没有蒙皮顶点的骨骼
  • Optimize Game Objects
    • 在Avatar和Animatior组件中删除导入游戏角色对象的变换层级结构,而使用Unity动画内部结构骨骼,消减骨骼transform带来的性能开销。
    • 可以提高动画角色性能,但有些情况下会造成角色动画错误,这个选项可以尝试开启但要看表现效果而定。注意如果你的角色是可以换装的,在导入时不要开启此选项,但在换装后在运行时代码中通过调用:AnimatorUtility.OptimizeTransformHierarchy接口可以达到此选项效果。

4.2 模型中动画导入设置

在这里插入图片描述

  • Resmple Curves
    • 将动画曲线重新采样为四元数数值,并为动画每帧生成一个新的四元数关键帧,应当导入动画文件包含欧拉曲线时才会显示此选项
  • Anim.Compression
    • off 不压缩,质量最高,内存消耗最犬
    • Keyframe Reduction 减少冗余关键帧,减少动画文件大小和内存大小。
    • 3 个Error 设置表示:在两个关键帧数据差异在0.5%以内时,合并两个关键帧,以减少关键帧数量。跟随Scale变化。
  • Keyframe Reduction and Compression
    • 减少关键帧的同时进行压缩,只影响文件大小,不影响内存。
  • Animation Custom Properties
    • 导入用户自定义属性,一般对应DCC工具中的extraUserProperties字段中定义的数据

4.3 动画曲线数据信息

在这里插入图片描述

  • Curves Pos:位置曲线
  • uaternion:四元数曲线
  • Resample Curves开启会有
  • Euler:欧拉曲线
  • Scale: 缩放曲线
  • Muscles:肌肉曲线,Humanoid类型下会有
  • Generic:一般属性动画曲线,如颜色,材质等
  • PPtr:精灵动画曲线,一般2D系统下会有
  • Curves Total:曲线总数
    • 数值越大性能越差
  • Constant:优化为常数的曲线
    • 上节Error数值越大,这个数值越大
    • 这个数值占比越大,代表性能优化越大
  • Dense:使用了密集数据(线性插值后的离散值)存储
  • Stream:使用了流式数据(插值的时间和切线数据)存储

4.4 动画文件导入设置优化后信息查看原则

  • —看效果差异(与原始制作动画差异是否明显)
  • 二看曲线数量(总曲线数量与各种曲线数显,常量曲线比重大更好)
  • 三看动画文件大小(动画文件在小几百k或更少合理,查过1M以上的动画文件考虑是否合理)

猜你喜欢

转载自blog.csdn.net/weixin_38027841/article/details/126800200