unity-贴图压缩格式
Posted 蝶泳奈何桥.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity-贴图压缩格式相关的知识,希望对你有一定的参考价值。
title: unity-贴图压缩格式
categories: Unity3d
tags: [unity, ios, astc]
date: 2017-12-21 20:09:12
comments: false
mathjax: true
toc: true
unity-贴图压缩格式
前篇
- 各平台的推荐、默认和支持的纹理压缩格式 - https://docs.unity3d.com/cn/2018.4/Manual/class-TextureImporterOverride.html
unity 默认压缩格式
先看结论: https://blog.csdn.net/Czhenya/article/details/116942231
贴图导入unity后会自动设置成压缩格式,它会先判断贴图是否有透明通道。
android:不带透明通道压缩成ETC1,带透明通道压缩成ETC2,不被4整除的回退到RGBA32
IOS: 不带透明通道压缩成RGB PVRTC,带透明通道压缩成RGBA PVRTC ,不是2的整数次幂回退到RGBA32
Android
- 略
iOS
官方建议
- 各平台的推荐、默认和支持的纹理压缩格式 - https://docs.unity3d.com/cn/2018.4/Manual/class-TextureImporterOverride.html
iOS 和 tvOS
对于使用 A8 芯片 (2014) 或以上的 Apple 设备,ATSC 是 RGB 和 RGBA 纹理的推荐纹理压缩格式。这种格式允许您在粒度级别对纹理质量和大小进行选择:从 8 位/像素(4x4 块大小)开始直至 0.89 位/像素(12x12 块大小)。 如果需要支持旧设备,或者您想要额外的 Crunch 压缩,从 A7 芯片 (2013) 起的 Apple 设备支持 ETC/ ETC2 格式。 对于更旧的设备,需要使用 PVRTC 压缩格式。 在 iOS 上,Unity 的默认纹理压缩格式是 PVRTC,以获得尽可能广泛的兼容性。ASTC 是首选,但在 A7 设备(第一个支持 Metal 的设备)上不受支持,将在运行时解压缩。
A8 芯片
Apple A8是苹果公司设计的第二代64位系统单片机(SoC)。在2014年9月9日发布,用于iPhone 6、iPhone 6 Plus、iPad mini 4、iPod touch 6、Apple TV和HomePod。[5] 苹果公司宣称它比上代Apple A7在CPU性能高25%,绘图性能高50%,能源效益高50%。
ASTC
- ASTC纹理压缩格式详解 - https://zhuanlan.zhihu.com/p/158740249
一、ASTC纹理压缩格式介绍
ASTC是在OpenGL ES3.0出现后在2012年中产生的一种业界领先的纹理压缩格式,它的压缩分块从4x4到12x12最终可以压缩到每个像素占用1bit以下,压缩比例有多种可选。ASTC格式支持RGBA,且适用于2的幂次方长宽等比尺寸和无尺寸要求的NPOT(非2的幂次方)纹理。
以ASTC 4x4 block压缩格式为例,每个像素占用1字节,8bits。一张1024*1024大小的贴图压缩后的大小为1M。
ASTC在压缩质量和容量上有很大的优势。
文档中有详细的测试数据:https://developer.nvidia.com/astc-texture-compression-for-game-assets
二、适配机型
-
iOS
苹果从A8处理器开始支持 ASTC,iPhone6及iPad mini 4以上iOS设备支持,2014年的iPhone 5s及iPad mini 3以前的设备不支持。
-
安卓
安卓主流压缩格式正在从ETC2转向ASTC。
Unity官方对安卓ASTC格式支持的说明:
https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
官方文档中提到GPU对ASTC的支持情况:所有支持OpenGL ES 3.1和部分支持OpenGL ES 3.0的GPU。
无论贴图本身是否带Alpha信息,ASTC压缩的不同设置直接决定压缩大小。控制贴图资源的包体大小,依赖于ASTC压缩格式的规范是否合理,毕竟压缩为ASTC 8x8后容量与ASTC 6x6相比减小了约44.8%(85.4KB vs 154.7KB),压缩为ASTC 8x8后容量与ASTC 4x4相比减小了约300%(85.4KB vs 341.4KB)。而我们通常检查Alpha通道是否为空,可以帮助我们判断Alpha的信息是否冗余,是否应该设置更低的压缩精度。
最后定的ui6x6,其他全部8x8,应该够用
实测对比
iPhone X
-
ASTC_RGBA_4x4
-
ASTC_RGBA_6x6
-
ASTC_RGBA_8x8
8x8 有点糊了, 6x6 可以接受.
默认格式不用看了, 比 8x8 更糊.
以上是关于unity-贴图压缩格式的主要内容,如果未能解决你的问题,请参考以下文章
Unity Shaders and Effects Cookbook (2-4) 压缩和混合纹理贴图:使用灰度图存储插值信息