Laya资源优化(图片、Josn、3D模型文件)
一、图片占用内存计算:
在webGL
模式下:图片高度 * 图片宽度 * 一个像素占用的字节数(width * height * 4 byte,如:800 * 600的图片占用内存1.83M = 1875KB = 1920000B = 600 * 800 * 4 byte)。
二、纹理压缩(2D、3D)
效果:降低显存约75%,减少图片解码卡顿现象。
1、在游戏中,不使用纹理压缩时,为了节省显存的占用。通常的做法是:
将原图按低分辨率的机型进行设计,然后在游戏中拉伸适配高分辨率的机型。这样就会导致游戏的马赛克现象(很多小游戏在安卓的某些高清分辨机型上出现这种问题,一定是该问题导致的)。
2、在游戏中,使用纹理压缩时:
使用纹理压缩的模式即使按高分辨率进行设计也是占用较小的显存,所以在同等显存占用情况下,在高分辨率的机型上,2D图片压缩效果会比拉伸效果更好。
3D贴图在压缩后效果更好,压缩对于原因的损失在视觉效果上几乎忽略不计。
PS:
①、3D使用纹理压缩后,视觉上基本看不出来,所以推荐使用。
②、但在2D使用纹理压缩要慎重,静态图片(如:UI)尽量不要使用纹理压缩功能,动态图片(2D角色动画等)则不会太明显没有高清画质表现需求的可以使用。
游戏中常见的图片文件格式通常是png
和jpg
等,这些图片需要先经过CPU解码,然后传送到GPU进行使用。而纹理压缩后的格式,是无需解码即可直接被GPU读取并显示的格式,所以,一方面是节省大量的显存,另一方面也可以减少图片解码带来的CPU压力。
Ps:
①、纹理压缩因为要依托于显卡的硬件加速,所以只能是webGL
模式下可用。
②、不同平台(操作系统)也有所不同。例如:Android
平台是ktx
格式,在ios
平台是pvr
格式。
由于不同平台的格式不同,所以跨平台的游戏,使用纹理压缩在降低显存的同时,代价是增加了文件的大小,所以最终是要依据项目的情况来找到一个平衡点。
三、3D模型文件压缩
效果:降低模式文件尺寸约60%。
3D游戏中模型是游戏资源体积的重要组成部分,所以减少模型文件的大小,可以缩短游戏的加载时长,加快玩家进入游戏的速度。在当前网速环境下,减少游戏体积还是比较重要的增值功能。
四、3D动画文件压缩
效果:降低3D动画文件尺寸约40%。
3D动画文件压缩与模型压缩一样,作用是减少文件下载的大小,用于加快玩家进入游戏的速度。
五、文件合并(json与二进制)
效果:可合并json类型
的文本文件,大幅减少文件下载交互数量,提升游戏加载效率。
当游戏的小文件比较多时,会大量增加http
请求,使得加载变量,而合并文件功能可以将json类型
的文件进行合并,这将减少文件的http
请求数,从而提高加载效率。当然,如果盲目合并,也会在打包后增加文件的一次性下载时长。所以,开发者要依据项目的实际情况来使用,尤其是在小文件多的时候再用。