深入解析纹理贴图——纹理压缩技术

by STANCH

标签:#纹理压缩 #纹理贴图

1.纹理压缩概述

3D计算机图形学离不开各种类型的纹理。纹理贴图可以极大地提高3D物体的视觉质量和细节水平,而不增加几何复杂度。简单的纹理是二维图像,该图像的单个像素称为纹素(texel)。事实上,纹理不仅可以存储颜色,还可以存储高度、法线方向、高光因子等每个纹理元素的信息。

从上至下依次为漫反射贴图,法线贴图,位移贴图,来源:TEXTURE COMPRESSION TECHNIQUES

随着现代游戏和3D应用程序体量越来越大,消耗了大量内存 (存放数据的场所),其中超过一半的内存被纹理占用,在渲染场景时,会有大量的贴图被传输到GPU,不经限制的话带宽(数据传输速度的体现)很快就会成为性能瓶颈,还会导致设备发热。因此,3D程序对内存大小和带宽有很高的要求,在图形渲染过程中纹理以压缩形式存储在内存中并传输到GPU,不仅减小了纹理的内存占用,最重要的是还节省了带宽,这是 一种非常高效的性能优化。此外,纹理压缩还可以减少功耗,因为GPU和VRAM(显存)的传输可以直接转换为功耗开销。

2.图片格式与纹理格式的区别

图片格式和纹理格式都是用来存储二维图像,但其设计目标、文件结构和支持特性都存在明显差异。图片压缩格式基于整张图片进行压缩,无法实现单个像素的解析,因此无法被GPU识别,需要CPU解压缩或非压缩格式才能够被识别,增加了CPU的时间和带宽。纹理压缩格式是基于块压缩,可以让CPU以设定的压缩格式(如DXTC、ETC等)进行压缩,能够更快读取像素所属字节块进行解压缩以支持随机访问

纹理压缩和图片压缩过程图,来源:【技术美术百人计划】图形 3.6 纹理压缩------包体瘦身术

(1)图片格式

  • 图片格式是图片文件的存储格式,通常在磁盘、内存中储存和传输文件时使用
  • 图片格式通常是独立的文件,如 .jpg、.png
  • 图片格式通常只支持基本的颜色通道和透明度等属性

(2)纹理格式

  • 纹理格式是专门为 3D 图形应用而设计,用于存储和传输贴附在 3D 模型表面的二维图像,是显卡能够直接进行采样的纹理数据格式
  • 纹理格式有时会被打包进特定的容器文件中,如 .dds、.ktx 等,这种容器格式可以包含多张纹理贴图以及相关的元数据信息
  • 纹理格式可以支持法线贴图、位移贴图、金属度贴图等更丰富的材质属性

3.什么是纹理压缩?

纹理压缩是为了减少纹理数据占用的存储空间和带宽,专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术,广泛应用于计算机图形、游戏、虚拟现实等领域。

图片非压缩格式:

RGBA8888 (RGBA32):一个像素32位,包含A通道,即一个像素消耗4字节

RGBA4444 (RGBA16):一个像素16位,包含A通道,即一个像素消耗2字节

RGB888 (RGB24):一个像素24位,无A通道,即一个像素消耗3字节

RGB565 (RGB16):一个像素16位,无A通道,即一个像素消耗2字节

为了介绍每个像素所占大小,以RGBA32为例,一个像素记录的颜色信息RGBA通道各占8位,一共32位,8位=1字节,共占4个字节。

4.为什么要使用纹理压缩?

尽管像jpg、png的压缩率很高,但并不适合纹理,主要问题是不支持像素的随机访问,这对GPU相当不友好,GPU渲染时只使用需要的纹理部分,纹理访问模式是高度随机的:在渲染过程中,只有部分纹理区域会被使用,而且访问顺序也是事先无法知道的。此外,相邻三角形并不意味着它们对应的纹理区域也是相邻的(下图 )。因此,图形子系统的整体性能在很大程度上依赖于纹理访问的效率。这种随机访问能力决定了各种纹理压缩格式的主要特性。

为了解决这些独特的纹理访问需求,专门的纹理压缩格式被设计出来,它们采用了与标准图像压缩算法不同的压缩方法。这些纹理压缩格式,如 DXT、ETC 和 ASTC,能够支持高效的单个纹理元素的随机访问,同时仍能提供良好的压缩比。

纹理布局,来源:Microsoft DirectX 9 SDK

5.常见纹理压缩格式

(1)S3TC/DXTn/BCn

