概念
纹理是计算机图形学的一个基础知识。它使得用户能够不必对模型的几何细节进行建模就可以表示丰富的表面细节。
纹理解决了两个问题:
1.通过纹理图像表示表面,用户可以不必建模所有的几何及材质细节。这种方式省时省力,使得用户可以将精力集中于其它更重要的事情。
2.通过渲染简单的多边形模型(例如:用一个单一的多边形表示砖墙)和纹理,而不是具有不同BRDF的模型几何细节,渲染过程可以更加有效。这种改进不论是通过光线跟踪还是硬件加速都很明显,因而节约了计算时间和计算资源。
纹理的使用
为了使用纹理,我么通常需要三个步骤:
1.首先是纹理采集,可以通过以下方式:
手工绘制;
拍照;
过程纹理:
纹理合成;
2.纹理贴图:给定纹理图像和一个三维模型,需要弄清楚如何将纹理映射到模型上。这可以通过每个三维模型的顶点指定一个纹理坐标,并利用这个坐标把纹理图像上的色彩赋值给模型来实现。
3.纹理滤波:在决定如何将纹理映射到物体上去之后,绘制时还需仔细地对纹理进行采样。否则,容易产生一些不好的人为痕迹,这种问题的产生源于信号处理理论中的一些基本问题。
1.1纹理采集之过程纹理
通过编写特殊的程序模拟物理形成过程或者材质外观,来合成纹理;
优点:
这种表示可以非常紧致,因为只需存储过程本身和参数;
通过改变过程参数可以简单地改变材质的外观,提供优良的可控性。
缺点:
只能被用于一些特定的纹理;
对于一个没有已知程序代码的材质,无法通过该方法合成。
例如:柏林噪声:
从1985年起,柏林噪声就成为广泛应用的标准过程纹理产生方法。
柏林噪声的基本思想简单而且优雅,在介绍柏林噪声之前,首先描述白噪声。
白噪声是一种在所有频率处具有均衡能量密度的信号。因此,白噪声的傅里叶变换是近似平坦的。
可以通过均匀的随机函数产生。
1.2纹理采集之纹理合成
什么是纹理合成?
从一个特定的样本合成一个新的纹理。
两类:
1.基于像素的的纹理合成
逐像素地合成新的纹理,其中每个像素的值由局部邻域来确定,选择输入像素中具有最相似邻域的那个。
2.基于块纹理合成
基于像素的方法可以通过合成区块改进。最重要的方法之一是Graph-cut[Kwatra03],该方法是目前为止效果最好的。
2.纹理映射
如何制定表面映射函数?
通过自然参数化:对于规则物体,如球体、立方体、圆柱体等;
通过手工制定纹理坐标:对于复杂物体,为每一个顶点制定一个纹理坐标。
网格参数化:构造一个从三维模型到平面域的映射。Floater、MIPS、Maillot等方法。
共形参数化和面积保持:
3.纹理滤波
走样:通常情况下,走样是由于信号采样频率过低产生的。因而导致信号的很多高频特征丢失。
解决办法:预先对信号进行滤波,得到一个更低频率的信号。
1. 各向同性的滤波:
构造由一组经过与滤波和重采样图像构成的图像金字塔,这些图像是原图在1/2,1/4,1/8等尺度对应的采样。在光栅化的过程中,计算与期望采样率最相近的图像的序号。
2. 各向异性滤波:
然而,材质转换的问题是它有时候会带来过模糊。
几种高级纹理应用
1.体纹理
与二维图像纹理相对,通过三维体素定义纹理。需要为纹理到物体的映射创建一个三维参数化。
利用纹理来影响以下参数:
表面颜色:普通纹理;
表面法向:凹凸贴图(Blinn 1978);
几何:移位贴图;
光源辉度:环境贴图(Bilinn 1978).
2.凹凸纹理
用纹理改变表面法向:并不改变表面的实际形状,只是在渲染的时候好像形状改变了。
把纹理当成单通道高度方程,由实际纹理图中的导数计算法向量。
但是,凹凸贴图不能产生侧面轮廓效果,它不支持自遮挡或者自阴影。
3.位移贴图
利用纹理图真实地移动曲面点,在确定可见性之前,必须先对几何进行移位。而且必须再预处理时进行,而不是在硬件渲染时。
View-Dependent Displacement Mapping(VDM):视点无关位移贴图
1.高质量结果和丰富的视觉效果:
渲染了和表面细观结构相关的所有主要效果,包括自阴影、自遮挡、侧面轮廓和几何细节。
2.高度场的实时渲染,高帧率。