Unity3D ASTC贴图压缩格式详解
一、技术详解
ASTC(Adaptive Scalable Texture Compression)是一种先进的纹理压缩格式,特别适用于OpenGL ES 3.0及更高版本。ASTC在2012年推出,自那以后已经成为游戏开发中重要的纹理压缩技术。它不仅在iOS设备上得到广泛应用(从iPhone 6和iPad mini 4开始支持),而且逐渐被Android设备采纳,主流压缩格式正在从ETC2转向ASTC。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
1. 压缩特性
- 压缩比率和质量:ASTC提供多种压缩比率,用户可以根据需求选择适合的压缩块大小(从4x4到12x12)。较小的块可以提供更高的图像质量,但压缩率较低;较大的块可以显著提高压缩率,但可能会牺牲一些图像质量。
- 颜色通道支持:ASTC支持RGBA颜色通道,并且适用于2的幂次方长宽等比尺寸和无尺寸要求的NPOT(非2的幂次方)纹理。
- 灵活性:ASTC压缩分块的大小灵活,支持LDR(低动态范围)、HDR(高动态范围)、2D和3D纹理。每个块有端点对(endpoints),这些端点对不一定是RGBA的,也可以是部分通道,比如RG通道,从而可以对法线贴图进行更好的压缩。
2. 块大小选择
- 无Alpha通道的贴图:推荐使用ASTC 8x8。
- 法线贴图:建议使用ASTC 5x5或4x4,以避免丢失过多数据。
- 带Alpha通道的贴图:推荐使用ASTC 5x5。
- 一般的贴图:选择6x6或8x8。
- 无关紧要但尺寸特别大的图:可以考虑8x8、10x10、12x12,以减小打包后的文件大小。
3. 压缩原理
ASTC采用BISE(Block Image Store Encoding)算法进行压缩。在压缩过程中,ASTC会对块内颜色分布进行分析,并根据颜色分布进行分区,分别存储对应的端点对。解码时,通过插值计算出每个像素的颜色值。对于较大的块,权重网格会被双线性放大到块的大小。
二、代码实现
在Unity3D中,实现ASTC贴图压缩主要通过设置TextureImporter的压缩格式来完成。以下是一个示例代码,展示如何在Unity3D中设置贴图的ASTC压缩格式:
using UnityEngine; | |
using UnityEditor; | |
public class ASTCCompressionSetter : EditorWindow | |
{ | |
[MenuItem("Window/Set ASTC Compression")] | |
public static void ShowWindow() | |
{ | |
GetWindow<ASTCCompressionSetter>("ASTC Compression Setter"); | |
} | |
private void OnGUI() | |
{ | |
if (GUILayout.Button("Set ASTC Compression")) | |
{ | |
string[] guids = Selection.assetGUIDs; | |
foreach (string guid in guids) | |
{ | |
string assetPath = AssetDatabase.GUIDToAssetPath(guid); | |
TextureImporter importer = AssetImporter.GetAtPath(assetPath) as TextureImporter; | |
if (importer != null) | |
{ | |
importer.textureCompression = TextureImporterCompression.ASTC_RGBA_4x4; // 或者其他ASTC格式 | |
importer.SaveAndReimport(); | |
} | |
} | |
} | |
} | |
} |
代码说明:
- 菜单项:通过
[MenuItem("Window/Set ASTC Compression")]
创建一个菜单项,方便在Unity编辑器中调用。 - 窗口:
GetWindow<ASTCCompressionSetter>("ASTC Compression Setter")
创建一个新的窗口。 - 按钮:在窗口中添加一个按钮,当点击按钮时,遍历当前选中的资产(Texture),并设置其压缩格式为ASTC。
- 设置压缩格式:
importer.textureCompression = TextureImporterCompression.ASTC_RGBA_4x4;
可以设置具体的ASTC压缩格式。Unity支持多种ASTC格式,如ASTC_RGBA_4x4
、ASTC_RGBA_6x6
等,可以根据需要选择。
请注意,在实际项目中,可能需要根据具体需求调整压缩格式和块大小,以达到最佳效果。同时,要确保目标设备支持所选的ASTC格式。
通过上述技术详解和代码实现,你可以在Unity3D项目中有效地使用ASTC贴图压缩格式,以减小游戏包的大小并提高加载速度。
更多教学视频
Unity3Dwww.bycwedu.com/promotion_channels/2146264125