3.13.5.5 压缩纹理

优质
小牛编辑
131浏览
2023-12-01

Cocos Creator 3D 可以直接在编辑器中设置纹理需要的压缩方式,然后在项目发布时自动对纹理进行压缩。针对 Web 平台,支持同时导出多种图片格式,引擎将根据不同的浏览器自动下载合适的格式。

配置压缩纹理

Cocos Creator 3D 支持导入多种格式的图片(具体见下表),但是在实际游戏运行中,我们不建议使用原始图片作为资源来加载。比如在手机平台上可能只需要原图 80% 或者更少的画质,又或者是没有使用到透明通道的 .png 可以将其转换成 .jpg,这样可以减少很大一部分图片的存储空间。

图片格式AndroidiOSMini GameWebMac & Windows
PNG支持支持支持支持支持
JPG支持支持支持支持支持
WEBPAndroid 4.0 以上原生支持,其他版本可以使用 解析库可以使用 解析库支持部分支持不支持
PVR不支持支持支持 iOS 设备支持 iOS 设备Mac 支持
ETC1支持不支持支持 Android 设备支持 Android 设备不支持
ETC2部分支持, 取决于手机硬件不支持不支持支持部分 Android 设备不支持
ASTC部分支持部分支持不支持部分支持Mac 支持

默认情况下 Cocos Creator 3D 在构建的时候输出的是原始图片,如果在构建时需要对某一张图片或者自动图集进行压缩,可以在 资源管理器 中选中这张图片或图集,然后在 属性管理器 中勾选 useCompressTexture, 再选择图片的纹理压缩格式预设即可。

compress-texture

编辑器将会默认提供一个默认预设,如果需要添加更多预设可以点击旁边的 编辑预设 按钮打开 项目设置 -> 压缩纹理 来添加编辑预设,这里的压缩格式仅作为展示使用不可编辑。关于添加纹理压缩预设,请参考 项目设置

meta

图片资源上的压缩纹理选项将会存储在资源 meta 文件内,其中 presetId 是选择的压缩纹理预设的 ID 。

压缩纹理详解

如果想要使用压缩纹理,在构建项目的时候需要打开压缩纹理选项使项目使用压缩纹理功能:

compress-texture-build

Cocos Creator 3D 在构建图片的时候,会查找当前图片是否进行了压缩纹理的配置,如果没有,则最后按原图输出。

如果查找到了压缩纹理的配置,那么会按照找到的配置对图片进行纹理压缩。项目设置里压缩纹理配置是按照平台大类划分的,具体到实际平台的支持程度会有一些差异。构建将会根据实际构建平台以及当前图片纹理的透明通道情况来对配置的纹理格式做一定的剔除和优先级选择,关于这块规则可以参考下文的示例来理解。

这些生成的图片不会都被加载到引擎中,引擎会根据 macro.SUPPORT_TEXTURE_FORMATS 中的配置来选择加载合适格式的图片。macro.SUPPORT_TEXTURE_FORMATS 列举了当前平台支持的所有图片格式,引擎加载图片时会从生成的图片中找到在这个列表中 优先级靠前(即排列靠前)的格式来加载。

用户可以通过修改 macro.SUPPORT_TEXTURE_FORMATS 来自定义平台的图片资源支持情况以及加载顺序的优先级。

使用示例

1

示例 (一): 如图所示的对于 MiniGame 平台的压缩纹理预设,假如构建的是华为快游戏这类,构建将不会打包出 PVR 的纹理格式。更多的平台剔除细则可以参考文末的 构建平台的压缩纹理支持情况

2

示例 (二): 在上面的示例图中,ETC1 和 PVR 类型都同时配置了 RGB 和 RGBA 两种类型的纹理格式,这种情况下构建将会根据当前图片的是否带有透明通道剔除同类型其中一种格式。示例图中的图片是带透明通道的,则此时构建将只会打包出带有 REGA 类型的压缩纹理格式。当然这种剔除只有同时存在时才会,假如配置里只有 RGB 的图片格式,即便当前图片是带透明通道的也会正常打包出来。

构建平台的压缩纹理支持细节

除全平台支持的 JPG、PNG 外,其他格式的支持细节如下:

PlatformTextureCompressTypes
Web DesktopASTC / ETC2 / ETC1 / PVR / WEBP
Web MobileASTC / ETC2 / ETC1 / PVR / WEBP
WeChat GameETC1 / PVR
AliPay Mini GameETC1 / PVR
Baidu Mini GameETC1 / PVR
OPPO Mini GameETC1
vivo Mini GameETC1
Huawei Quick GameETC1
Cocos PlayETC1
Xiaomi Quick GameETC1
iOSASTC / PVR / WEBP
AndroidASTC / ETC2 / ETC1 / WEBP
MacASTC / PVR