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

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,能够支持高效的单个纹理元素的随机访问,同时仍能提供良好的压缩比。

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——让人与机器联合创作成为新常态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/722092.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

chrome的插件怎么获取到安装包

问: chrome的插件怎么获取到安装包 回答: 在chrome浏览器输入: chrome://version/ 复制: 个人资料路径, 打开这个路径, 在文件中打开Extensions这个文件夹, 这个文件夹就是存放插件安装包的文件夹.

Mac 安装HomeBrew(亲测成功)

1、终端安装命令: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"执行后,没有安装git,会先安装,安装后再执行一下命令。 2、根据中文选择源安装 3、相关命令 查看版本号&a…

Jmeter如何进行分布式测试

使用Jmeter进行性能测试时,有些同学问我如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,怎么办就需要使用分布式压测 1.分布式原理: 1、Jmeter分布式测试时,选择其中一台作…

深度剖析ElasticSearch分页原理与深分页问题|ES深分页问题|ES分页原理剖析

文章目录 ES分页|Paginate search resultsES深分页的问题一页获取数据量太大,报错分页深度太大,报错官方解释 其他解决方案Search after解决两个问题 有没有深分页查询的必要性?search after & PIT的使用方式1.创建pit2.首次查询3.之后的…

Opencv高级图像处理

文章目录 Opencv高级图像处理图像坐标二值化滤波高斯滤波中值滤波 开闭运算检测霍夫圆检测边缘检测Canny边缘检测findContours区别傅里叶变换-高/低通滤波 直线检测 相机标定视频处理视频格式 模板摄像头处理(带参调节)单图片处理(带参调节&a…

JAVA上门家政服务系统源码微信小程序+微信公众号+APP+H5

🏠家政服务系统:一键预约,轻松享受家居生活🎉 功能介绍 用户端:精准分类、支持家政、维修、万能服务、一口价、报价、线上、各类家政服务、优惠专区、师傅入驻、商家入驻、我的需求、补费明细、我的投诉 师傅端&…

基于Spring Boot+VUE旧物置换网站

1前台首页功能模块 旧物置换网站,在系统首页可以查看首页、旧物信息、网站公告、个人中心、后台管理等内容,如图1所示。 图1系统功能界面图 用户注册,在用户注册页面通过填写用户名、密码、姓名、性别、头像、手机、邮箱等内容进行用户注册&…

Linux 系统图像化编程GTK入门

环境前期准备 演示环境:Windows 11 Ubuntu 22.04.4 VS Code 前提条件:1、Windows 11 子系统Ubuntu 22.04.4 已经安装图形化界面,如果没有安装请参考文章: windows11子系统Ubuntu 22.04.4子安装图形化界面 2、Ubuntu 22.04.4…

小程序餐饮点餐系统,扫码下单点菜,消费端+配送端+收银端+理端

目录 前言: 一、小程序功能有哪些 前端: 管理端: 二、实体店做小程序的好处 方便快捷的点餐和支付体验: 扩大店铺的曝光度和影响力: 优化顾客体验和服务质量: 降低成本和提高效率: 数据…

iview 组件里面的(任何一个月)整月日期全部选中_iview时间轴选中有历史记录日期

iview 组件里面的整月日期全部选中: ①:第一种是当前月的日期全部选中: 先上效果图:当前月分 获取到的值: 当前月的方法: // getDateStr() {// var curDate new Date();// var curMonth curDate.ge…

K8s的资源对象

资源对象是 K8s 提供的一些管理和运行应用容器的各种对象和组件。 Pod 资源是 K8s 中的基本部署单元,K8s通过Pod来运行业务应用的容器镜像 Job 和 CronJob 资源用于执行任务和定时任务,DaemonSet 资源提供类似每个节点上守护进程, Deployment…

WPF 深入理解四、样式

样式 WPF中的各类控件元素,都可以自由的设置其样式。 诸如: 字体(FontFamily) 字体大小(FontSize) 背景颜色(Background) 字体颜色(Foreground) 边距(Margin) 水平位置(HorizontalAlignment) 垂直位置(VerticalAlignment)等等。 而样式则是组织和重用以上的重要工具。不是使…

Nginx缓存之web缓存配置

Web 缓存可节约网络带宽,有效提高用户打开网站的速度。由于应用服务器被请求次数的降低,也相对使它的稳定性得到了提升。Web 缓存从数据内容传输的方向分为前向位置缓存和反向位置缓存两类。如下图所示。 前向位置缓存既可以是用户的客户端浏览器&#x…

iOS 18 Siri 升级之后都有哪些改变?

新界面 首先最显著的改变就是 Siri 的界面不同了,之前的界面是在打开 Siri 之后会出现一个圆形图案,而在 Siri 升级之后变成了屏幕边缘发出亮光。 来源:Apple 可在任意位置使用 苹果的生成式人工智能 Apple Intelligence 将为 Siri 提供支…

【前端】 nvm安装管理多版本node、 npm install失败解决方式

【问题】If you believe this might be a permissions issue, please double-check the npm ERR! permissio或者Error: EPERM: operation not permitted, VScode中npm install或cnpm install报错 简单总结,我们运行npm install 无法安装吧包,提示权限问题…

pdf怎么压缩到2m以内或5m以内的方法

PDF作为一种广泛使用的文档格式,已经成为我们工作和生活中不可或缺的一部分。然而,有时候PDF文件内存会比较大,给我们的存储和传输带来了很大的不便。因此,学会压缩 PDF 文件是非常必要的。 打开"轻云处理pdf官网"&…

JAVA二手车交易二手车市场系统源码支持微信小程序+微信公众号+H5+APP

🚗二手车交易系统小程序:让买卖更轻松🔍 功能介绍 我的粉丝、我的关注、获赞、访客 我的动态、认证中心、我的团队、开通会员 免费估值、买二手车、我要卖车、车型选择 每日上新、底价专区、精准筛选、附近展厅商 车辆的详细信息、拨打电…

Mamba: Linear-Time Sequence Modeling with Selective State Spaces论文笔记

文章目录 Mamba: Linear-Time Sequence Modeling with Selective State Spaces摘要引言 相关工作(SSMs)离散化计算线性时间不变性(LTI)结构和尺寸一般状态空间模型SSMs架构S4(补充)离散数据的连续化: 基于零阶保持技术做连续化并采样循环结构表示: 方便快速推理卷积结构表示: 方…

从0开始开发一个简单web界面的学习笔记(HTML类)

文章目录 什么是HTML页面vscode 开放工具搭建第一个HTML页面编写vscode 如何快速生成代码框架html标签——注释、标题、段落、换行标签格式化标签img 标签(src 属性01)img 属性02(alt、title、width/height、border)a标签href属性a标签target属性表格标签01 基本属性表格标签02…

镜头跟踪的两种方法

方法一 (1) 原理:使球与摄像机保持固定的角度和距离 (2) 给Main Camera添加CamraCtrller.cs组件 public Transform Player;//小球的Transformprivate Vector3 offset;//小球与摄像机位置的偏移(在三轴上的距离)void Start(){offset Playe…