Unity 游戏性能优化(4)资源优化
资源优化
- 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)资源优化相关推荐
- 游戏开发-unity 游戏性能优化
1.基础 渲染分析: FPS:(Frames Per Second):一秒内渲染多少帧. 手机端30帧就行,太高会耗电. 1.摄像机深度 摄像机的默认深度是-1, 深度越高,越晚绘制,所以深度低的就被 ...
- Unity常用模块设计 : Unity游戏排行榜的制作与优化
游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点: 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交 ...
- Unity游戏排行榜的制作与优化
前言 游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点: 对啦!这里有个游戏开发交流小组 里面聚集了一帮热爱学习 ...
- 【游戏优化】AOI算法、Unity游戏优化(一)
Unity游戏优化.内存优化.资源优化.AOI算法.安全 AOI概念和设计 地图广播(地图消息同步) AOI解决的问题 AOI的设计 场景分析与方案设计(一) 改善方案 场景分析与方案设计(二) 场景 ...
- Android App优化:内存优化、电量优化、网络优化等 (2)
-- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等. Android后期发展的五大趋势:一.性能优化:二.高级UI ...
- 【Unity性能优化】静态资源优化——Audio优化
文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...
- Unity 性能优化:资源篇
Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...
- Unity移动端游戏性能优化简谱之 以引擎模块为划分的CPU耗时调优
<Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...
- Unity移动端游戏性能优化简谱之 常见游戏内存控制
<Unity移动端游戏性能优化简谱>从Unity移动端游戏优化的一些基础讨论出发,例举和分析了近几年基于Unity开发的移动端游戏项目中最为常见的部分性能问题,并展示了如何使用UWA的性能 ...
最新文章
- 解决Java Web项目无法读取配置文件问题
- DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
- 怎么给web 服务器 传文件,web文件传到服务器
- 找到的比较好的工作面试题笔试题
- c语言模板程序,模板模式 (C语言实现)
- 高级特性(6)- 高级Swing
- LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)
- activiti 工作流_JAVA-工作流引擎-activiti-Tasks介绍
- 软件测试英语笔试,软件测试英文面试笔试题
- 阿里编码规约扫描eclipse插件安装使用
- sourceinsight4.0安装破解( 内含sublime text配色方案)
- Objective-C 和 Core Foundation 对象相互转换的内存管理总结
- 管理感悟:工作计划要分阶段
- python心脏线绘制代码_JavaScript图形实例:曲线方程
- 【python】报错:OSError: [Errno 30] Read-only file system
- mysql远程3306不通_mysql服务器3306端口不能远程连接的解决
- win10设置护眼颜色(豆沙绿)
- Spring Catching 实战
- php微信短网址生成,如何把微信文章网址长连接(长网址)转换为短连接(短网址)...
- gcc编译工具常用命令以及汇编语言