type
status
date
slug
summary
tags
category
icon
password
纹理映射
纹理映射 (Texture Mapping) 是一种将物体空间坐标点转化为纹理坐标,进而从纹理上获取对应点的值,以增强着色细节的方法。

纹理映射有以下四个步骤,但并不是每个都要使用,只是体现纹理映射可以被灵活操控,以获得我们想要的效果。

1. 投影映射(Projector And Mapping)
投影映射是将三维的空间坐标点转化为二维的纹理坐标点,方法有两种:
- Projector
Projector有4种投影方式Plane、Cubic、Cylindrical和Spherical

- UV Mapping
Projector 只适用于简单情况,对于更复杂的几何体贴图,往往需要用到 UV Mapping:用于将 3 维模型中的每个顶点与 2 维纹理坐标一一对应。
2. 变换函数(Corresponder Function)
2.1. 坐标范围处理
此时得到的有可能是 [0.25,0.3] 这种在 [0,1] 范围内的值,但也有可能超出了 [0,1] 范围,那么需要对范围外的值进行处理,一般有以下几种方法:Repeat、Mirror、Clamp
和 Border。

2.2. 坐标自由变换
除了对这些超出范围的 uv 值处理,还可以对其施加“变换”,比如旋转,平移,缩放,比如想让纹理随着时间运动起来,那么就可以逐帧变换 uv 值
但要注意的是:对 uv 坐标施加的变换矩阵,往往是实际想要变换的逆矩阵
如:若想让纹理向右偏移 0.5 单位,那么则应该是 u – 0.5 而不是 u + 0.5。就好比是一个窗口去看这张纹理,uv 就是窗口,窗口向左移动,看起来就是纹理向右移动
2.3. 转到纹理空间
在对 uv 进行合理变换之后,其范围都落到了 [0,1],再分别乘以纹理实际的宽高,可得到纹理坐标。比如 uv 坐标为 [0.25,0.3],纹理的宽高为 [256,256],那么相乘可得到 [64,76.8],出现了小数。
3. 纹理采样(Texture Sampling)
- 屏幕或者画布上的一个单元:pixel。
- 纹理上的一个单元:texel。
设想一种特殊情况,我们要渲染的物体正面对着我们,刚好画布尺寸与纹理尺寸一致,比如都是 512*512,那么在获取每个 pixel 对应 texel 值时,刚好就能得到整数的纹理坐标,只需要每个 texel 逐个读取即可,不用考虑什么采样与重建。
而实际中,我们会面临纹理过大或者过小两种情况。分两种情况来讨论:

- 纹理分辨率过小,需要放大 (Magnification)
- 最邻近采样 (nearest neighbor):类似 box 滤波器
- 双线性采样 (bilinear):类似 tent 滤波器
- 三次卷积采样 (cubic convolution):类似 sinc 滤波器的截断近似,因为 sinc 本身是最理想的滤波器,但是宽度是无限,无法实际使用
- 利用 GPU 的双线性插值特性,实现不同的上采样纹理插值:
上采样涉及到重建和采样,重建时需要选择滤波器 (filter):


- 纹理分辨率过大,需要缩小 (Minification)
- 纹理采样抗锯齿
- 在放大的情况进行混合时,只考虑了周围四个 texel 的值进行混合,而在缩小的情况中,一个 pixel 覆盖的 texel,个数往往不只 4 个,所以容易出现锯齿。
- 需要对纹理进行预处理,建立一种数据结构,在采样时尽可能对 pixel 覆盖的 texel 区域的平均值进行估计。
- 三种抗锯齿的方法
- Mipmapping
- Summed-Area Table(SAT)
- 各向异性过滤 (Anisotropic Filtering)
将高分辨率的纹理贴到低分辨率的画布,即一个 pixel 覆盖了多个 texel。
- Texture Representation 纹理表现形式
- 纹理合图(texture atlas)
- 一般使用这个。
- 一般程序读取模型的时候,使用的是白模(.obj文件)和纹理合图(.png文件)
- 纹理数组(texture array)
- 无绑定纹理(bindless texture)
有一些方法可以优化处理纹理时的性能
4. 纹理转换
在通过纹理采样获取纹理值后,并不一定直接将纹理值作为颜色使用,还有其他用途,如在 Normal Mapping 中当作法向量使用,在 Bump Mapping 中当作高度偏移使用,所以还需要对纹理值进行相应的转换。
5. 最新论文进展
- UVAtlas - isochart texture atlasing(微软 2004持续更新)
- AtlasNet CVPR2018 ADOBE
- Texture Fields CVPR2019
- Xiang CVPR2021
- Wei ICCV2021
参考资料
更详细: