资源优化

  • 1. 音频
    • 1.1 音频导入设置
    • 1.2 加载音频设置
    • 1.3 压缩格式和质量
    • 1.4 音频性能增强
  • 2. 图片纹理
    • 2.1 纹理压缩格式
    • 2.2 纹理性能增强
      • 2.2.1 减小纹理文件大小
      • 2.2.2 谨慎使用Mip Map
      • 2.2.3 从外部管理分辨率的降低
      • 2.2.4 调整Anisotropic Filtering 级别 (抗锯齿)
      • 2.2.5 考虑使用图集
      • 2.2.6 调整非方形纹理的压缩率
      • 2.2.7 Sparse textures
      • 2.2.8 程序化材质
      • 2.2.9 Asynchronous texture uploading
  • 3. 网格和动画文件
    • 3.1 减少多边形数量
    • 3.2 调整网格压缩
    • 3.3 恰当的使用Read-Write Enable
    • 3.4 考虑烘培动画
    • 3.5 合并网格

本章主要讲以下几种资源的优化方案

  • 音频文件
  • 贴图文件
  • 网格和动画
  • AssetBundles 和 resources

1. 音频

1.1 音频导入设置

1.2 加载音频设置

  • Preload Audio

    • 决定是否在场景初始化的时候自动加载
  • Data Load In Background
    • 是否在加载时阻塞主线。(是同步加载还是异步加载)
    • 此情况下,如果没有使用AudioClip.LoadAudioData() 提前加载,可能导致播放延迟、不同步的情况。
  • Load Type
    • 决定加载什么样的数据进入内存,和一次拉取多少数据。
    • Decompress On Load:
      • 加载时解压并加入内存,牺牲加载时间,但是播放时工作量很小。
      • 这种模式,一般在场景加载时加载音频,避免运行时出现卡顿。
      • 适合大多数情况
    • Compressed In Memory
      • 加载时直接拷贝文件进内存,不解压。只有播放时才解压。
      • 节省加载时间和内存消耗,播放时CPU压力加大。
      • 最适合频繁使用的大型音频文件,或者内存出现瓶颈的情况。
    • Streaming
      • 运行时加载、解码、播放。
      • 内存占用最小,CPU消耗最大。
      • 适用于单一,不更换,持续性的播放,例如:背景音乐和环境音效。

1.3 压缩格式和质量

格式 无损 大小 质量 用途
PCM YES 极短的要求高清晰度的音效
ADPCM NO 非常小 大量混乱的短音效果可用,例如爆炸、冲击等
Cpmpressed NO 小/普通 平台差异 CPU 消耗高于前两种,大多数情况都可以用,可以自定义质量

1.4 音频性能增强

  • 最小化活动音源数量

    • 使用音频池方式管理最大同时播放的音频数量
  • 为3D声音启用强制为单声道
    • 立体声音文件上启用Force to Mono,可降低50%空间。
  • 重新采样到低频
    • 需要测试效果,再可以容忍的音质下选择低频采样
  • 通过混音器应用过滤效果以减少重复
    • 将多个音频进行混音后,使用过滤器(FilterEffect)播放,这样节省磁盘空间。
    • 但是每个过滤器都会消耗一定的CPU和内存,大量使用会有性能上严重后果。
    • 最好的办法是利用Unity的音频混音器实用程序,生成通用的过滤效果模板,以最小化内存开销。官方教程:https://learn.unity.com/tutorial/audio-mixing#
  • 考虑用于背景音乐的音频模块(audio module)文件
    • Unity支持的扩展名有:.it, .s3m, .xm, and .mod. 无损且内存占用小

2. 图片纹理

2.1 纹理压缩格式

  • 一般按平台和需求使用合理的压缩格式,这里给出一位朋友的具体压缩试验和策略推荐(安卓和iOS)http://www.u3d8.com/?p=2490
  • 根据2021年国内的调查数据,不支持ASTC格式只有2%的机器了。所以完全可以考虑移动平台双端使用ASTC格式。数据来源:知乎

2.2 纹理性能增强

2.2.1 减小纹理文件大小

比如手机分辨率是1080P,那么少用2048*2048的贴图。

2.2.2 谨慎使用Mip Map

  • 注意 Generate Mip Maps选项是默认开启的,开启后打入包的纹理会比原本的大33%。
  • 在纹理离摄像机镜头距离基本固定的情况下,尽量关闭Mip Maps

2.2.3 从外部管理分辨率的降低

  • Unity允许直接使用.PSD 和 .TIFF 文件。使用这些文件时Unity会自动生成引擎可使用的图片文件并压缩。这确实方便了美术人员,因为只维护一个副本就行了。
  • 但是Unity毕竟不是专业图形软件,在生成过程中,有可能产生失真

2.2.4 调整Anisotropic Filtering 级别 (抗锯齿)

  • 这个消耗蛮大,谨慎使用

2.2.5 考虑使用图集

  • 使用图集可以有效降低2D和UI产生的Draw Call,同时也可以用在一些动态合批的对象上。
  • 骨骼动画(SkinnedMeshRenderer)的多个角色的纹理合在一个图集中是不能降低DrawCall的。
  • 如果在Draw Call不是性能瓶颈的情况下,使用图集会增加磁盘和内存占用,反而对性能不友好。

2.2.6 调整非方形纹理的压缩率

  • 尽量使用 正方形、2的n次幂 分辨率的纹理图片
  • 这样的格式对GPU友好,采样效率高。

