显存优化:纹理压缩功能介绍与使用说明

本文详细介绍了纹理压缩的原理和在游戏开发中的应用,特别是针对LayaAir引擎的使用注意点,包括源图规范、LayaAirIDE与Unity插件的差异,以及优化效果和使用示例。强调了纹理压缩在减少性能压力和显存占用方面的优势,并提供了优化效果的实例分析。
摘要由CSDN通过智能技术生成

由于近期在开发者群里发现一些开发者对纹理压缩不太理解,遇到一些使用上的问题,所以本次文章中对纹理压缩进行详细的说明和使用上的介绍,希望能对有需求的开发者带来帮助。

本篇文章已经先更新到官网的文档中,也欢迎大家保持对官网文档的关注

一、初识纹理压缩

纹理是指物体表面的纹路样式和细腻程度等外观效果。在计算机图形学中,常用于描述三维模型表面图案的二维图形。

我们日常见到和使用的图片格式,主要为PNG和JPG,虽然在三维和二维的某些情况下,也会把这些图片称为纹理,但他们并不是纹理格式,不能被GPU直接读取并显示。因此,这些图片文件要先经过CPU解码成纹理格式,再传送到GPU进行使用。

而纹理格式,自然就是可以被GPU直接读取并显示的格式。所以,一方面,避免CPU解码可以减少运算带来的性能压力。另一方面,就是直接读取并渲染,也可以避免图像解压到内存的占用开销。

那纹理格式有哪些?在移动端,Android平台的主流纹理格式是ETC(Ericsson Texture Compression),iOS平台的主流纹理格式是PVRTC(PowerVR Texture Compression)。

需要特别说明的是,ETC1是不支持透明通道的,PVRTC是支持透明通道的,尽管在ETC2的时候,补全了ETC1不支持的透明通道,但是ETC2需要在OpenGL ES 3.0(对应webGL 2.0 )的环境下,而当前尚未全面普及,所以LayaAir引擎及工具也只支持了ETC1的纹理压缩。未来,当小游戏平台大多数都支持webGL 2.0后,我们也会跟进支持ETC2。

二、使用纹理压缩功能要注意的几个问题

尽管前文中描述了纹理压缩的好处,但我们如果不能充分的认知,做好准备。未必可以达到想要的效果。

2.1、纹理压缩的源图宽高规范

由于不同系统平台对纹理格式的宽高像素要求不同,所以纹理压缩的源图(PNG\JPG)也要按规范做出对应的设计,否则就可能会导致拉伸变形。

这里,我们先看一下错误的示例。

图1 左侧是一张宽高为512*313的PNG图像,右侧是通过LayaAir引擎提供的纹理压缩工具导出的PVRTC格式图像。

(图1)

很明显,在运行后,纹理压缩后的图像被拉伸了。这就是由于iOS系统下,纹理压缩格式必须宽高相等且为2的幂次方。即便Android系统不需要纹理宽高相等,但宽高也必须是2的幂次方,否则工具也会自动强行拉伸。所以,美术在设计之初,就要沟通确认好哪些需要进行纹理压缩,然后将需要纹理压缩的源图按平台规范进行调整。

2.2、LayaAirIDE与LayaAir Unity插件的差异

LayaAirIDE中的纹理压缩工具 与 LayaAir Unity插件中的纹理压缩工具在使用的时候,还是有所区别的,大家需要注意,下面分别进行介绍。

2.2.1 LayaAir Unity插件纹理压缩功能

在LayaAir Unity插件,资源发布平台的选项中,每一个选项在导出后,会对应一个独立的完整目录,如图2所示。每一个目录内都有着完整的导出资源,只是纹理资源与相关路径信息的差异。

(图2)

Conventional

图2中的Conventional这个选项是常规的导出方式,导出对应的目录内不会有任何纹理压缩的文件格式,原来的是JPG还是JPG,是PNG仍是PNG。用于发布web版和PC浏览器上调试效果。

JPG质量的参数设置是指在导出JPG格式图时的压缩比,100为最高。如果原图已经处理好,不想再改变质量,那就设置100。

Android
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值