Texture2D 贴图 — 格式转换、通道控制、常见坑
Texture2D 是什么
Texture2D 是 Unity 里最基础的 2D 纹理类型——游戏里看到的 UI 图标、背景图、3D 模型的漫反射贴图、法线贴图等,底层都是 Texture2D。AssetStudio 能解码 Unity 压缩的贴图数据并导出成通用格式。
支持解码的压缩格式
AssetStudio 集成了多种压缩贴图解码器,源码在 Texture2DDecoder 目录下:
| 压缩格式 | 来源 | 支持的 Unity 平台 |
|---|---|---|
| ASTC | mikunyan | 移动端(安卓、iOS)主流 |
| ETC2 | mikunyan | 移动端 |
| DXT / BC1-5 | mikunyan | PC / 主机 |
| Crunch | Unity-Technologies | Unity 内置的可变比特率格式 |
| LZ4 / LZMA | 7-Zip SDK | AssetBundle 压缩(先解压再解码) |
AssetStudioMod 额外处理了 Oodle 压缩(zao/ooz)和 Switch 的 swizzled 纹理。
可导出的格式
| 格式 | 原版 | Mod 版 | 特点 |
|---|---|---|---|
| PNG | ✅ | ✅ | 无损、支持 alpha、推荐用于立绘 / UI |
| TGA | ✅ | ✅ | 无损、支持 alpha、常见于游戏资源 |
| JPEG | ✅ | ✅ | 有损、不支持 alpha |
| BMP | ✅ | ✅ | 无损、无压缩、体积大 |
| WebP | ❌ | ✅ | 有损 / 无损都支持、体积小 |
WebP 是 AssetStudioMod 独有,批量导出贴图时选 WebP 能节省大量磁盘空间。
导出方法
- Asset List 里右键 → Filter Type → 只勾 Texture2D;
- 可选:搜索框输入关键词(比如
icon、bg)进一步缩小范围; - Ctrl+A 全选 → 右键 → Export Selected Assets;
- 弹窗选输出目录 → 等进度条走完。
导出目录按 Export Options 里的分组策略组织(默认按类型分 Texture2D/ 子目录)。
通道排查技巧(Ctrl+R/G/B/A)
预览贴图时用快捷键单独开关 R / G / B / A 通道,快速定位以下问题:
| 现象 | 排查动作 | 可能原因 |
|---|---|---|
| 全红 / 全蓝 / 全绿 | 关掉另外两个通道单独看 | 通道排列反了(Unity 的 RGBA vs BGRA 差异) |
| 边缘有黑边 | Ctrl+A 看 alpha 通道 | 压缩算法导致 alpha 边缘污染 |
| 图像发灰、对比度低 | 关 A 通道看 RGB | 贴图有 premultiplied alpha,导出时没有反预乘 |
| 全透明 / 导出文件不存在 | 确认选中的是 Texture2D 不是 Sprite | Sprite 是裁好的小图,对应 Texture2D 是整张大图 |
常见问题
PNG 黑底 / 发灰
Unity 很多贴图是 预乘 alpha(premultiplied alpha) 存储的。AssetStudio 导出 PNG 时默认不做反预乘,所以透明边缘会显黑边。解决方法:
- 如果只是个人研究,接受即可;
- 如果要用于正式用途,用 Photoshop / ImageMagick 做一次反预乘处理;
- 或者在 AssetStudioMod 的 Export Options 里换导出格式试试(部分格式会正确处理)。
同名文件冲突
不同 AssetBundle 里可能有同名 Texture2D。Export Options → Filename Options 里把 Collision handling 改成 Unique name,AssetStudio 会自动加后缀(如 icon (1).png)。
压缩格式不支持
极个别厂商用了私有压缩算法,AssetStudio 解码后图片是乱码。这种情况:
- 确认 Unity 版本和 AssetStudioMod 支持范围对得上;
- 换 AssetStudioMod 最新版(可能刚加了某种解码器);
- 还不行 → 说明是私有格式,需要专门逆向。