2.2.7 Sparse textures

  • Unity提供处理超大图片的一种方式。将超大图片进行分割再加载,只有摄像机看到的部分贴图进入内存。
  • 这个移动端基本不使用,有兴趣的同学可以自行研究。

2.2.8 程序化材质

  • 也称Substances
  • 在初始化期间,通过自定义数学公式混合小型高质量纹理样本。以额外内存和CPU的代价,生成纹理。从而大量的减少纹理带来的磁盘占用。
  • 想优化移动端包体大小者可考虑使用。
  • 官方插件下载和文档

2.2.9 Asynchronous texture uploading

  • 这个功能Unity默认开启
  • 可以让纹理数据异步上传到RAM中,节省主线程中的CPU大量时间
  • 但是如果纹理开启了Read/Write Enable后,此功能无效,改为同步上传
  • Resources.Load() 和 LoadImage(byte[]) 加载纹理,无法使用此功能

3. 网格和动画文件

3.1 减少多边形数量

3.2 调整网格压缩

  • 网格的4种压缩格式 Off, Low, Medium, High. 直接影响网格数据的精度(顶点位置、法线、颜色等)
  • Player/Other Setting 中的两个导入设置:
    • Vertex Compression: 可以选择想优化的数据类型,但是这是个全局设置,并不好用。
    • Optimize Mesh Data: 把模型使用的材质球所不需要的数据在Unity构建时忽略掉。(如果材质球运行中更换了,可能出现不期望的情况)
    • 开启这两个属性可以减少磁盘占用,但是会有额外的解压数据时间。

3.3 恰当的使用Read-Write Enable

  • 开启时,内存消耗会增加,因为Unity会保存原始副本在内存中,关闭则不会。
  • 如果网格经常在运行时以不同比例出现(非等比缩放)时,开启是明智的。因为关闭后,每次都要重新加载网格进入内存,然后复制副本,再丢弃原始网格数据。

3.4 考虑烘培动画

  • 简单、顶点数少的蒙皮动画可以烘培后再使用。一般是动画软件执行烘培过程。
  • 这样可以节省空间和CPU

3.5 合并网格

  • 一些碎物体,又没有相对移动的。可以合并了再使用,已减少draw call 和顶点数。
  • Asset Store中又不少此类插件

Unity 游戏性能优化(4)资源优化相关推荐

  1. 游戏开发-unity 游戏性能优化

    1.基础 渲染分析: FPS:(Frames Per Second):一秒内渲染多少帧. 手机端30帧就行,太高会耗电. 1.摄像机深度 摄像机的默认深度是-1, 深度越高,越晚绘制,所以深度低的就被 ...

  2. Unity常用模块设计 : Unity游戏排行榜的制作与优化

    游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点: 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交 ...

  3. Unity游戏排行榜的制作与优化

    前言 游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点: 对啦!这里有个游戏开发交流小组 里面聚集了一帮热爱学习 ...

  4. 【游戏优化】AOI算法、Unity游戏优化(一)

    Unity游戏优化.内存优化.资源优化.AOI算法.安全 AOI概念和设计 地图广播(地图消息同步) AOI解决的问题 AOI的设计 场景分析与方案设计(一) 改善方案 场景分析与方案设计(二) 场景 ...

  5. Android App优化:内存优化、电量优化、网络优化等 (2)

    -- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等.   Android后期发展的五大趋势:一.性能优化:二.高级UI ...

  6. 【Unity性能优化】静态资源优化——Audio优化

    文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...

  7. Unity 性能优化:资源篇

    Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...

  8. Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

  9. Unity移动端游戏性能优化简谱之 常见游戏内存控制

    <Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...

最新文章

  1. 解决Java Web项目无法读取配置文件问题
  2. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
  3. 怎么给web 服务器 传文件,web文件传到服务器
  4. 找到的比较好的工作面试题笔试题
  5. c语言模板程序,模板模式 (C语言实现)
  6. 高级特性(6)- 高级Swing
  7. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)
  8. activiti 工作流_JAVA-工作流引擎-activiti-Tasks介绍
  9. 软件测试英语笔试,软件测试英文面试笔试题
  10. 阿里编码规约扫描eclipse插件安装使用
  11. sourceinsight4.0安装破解( 内含sublime text配色方案)
  12. Objective-C 和 Core Foundation 对象相互转换的内存管理总结
  13. 管理感悟:工作计划要分阶段
  14. python心脏线绘制代码_JavaScript图形实例:曲线方程
  15. 【python】报错:OSError: [Errno 30] Read-only file system
  16. mysql远程3306不通_mysql服务器3306端口不能远程连接的解决
  17. win10设置护眼颜色(豆沙绿)
  18. Spring Catching 实战
  19. php微信短网址生成,如何把微信文章网址长连接(长网址)转换为短连接(短网址)...
  20. gcc编译工具常用命令以及汇编语言

热门文章

  1. 《推荐系统实践》读书笔记-1.什么是推荐系统
  2. git-bash.exe和git-cmd.exe运行Git的区别
  3. 遗传-粒子群算法遗传-禁忌搜索算法求解TSP问题
  4. Carbon中文使用手册
  5. 做业务员有什么好处?
  6. go-swagger简单使用
  7. 一个mysql安装问题的解决
  8. 一种自适应的红色章印去除算法
  9. 转行软件测试,简简单单3个月出来就是高薪工作,靠谱吗?我的第一桶金...
  10. 利用HGT聚类单细胞多组学数据并推理生物网络