本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件,请勿转载
纹理:物体表面的细小结构
可以较好地表达模型表面的细节,而无需考虑其它(几何和材质)细节,使景物更真实
使用纹理需要考虑的三个问题:
- 怎样才能产生纹理效果;
- 如何定义纹理;
- 如何进行映射
纹理概述
- 图像纹理:将纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应纹理图案中相应的颜色。
- 函数纹理:用数学函数定义简单的纹理图案;用数学函数定义随机高度场,生成表面粗糙纹理。
映射
把纹理图象值映射到三维物体表面的技术
- 图像纹理:建立二维纹理坐标与三维物体坐标之间的对应关系;
- 几何纹理:如何扰动法向量。
三个空间
- 纹理空间:纹理通常定义在二维空间 ( u , v ) (u,v) (u,v)中的一个矩形区域;
- 景物空间:物体表面是在三维空间 ( x , y , z ) (x,y,z) (x,y,z)中的一个曲面,或参数空间$ (s∈[0,1],t∈[0,1])$,为二维空间的一个矩形区域;
- 图象空间:图象空间依赖于显示器的分辨率,例如, N x ∈ [ 0 , 1024 ] N_x∈[0,1024] Nx∈[0,1024], N y ∈ [ 0 , 768 ] N_y∈[0,768] Ny∈[0,768],也是二维空间的一个矩形区域。
二维纹理映射
表示和获取
颜色纹理:实际上是二维数组,元素是一些颜色值(纹理元素或纹理像素)
- 每个纹理像素在纹理空间中都有一个唯一的地址;
- 该地址可被认为是一个列和行的值,分别由u和v来表示
定义方法:
-
连续法——函数纹理
- 用数学函数解析地表达,函数的定义域就是纹理空间。
-
离散法——图像纹理
- 用各种数字化图像来离散定义;
- 纹理空间坐标系中表示光亮度值的矩形数组:
- 程序生成;
- 扫描输入;
- 通过交互式系统绘制得到。
-
合成纹理
-
根据给定一个图像示例,合成一种新的纹理
-
在计算机图形学中,纹理合成方法可分为两类:
-
基于像素点的纹理合成方法;
主体思想:逐像素点合成新的纹理图像,其中每个像素点由其周围的像素决定(例如33,55),根据这些周围像素点从原始图像中以最相似的原则从给定的图像示例搜索获得的像素点作为所需的像素点。
-
基于图像块的纹理合成方法。
基于像素点的纹理合成方法计算代价大,通过图像块代替单个像素点的方式,改进纹理合成方法
选择图像块的原则类似与选择像素点的原则,即仍然基于最相似原则
-
-
映射
纹理映射的实质是建立两个映射关系
- 从纹理空间到景物空间的映射;
- 再到图像空间的映射。
映射方法
- 建立物体空间坐标 ( x , y , z ) (x,y,z) (x,y,z)和纹理空间坐标 ( u , v ) (u,v) (u,v)之间的对应关系;
- 对物体表面进行参数化,反求出物体表面的参数后,根据 ( u , v ) (u,v) (u,v)得到该处的纹理值,并用此值取代光照明模型中的相应项,实现纹理映射;
- 圆柱面映射和球面映射是两个经常使用的映射方法。
圆柱面映射:
球面映射:
滤波
-
多个纹理元素只覆盖一个像素单元
-
最简单的解决方法是点取样,使用最邻近纹理元素:
-
把当前象素单元的最中心所对应的纹理空间的点的值,作为象素的纹理值;
-
这种方式会导致严重的走样。
-
-
多个像素只覆盖一个纹理元素
-
对纹理进行放大,由于采样区域的局限性,所获取的纹理样本通常为小块纹理,将导致映射后表面纹理模糊不清;
-
若采用重复映射技术,则可能出现表面纹理接缝走样等问题。
-
为了得到比较合理的像素颜色值
- 线性滤波器;
- Mipmapping(各向同性滤波)
- Ripmapping(各向异性滤波)
几何纹理
图像纹理不能模拟形状的变化
1978年,Blinn提出产生几何纹理,模拟凸凹不平的物体表面的方法(凹凸映射,Bump mapping)
基本思想
生成图像时,对曲面的法向量进行扰动。
- 对景物表面各采样点位置作微小的扰动,改变表面的微观几何形状,引起景物表面法向量的扰动。
- 景物表面光亮度是法向量的函数:法向量的扰动导致表面光亮度的突变,产生表面凹凸不平的真实效果。
几何纹理的实现
- 扰动后的法向量单位化,用于计算曲面的明暗度,产生凹凸不平的几何纹理;
- 几何纹理函数:用二维数组记录各象素的值,图案中较暗颜色对应较小F值,较亮颜色对应较大F值;
- F的偏导数的计算,可以用中心差分实现。