CompressedTexture.md 4.3 KB
Newer Older
O
migrate  
oceanxiao 已提交
1 2 3 4
# 压缩纹理使用(Beta)

因为目前Unity导出的WEBGL游戏只支持DXT1和DXT5,在移动端上并不支持,而且除非使用Addressable这种将图片打包出来的手段,否则也会导致包体过大。为了解决这两个问题。我们提供了这个功能,让Unity游戏也能在移动端自动支持ASTC和ETC2的压缩纹理。而且图片也自动做了按需加载,无需再单独拆分打包。

N
nebulaliu 已提交
5
使用我们的压缩纹理的好处:
6

N
nebulaliu 已提交
7 8
- 降低 bundle 包体大小,bundle 内的纹理资源按需、按平台下载,因此内存占用更低,游戏运行效率更高
- 因可按平台下载使用于不同设备的编码纹理,解码消耗低,渲染速度快
9

10
`注意:` 使用压缩纹理的图片或者图集,宽高需要为4的倍数,否则不会转化为移动端的压缩纹理。对于需要动态读取图片内容做处理的,目前还不支持将其转为压缩纹理。
11 12

## 原理简介
13
简单来说,我们使用占位符的方式将纹理图片设置为ETC1格式,然后在运行时再根据占位符去加对应纹理的压缩纹理格式。从而达到了减少内存和自动懒加载纹理的效果。
14 15

## 使用
16 17
### 1、安装NodeJS
下载并安装[NodeJs](https://nodejs.org/en/) 
18 19
### 2、Mac上授权
因为Mac上的隐私安全问题,使用mac的用户需要先授权,使用window的用户跳过这步。点击"微信小游戏"->"MacOS脚本授权",进行授权,直到不报错为止。若授权后还是报错,则需重启unity后再点授权。
O
migrate  
oceanxiao 已提交
20

21
### 3、打bundle文件
22
如果使用了bundle文件,要先打好AB或AB包。注意不要开启crc对bundle进行校验。且纹理格式不要使用RGBA Crunched DXT5或RGB Crunched DXT1格式,但可以使用RGBA Compressed DXT5等其他格式。
23

24 25
### 4、导出游戏
点击"微信小游戏"->"转换小游戏" 打开转换小游戏弹窗,点击左下角的"导出WEBGL并转化为小游戏"按钮等待导出游戏即可
26

27 28
### 5、处理bundle文件
点击"微信小游戏"->"包体瘦身--压缩纹理",点击处理bundle,如果自定义了bundle生成路径,要将bundle复制到导出目录的webgl目录下。如果项目用到的图片比较多这一步可能需要花费较长时间,比如10多分钟。执行完后请留意控制台的提示信息。
29

30

31 32 33
导出后的纹理所在目录:  

![avatar](../image/cm-texture1.png)
O
migrate  
oceanxiao 已提交
34

35 36 37 38
### 6、根据提示用NodeJs生成纹理
进入WX-WASM-SDK/Editor/Node 目录用命令行,执行 ’node compress_astc_only.js‘ (开发阶段使用,只生成部分格式纹理) 或 ’node compress_all.js‘(上线时候使用,生成全部格式纹理) 命令来生成纹理。

### 7、上传CDN
39
对应的资源应该选用webgl-min目录下的资源,比如webgl-min里的Assets目录,StreamingAssets目录,和xxx.webgl.data.unityweb.bin.txt 这些文件,应将其上传至CDN对应目录才能正确展示。
L
liangyizhou(周良宜) 已提交
40 41

## QA:
42 43


ocean2o11's avatar
ocean2o11 已提交
44 45 46 47 48 49 50 51 52 53 54
### 1. 生成的纹理太大
* PC端上预览的时候展示的是PNG图片会比较大,手机上用的是带txt后缀的,如astc.txt, 这些文件压缩率很高,注意正式环境CDN一定要开启Brotli或者Gzip,这样加载的时候纹理就会很小。速度快很多。建议优先使用Brotli


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

### 3. Unity升级至2021后已支持ASTC,是否无需再使用微信压缩纹理工具
- Unity引擎自身压缩纹理:更统一的工作流;ASTC能支持最近3-4年大部分机型;但PC端不支持ASTC依然需要解压。
- 微信压缩纹理工具:支持不同平台的自适应(ETC2,ASTC,DXT);同时纹理从ab中剥离出来,使得ab占用内存更小。
- 建议:如果是中轻度,对于内存和PC端不需要DXT可使用Unity自身的ASTC即可。对于重度游戏(MMO、SLG),非常看重内存和不同平台适配,则使用微信压缩纹理。
L
liangyizhou(周良宜) 已提交
55

N
nebulaliu 已提交
56
### 4. 建议的 Unity 版本
L
liangyizhou(周良宜) 已提交
57

N
nebulaliu 已提交
58
- 工具对于 2019、2020、2021 的部分版本有支持,目前已知一些版本无法使用(如 2021.3.x 版本无法支持),为了确保压缩纹理工作的顺利进行建议开发者根据**年份大版本**的基础上选用我们已经验证可行的 Unity 版本:**2019.4.28f1c1 、2020.3.10f1c1、2021.2.18f1c1**,使用新的 Unity 版本后需要重新构建 Bundle 。
59