当前位置: 首页 > article >正文

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();
}
}
}
}
}

代码说明

  1. 菜单项:通过[MenuItem("Window/Set ASTC Compression")]创建一个菜单项,方便在Unity编辑器中调用。
  2. 窗口GetWindow<ASTCCompressionSetter>("ASTC Compression Setter")创建一个新的窗口。
  3. 按钮:在窗口中添加一个按钮,当点击按钮时,遍历当前选中的资产(Texture),并设置其压缩格式为ASTC。
  4. 设置压缩格式importer.textureCompression = TextureImporterCompression.ASTC_RGBA_4x4;可以设置具体的ASTC压缩格式。Unity支持多种ASTC格式,如ASTC_RGBA_4x4ASTC_RGBA_6x6等,可以根据需要选择。

请注意,在实际项目中,可能需要根据具体需求调整压缩格式和块大小,以达到最佳效果。同时,要确保目标设备支持所选的ASTC格式。

通过上述技术详解和代码实现,你可以在Unity3D项目中有效地使用ASTC贴图压缩格式,以减小游戏包的大小并提高加载速度。

更多教学视频

Unity3D​www.bycwedu.com/promotion_channels/2146264125


http://www.kler.cn/a/386564.html

相关文章:

  • 计算机的错误计算(一百五十二)
  • docker compose 多个 Dockerfile
  • 机器视觉和计算机视觉的区别
  • 【缓存策略】你知道 Cache Aside(缓存旁路)这个缓存策略吗
  • 初始JavaEE篇 —— 文件操作与IO
  • BFD8122防爆轻便移动工作灯
  • MacOs上如何彻底卸载DevEco Studio?
  • VSCode 多工程联合调试
  • PythonBase02
  • MFC图形函数学习06——画椭圆弧线函数
  • EDUCODER头哥 SpringBoot 异常处理
  • UE5.4 PCG 自定义PCG蓝图节点
  • memcache redis区别
  • 【Java项目】基于SpringBoot的【时间管理系统】
  • 选项式api和组合式api
  • 【如何获取股票数据40】Python、Java等多种主流语言实例演示获取股票行情api接口之沪深指数最新分时KDJ数据获取实例演示及接口API说明文档
  • input file检验成功之后才可以点击
  • 网络--应用层协议--HTTP
  • Go语言死锁和阻塞
  • 一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ
  • Vue Element-UI 选择隐藏表格中的局部字段信息
  • 智慧交通系统:构建高效安全的城市交通网络
  • 2024 CSS保姆级教程四
  • 深度学习:自注意力机制(Self-attention)详解
  • 工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置