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

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

5 6 7 8 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

L
liangyizhou(周良宜) 已提交
56

57

58