1️⃣ 贴图优化
1. Read/Write Enable
这个属性勾选后允许你在运行时读取和写入纹理数据,这对于需要实时生成内容或者需要动态修改纹理的场合非常有用但在大部分情况下这是不必要的。如果打开这个属性,会使运行时贴图大小翻倍,内存中会额外存储一份贴图数据。所以默认关闭这个属性,在需要的时候开启。
2. Mipmap
优点:会优化显存带宽,用来减少渲染,因为可以根据实际情况,会选择适合的贴图来渲染,距离摄像机越远,显示的贴图像素越低,反之,像素越高!
缺点:会占用内存,因为mipmap会根据摄像机远近不同而生成对应的贴图,所以必然占内存!
MipMap可以用于跑酷类游戏,当角色靠近时,贴图清晰显示,否则模糊显示。
如果我们使用的贴图不需要这样效果的话,就一定要把Generate Mip Maps选项和Read/Write Enabled选项取消勾选!因为Mipmap会十分占内存!
Mipmap会让你的包占更大的容量!
3. 贴图压缩
优点:可以加快加载速度,也可以减少内存的占用。
缺点:不同的压缩格式在不同的平台上可能会有兼容性问题,压缩可能导致丢失纹理细节。
[RGBA Compressed]
RGBA Compressed: 是一种通过压缩的方式来存储RGBA(红色、绿色、蓝色和透明度)的四个通道的图片格式。
优点:
体积小,节省空间:通过对RGBA通道进行压缩,相较于未压缩的RGBA格式,可以大大降低文件的体积,节省存储空间。
完整的色彩信息:由于RGBA Compressed同时包含了红色、绿色、蓝色和透明度四个通道,因此能够完整且详细地表现图像的色彩信息。
透明度通道:不仅可以存储RGB色彩信息,还可以存储透明度信息,在进行复杂的图像编辑和动画制作时非常有用。
缺点:
有损压缩:虽然RGBA Compressed可以有效地减少文件大小,但它是一种有损压缩,因此可能会在一定程度上降低图片的质量。
兼容性问题:尽管RGBA Compressed格式可以提供丰富的色彩和透明度信息,但并非所有的图像处理软件或设备都能完全支持此格式,可能存在兼容性问题。
处理速度:由于需要进行压缩和解压缩操作,所以在处理大量的或者高分辨率的图像时,可能会相较于其他未压缩的格式更为耗时。
[DXT]DXT:全称DirectX Texture Compression Format,是由Nvidia开发的一种在计算机图形绘制中常见的纹理压缩格式,常见于Windows平台的游戏中,包括DXT1,DXT3和DXT5。其中,DXT5是一种常见的压缩方式,它提供高达6:1的压缩比,但可能会牺牲一些图像详细度。在Unity中,DXT格式是默认的PC平台和游戏主机平台的纹理压缩格式。
优点:
空间效率:DXT格式是一种有损压缩格式,能够将原始数据的体积减小到1/8或者1/4,为图形绘制提供更大的空间。
显存效率:在运行时,DXT格式直接存储在GPU的显存中,提升了纹理读取的效率。
兼容性:DXT格式得到了广泛的硬件支持,无论是桌面、移动设备或者游戏主机,大部分的设备都能够直接处理DXT格式的纹理。
缺点:
图像质量:DXT格式是一种有损压缩格式,虽然能够显著减小数据体积,但是也会带来不可避免的图像质量损失。
色彩问题:DXT格式在处理高色彩深度的图像时,可能会出现色块或者色带问题。
压缩速度:相较于其他格式,DXT格式的压缩速度可能会稍慢一些。
[PVRTC]PVRTC: PowerVR Texture Compression(PVRTC)是专为PowerVR系列的图形处理器设计的,主要用在iOS设备上。PVRTC的压缩比很高,可以达到8:1或4:1,但这种压缩方式可能会牺牲一部分图像质量。
优点:
高压缩比:PVRTC提供了极高的压缩比,可以将图片体积减小到原来的1/2、1/4、1/8等,极大地节省了存储空间和带宽。
支持多通道:PVRTC支持RGBA四通道,因此能够展示丰富的颜色和透明效果。
实时解压:PVRTC可以在GPU侧实时解压,避免占用CPU资源,提高了性能。
缺点:
图像质量:由于其是一种有损压缩方式,可能会导致一些图像质量损失。
兼容性问题:PVRTC主要是为Imagination Technologies的PowerVR系列GPU设计的,对于非PowerVR GPU,可能会遇到兼容性问题。
需要专门的工具进行压缩:创建PVRTC纹理需要使用专门的PVRTexTool,可能对某些开发者来说不太方便。
压缩速度较慢:在某些情况下,PVRTC的压缩速度可能相比其他压缩格式较慢。
PVRTC格式通常在需要高效压缩和处理图像的移动设备上使用,但在使用时需要考虑到其可能的图像质量损失和兼容性问题。
[ETC]ETC: 全称Ericsson Texture Compression(ETC)是一种面向OpenGL ES和WebGL的纹理压缩格式,专为Android设备设计的一种压缩格式。ETC1只支持RGB压缩,不支持Alpha通道,而ETC2则提供了对Alpha通道的支持。
优点:
高压缩比:ETC能有效减少图像文件大小并维持相当高的图像质量,有利于在有限的内存空间和带宽下优化应用运行表现。
广泛兼容:ETC拥有较好的跨平台性,适用于各种类型的设备,被广大基于OpenGL ES和WebGL的应用所接受。
实时解压:ETC格式的纹理可以在GPU侧实时解压,避免占用CPU资源。
缺点:
只支持RGB信息:ETC的标准版本仅支持RGB颜色,ETC1不支持透明度,而且压缩后图像质量可能会下降。ETC2虽然支持透明度,但是不是所有Android设备都支持ETC2。
图像质量:与许多有损压缩算法一样,ETC压缩可能会牺牲一部分图像质量。
总的来说,ETC是为OpenGL ES和WebGL设计的优秀纹理压缩格式。它提供了一种平衡图像质量和存储需求的有效方式,适用于各种计算资源受限制的场景。
[ASTC]ASTC:全称 Adaptive Scalable Texture Compression(ASTC)是由ARM开发的一种高效的纹理压缩格式,是一种更加先进的压缩格式,支持各种纹理类型和细节级别。它在许多现代移动设备上都有支持。
优点:
高效压缩:ASTC提供了高度适应的压缩能力,能够非常有效地减小纹理所占用的存储空间和内存带宽。
灵活性:ASTC支持的纹理大小范围非常广,从4x4到12x12像素,甚至可以压缩3D纹理,提供了极大的灵活性。
高质量:ASTC提供了良好的图像质量,并支持包括RGBA在内的多种颜色格式和渐变效果。
硬件解压缩:ASTC格式的纹理可以在GPU侧进行解压,这有助于提高渲染性能并减低CPU的压力。
缺点:
容性问题:虽然ASTC正在成为新标准,但仍存在一些设备不支持ASTC格式的情况,开发者需要考虑向后兼容问题。
压缩速度:ASTC提供的块大小和压缩选项较多,这增加了压缩时间,压缩过程可能相对较长。
4. MaxSize
这个属性限制纹理尺寸,根据最终真机效果调整,当然越小越好。
2️⃣ UI优化
1. Canvas层级管理
- Canvas细分:基于UI元素的更新频率,将静态元素与动态元素分离至不同Canvas。静态元素共享一个Canvas,而具有相似更新周期的动态元素应置于规模较小的独立Canvas中,以提升渲染效率。
- Canvas属性统一:确保同一Canvas内的元素具备一致的Z值、材质和纹理属性。
- 动态元素管理:对于仅在特定条件下显示的UI元素,如战斗伤害指示器,在不活动时应设为禁用状态,以避免不必要的绘制调用(Draw Call)。
- Canvas禁用策略:在需要隐藏整个Canvas的场景中,禁用Canvas组件优于禁用GameObject,以减少Mesh重建的性能开销。
2. 输入处理优化
- GraphicRaycaster使用限制:仅在需要处理用户输入的Canvas上启用GraphicRaycaster组件,并通过将非输入响应元素移至独立Canvas以最小化相交检测范围。
- Raycast Target禁用 :对于无需响应用户输入的UI元素,如纯展示的文本和图像,应关闭其Raycast Target属性。
3. Layout性能优化
- 避免Layout Group:鉴于Layout Group的高更新成本,建议在静态UI设计中避免使用,或在动态UI中通过脚本在布局完成后立即禁用。
- Layout Group布局策略:在必须使用Layout Group时,应避免嵌套使用,以降低性能损耗。
4. 渲染优化
- 减少Overdraw:避免UI元素过度重叠,以减少Overdraw现象,考虑在运行时合并重叠元素以实现批处理渲染。
- 全屏UI性能调整:在全屏UI场景中,隐藏所有非必要渲染对象,并适当降低帧率以减少GPU负载。
- 打包图集:将多个小纹理合并到一个大的纹理图集(Atlas)中,减少纹理切换和内存占用。
- 图像资源优化:对图像资源进行压缩和格式优化,减少内存占用,加快加载速度。
- 材质合并:通过合并多个UI元素的材质,减少渲染过程中的Draw Call数量。