在现代桌面计算时代,纹理压缩的传统答案只有一个:DXT。由于它的起源,它也被称为 S3TC,对于某些 DirectX 实现,它被称为 BCn。最基本的是,它是一种固定的 4x4 块格式,使用 4bpp**(每像素所占存储空间的位数)** 对每个 RGB 块进行编码。为了存储 alpha 信息,要么有 1 位 alpha(使用 1bpp 的编码空间),要么有第二个 4bpp alpha 专用块,用于高质量 alpha 编码。这种方法后来出现了一些变体,将 LA 或 RG 数据存储在两个单独的 4bpp 块中,以获得更好的质量。

(2)ETC/ETC2

为了避免使用大量特定于供应商的编解码器,Khronos 定义了与供应商无关的编解码器。随着 OpenGL ES 2.0 的推出,ETC 压缩格式成为可用的多供应商扩展,以更好的质量水平提供类似 DXT 的压缩。然而,它存在的一些问题阻碍了它的广泛采用:它不是ES 2.0 的

必需

部分,不支持 alpha,并且只有一种模式,即 4bpp RGB。

随着 2013 年 OpenGL ES 3.0(以及完整的 OpenGL 4.3)的发布,ETC2 格式成为标准,具有向后兼容性和重要的新功能。首先,它添加了完整的 alpha 支持,如 DXT3/5(8bpp),以及 1 位"穿透"alpha(4bpp)。其次,它带来了 EAC 格式,支持 1 通道和 2 通道数据(R 和 RG,分别以 4 和 8bpp 为单位)。第三,它添加了 sRGB 数据支持。

(3)ASTC

在 Khronos 定义 OpenGL ES 3.0 的同时,业界也在努力开发一种业界领先的压缩格式,为开发人员提供更精细的控制。这促成了 ASTC 纹理压缩格式于 2012 年中期的推出。ASTC 的关键在于,虽然它使用固定的 128 位/块,但每个纹理可以在这 128 位中容纳不同大小的块,这与之前格式的固定 4x4 块不同。ASTC 利用各种方形和非方形块尺寸,提供各种派生压缩比,从 8bpp 降至略低于 1bpp,如下所示:

因此,ASTC 在调整质量与尺寸方面具有巨大优势。替代格式通常为 RGB 或单通道数据提供 4bpp,有些可以在该占用空间中容纳 alpha,有些在第二个 4bpp 部分中提供更高质量的 alpha 或第二个单通道数据块。PVRTC 是另一种提供较小变体的格式,采用 2bpp 模式。

此外,ASTC 还支持 1-4 个通道,包括全 alpha RGBA、普通 RGB、2 通道 RG (LA) 和 1 通道 R (L/A) 支持,以及自定义 X+Y 和 XY+Z 法线贴图支持。最终结果是 ASTC 可以处理大多数类型的纹理。

ASTC 的另一个主要优势是,端点、权重等的编码方法是逐块选择的,而不是全局选择的,因此编码器可以动态调整分配 128 位以更好地表示每个块中的内容。即使在更高的压缩率下,这也能提供比以前的格式更好的图像质量。

参考:

TEXTURE COMPRESSION TECHNIQUES

【技术美术百人计划】图形 3.6 纹理压缩------包体瘦身术

关注Mapmost,持续更新GIS、三维美术、计算机技术干货

Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。

欢迎进入官网体验使用:Mapmost------让人与机器联合创作成为新常态

相关推荐
deli00737 分钟前
32K 上下文塞满后,AI 最先忘掉什么?120 轮对话实测
前端
deli0072 小时前
手机拍灯为什么有一条条黑纹?PWM 240Hz 实测
前端
wangruofeng6 小时前
AI Models 1.1.0 发布,查大模型价格、对比模型和找 API 地址
前端·aigc·ai编程
脚本自动化开发6 小时前
玩影之刃零,两张四千元级显卡怎么挑
后端
wangruofeng6 小时前
给前端开发者的 100 个设计参考网站
前端·设计
M--Y9 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
星栈10 小时前
视频即代码,Remotion 能做什么、不能做什么
前端·音视频开发
广州华水科技10 小时前
单北斗GNSS位移监测系统的应用与技术解析
前端
用户479492835691510 小时前
从一句话或代码仓到可交互 HTML:开源 Agent 画图技能 Archify v3.2 实测与选型边界
前端·后端·面试
努力的小雨11 小时前
别再复制日志给AI了!我让Codex自己去观测云查报错
后端