Skip to content

VIVO小游戏压缩纹理工具(Beta)

方案概述

针对传统 AssetBundle 内存占用高、启动慢的问题,本方案通过多格式纹理压缩与动态加载技术,将纹理资源分离至云端并按需加载,实现资源加载效率与渲染性能的双重优化;

注意:插件需要升级>=29版本

降低 bundle 体积,资源按需加载,加快游戏运行进度

压缩纹理工具将纹理资源从 Bundle 中分离单独托管,因此 Bundle 体积将变小,这有助于加快游戏运行进度。对于被分离的纹理资源将在游戏实际的使用过程中按渲染需要动态加载。

有效降低内存,提升渲染效率

使用压缩后的纹理本身将节约更多的内存空间,这对于内存吃紧的游戏至关重要。压缩纹理工具将对同一个纹理资源生成多种不同格式的压缩纹理(如ASTC、DXT……),在游戏运行中如需按需加载,根据实际运行设备 GPU 下载可被识别的压缩纹理。对于资源体积而言将更小,由 GPU 实现硬件解码,效率更高。

支持的 Unity 版本

此工具并未覆盖所有 Unity 的大版本, 为了确保压缩纹理工具的顺利进行,建议开发者根据 年份大版本 的基础上选用我们已经验证可行的 Unity 版本,如下表格所示,使用其他版本需要自行测试:

平台Unity编辑器版本
window2019.4.29f1c2、2020.3.10f1c1、2021.2.18f1c1、2021.3.45f1c1、2022.3.53f1c1
mac2021.2.18f1[c1]、2021.3.33f1[c1]、2022.3.14f1[c1]

注意:切换 Untiy 版本后需要重新构建 AssetBundle

构建 Bundle 文件

​ 项目中若使用 bundle 文件,需先构建 AB包。请勿开启 crc 对 bundle 进行校验。

构建前的纹理格式配置说明:

​ 纹理资源的 WebGL SettingsFormat 配置项支持列表:

Format支持情况
R 8 / R 16 bit支持
RGBA Crunched DXT5|BC3不支持
RGB Crunched DXT1|BC1不支持
RGBA Compressed DXT5|BC3支持
RGB Compressed DXT1|BC1支持
Alpha 8支持
RGBA Compressed ETC2 8 bits不支持
RGB Compressed ETC2 4 bits支持
RGB Compressed ETC 4 bits请勿使用资源占位符专用,全游戏工程请勿使用!
ASTC 请参考配置说明--
RGB(A) Compressed BC7支持
RGBA 32 bit支持

ASTC格式配置说明:

​ ASTC 是多数移动设备中游戏运行的主要支持的纹理格式,因此也是微信小游戏环境下主要使用到的压缩的纹理资源。

​ 在 2021版本 Unity 纹理资源的 WebGL SettingsFormat 配置项中,工具支持识别 RGB(A) Compressed ASTC 8x8、6x6、5x5、4x4 block 这三种压缩格式,其余格式请勿设置,并且不支持 ASTC HDR 系列的格式。

​ 若以上述4种格式配置后,最终生成的多份格式资源中,ASTC 资源将保持对应的 Block Size。值得注意的是,默认推荐使用 Block Size 8x8 格式,4x4 最清晰内存占用也会升高,开发者应根据实际调试后运行效果按需配置。

使用说明

第一步:请先导出vivo小游戏,并确保小游戏能正常运行。

注:无论是使用AA/AB方式的按需加载,均需要在插件中配置cdn路径

net_monitor

第二步:打开纹理压缩工具面板,点击 VIVO小游戏->纹理压缩工具

net_monitor

第三步:操作纹理压缩工具面板

net_monitor

可点击 打开bundle配置面板 查看识别情况,并按需忽略部分不希望执行压缩纹理的bundle资源,点击 处理资源 开始处理。

调试模式 将只生成 ASTC 格式(开发者工具中使用PNG资源,移动设备使用 ASTC格式资源),调试结束后可再次选用全量模式(默认采用增量逻辑不会额外增加处理时间)

​该步骤根据项目实际情况不同,处理时间也会有差异,执行完成后请留意控制台提示信息,不可存在多个警告消息。

第四步:上传CDN,并替换之前的webgl资源的路径

处理成功后,在webgl同级目录下,生成如下目录webgl-min,资源上传至CDN服务器:

net_monitor

第五步:重新打包项目

由于纹理压缩工具会修改项目部分配置,因此每次处理资源完成后都需要需要进入webgl_vivo重新打包rpk。

Q&A

1.生成的纹理太大

​ PC端上预览的时候展示的是PNG图片会比较大,手机上用的是带txt后缀的,如astc.txt, 这些文件压缩率很高,注意正式环境CDN一定要开启Brotli或者Gzip,这样加载的时候纹理就会很小。速度快很多。建议优先使用Brotli。

2.资源上传至CDN的注意事项

​ 上传至CDN时,请注意要按二进制传输,强制storebinary,如果按文本传输也会出现加载回来的图片成黑色。

3.Node.js异常处理

​压缩纹理工具执行需要依赖 Node.js 解释器,若执行前已安装 Node.js 但执行时提示未找到则需手动填入本机 Node.js 路径。请将 Node.js 的绝对路径填写至 QGAssetsTextTools.cs 文件的 NODE_PATH 变量中。若开发者使用API调用执行,可对该变量进行直接赋值。

4.MacOS系统执行报错“ xx EACCES ”

压缩纹理工具需要使用到部分开源工具的脚本,mac上可能会报权限相关的错误,如下

log
Error: spawn /Users/xxx/Assets/VIVO-GAME-SDK/Editor/TextureEditor/Node/astcenc-neon EACCES
    at ChildProcess._handle.onexit (node:internal/child_process:286:19)
    at onErrorNT (node:internal/child_process:484:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
  • 解决方案 直接进入脚本所在目录,执行以下方法,给脚本加访问权限
bash
chmod -R +x .

5.MacOS系统执行报错 “'System.Drawing.GDIPlus' threw an exception”

​ 因为 Unity 自带 Mono 配置错误 libgdiplus.dylib 文件路径。有两种解决方案选择其一即可。

  • 解决方案一(推荐):

​本地安装官方 Mono 后,代码配置压缩纹理工具用于执行的 Mono 解释器完整路径。

c#
// 在合理的时机进行路径配置:
QGAssetsTextTools.MONO_PATH = "/usr/bin/mono";  // 本机安装的 Mono 解释器完整路径
  • 解决方案二:

​先下载 libgdiplus.dylib 文件后,将其放在 UnityEditor /Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/lib/libgdiplus.dylib 路径下,并编辑 /Applications/Unity/Hub/Editor/{$Unity_Editor_Version}/Unity.app/Contents/MonoBleedingEdge/etc/mono/config 文件,将 target= .../libgdiplus.dylib 路径内容均变更为下载文件的存放完整路径,重启 Unity Editor 即可。