收藏 分享(赏)

纹理贴图.ppt

上传人:fmgc7290 文档编号:8311896 上传时间:2019-06-19 格式:PPT 页数:135 大小:7.36MB
下载 相关 举报
纹理贴图.ppt_第1页
第1页 / 共135页
纹理贴图.ppt_第2页
第2页 / 共135页
纹理贴图.ppt_第3页
第3页 / 共135页
纹理贴图.ppt_第4页
第4页 / 共135页
纹理贴图.ppt_第5页
第5页 / 共135页
点击查看更多>>
资源描述

1、Chapter 5. Texturing 纹理贴图,金小刚 Email: http:/ 浙江大学CAD&CG国家重点实验室,“All it takes is for the rendered image to look right” Jim Blinn,纹理贴图是一个用图像、函数或其它数据源来改变表面在每一处的外观的过程。例如,我们不必用精确的几何去表现一块砖墙,而只需把一幅砖墙的图像贴到一个多边形上。除非观察者非常靠近墙,否则我们并不会觉得缺少几何细节(例如发现砖头和泥浆在同一表面上)。既节省了大量的造型工作量,也节省了内存空间,加快了绘制速度。,并非由于缺少几何细节的缺陷,但是,贴了纹理

2、的砖墙还会出现并非由于缺少几何细节而出现的不真实的缺陷。但是:砖是发亮的(shiny),但是泥浆不是。但我们会发现砖和泥浆同样发亮。为了生成更真实的效果,我们还需要一张镜面高光纹理贴图。但是:砖不是平的,其表面通常是粗糙的。我们还需要凹凸纹理(Bump mapping),广义纹理贴图 (Generalized Texturing),纹理贴图可看成是一种有效的改变物体表面属性的一种方法。颜色、高光、凹凸、反射、透明度等等都可采用纹理贴图。从贴图图像中取出相应的值代入光亮度计算方程。,单个纹理的广义贴图流水线。 采用该复杂流水线的原因:每一步都可给用户提供有用的控制,砖墙纹理贴图的流水线,投影函数

3、(Projection function),投影函数把三维空间点转化为纹理坐标。常用的投影函数:Spherical, Cylindrical, Planar Projections, 参数曲面的(u,v)映射其它:如根据表面法向来确定6个平面投影方向,不同的纹理投影,spherical,cylindrical,planar,(u,v),应用,应用,应用,不同的纹理投影可以应用于一个物体,即时(on the fly)投影,在实时绘制中,投影函数常常在造型阶段应用,然后把纹理坐标记录在顶点上。也可即使计算:如OpenGL的glTexGen函数可提供不同的投影函数,然后让图形加速卡即时计算投影。On

4、 the fly投影的优点:纹理坐标不需要送到图形卡,节约传输带宽。,纹理投影时会带来畸变,艺术家经常通过人工交互方法把模型分解成接近平面的碎片。,多个小纹理拼成的大纹理(雕塑模型),多边形网格模型在纹理空间的展开,纹理坐标的形式,纹理坐标有时表示成三个坐标(u, v, w)的形式,其中w为投影方向的深度。如医学图像数据。有些系统把纹理坐标表示成四个坐标(s, t, r , q)的形式,其中q为齐次坐标,可用于聚光灯效果。每个纹理映射可以有自己的纹理坐标 (Muti-texturing),对应函数(Corresponder Function),对应函数把参数空间的值转化为纹理空间的位置。第一种

5、对应函数: 用API选择一部分纹理(子纹理)进行纹理映射。另一种对应函数:用矩阵变换。由于OpenGL支持4X4矩阵操作,任何API的应用层都可采用这类变换,如平移、旋转、比例变换、错切等,超出0,1)纹理空间怎么办?,对应函数还控制纹理空间超出0,1)时的处理方式OpenGL中这类对应函数称为“wrapping mode”Direct3D中这类对应函数称为“texture addressing mode”,处理上述问题的常用对应函数,wrap (DirecX), repeat (OpenGL), or tile: 纹理图像在表面重复。例子:地上的大理石贴图mirror: 纹理图像在表面重复,

6、 但每隔一幅进行翻转(flipped)。这样在纹理的边界处,纹理可以保持连续。clamp (DirectX) or clamp to edge (OpenGL): 把0,1)范围之外的进行截断。截断到0,1)内的半个纹素。border (DirectX) or clamp to border (OpenGL):参数范围在0,1) 之外的用单独定义的边界颜色或把纹理的边作为边界。用于在表面上印花样,地形绘制中相邻纹理的缝合。截断到0,1)外的半个纹素。,例子,repeat mirror clamp border,实时绘制中隐含的对应函数,根据纹理图像的大小,隐含的对应函数把(u, v)映射到纹理

7、图像的纹素(texel)位置。采用(u, v)的好处在于,对于不同分辨率的纹理图像,其存贮在顶点处的(u, v)值是相同的。即使改变纹理图像的大小,其(u, v)值不需要改变。,三维纹理,三维纹理的优点是可以避免二维纹理中可能出现的畸变和接缝问题。如木纹、大理石纹理等。三维纹理的合成方法:噪声函数。由于计算噪声函数的代价,通常预先算好空间Lattice点的值,其它地方进行插值。,实时三维过程纹理例子,Combine Function or Texture Blending Operations,大部分实时系统允许用户选择纹理和表面粘合方式,这些方法称为Combine Function 或 Te

8、xture Blending Operations:Replace: 把原来表面的颜色替换为纹理的颜色Decal(印花):与替换类似,但是若纹理中包含Alpha值,则用它与表面的颜色进行混合。Modulate(调节):把表面的颜色与纹理颜色相乘,Image Texturing,在硬件图形加速卡中,纹理图像的大小经常为2m2n(或者2m2m)的纹素,其中m和n为非负整数。不同的图形卡有不同的纹理大小上限。若投影得到的象素数目比原始纹理大,则需要把纹理图像放大(magnification);若投影得到的象素数目比原始纹理小,则需要把纹理图像缩小(minification);,纹理放大,一幅3264

9、的纹理应用到一矩形,非常近看。左图采用最近领域滤波,即对每个象素选择最近的纹素。右图采用最近四个纹素的双线性插值,块状效果明显,质量差,锯齿状消失,质量好,双线性插值(Bi-lnear Interpolation),纹理缩小,当纹理图像缩小时,多个纹素可能覆盖一个象素单元。为了得到每个象素正确的颜色,应该综合考虑影响该象素的那些纹素。,棋盘格纹理多边形通过一行象素,显示多个纹素可影响单个象素,1. 点采样(Nearest neighbor),2. Mipmapping,3. 求和面积表(summed area table),实时系统中的解决方法,最近邻域法:选择在象素中心可见的纹素。但会引起严

10、重的走样现象,见上图。当这类表面相对视点移动时,走样现象更加明显,称为时间走样 (temporal aliasing) 。双线性插值:效果仅比最近邻域法稍好,也会引起较严重的走样现象。纹理反走样算法的基本思想:对纹理进行预处理,建立多个纹素覆盖单个象素的快速逼近计算的数据结构。这样,一个采样点可以检索出一个或多个纹素的效果。 在实时绘制应用中,这些算法在执行时具有固定的时间和资源。,Mipmapping,Mipmapping是纹理反走样最受欢迎的方法。目前,很多图形加速卡支持该功能。Mip: 表示multum in parvo, 拉丁语的意思是“很多东西在一个小的地方”。思想:在绘制之前,把原

11、始纹理图像进行重复滤波,生成多幅小纹理图像。,金字塔结构,Level 0,Level 1,Level 2,1,1/4,1/16,downsample直到子纹理的任一维为一个纹素为止,d轴,构造高质量Mipmap的两个重要元素,好的滤波。常用方法为把22的象素进行平均得到Mip值。但因采用的是Box滤波,可能是最差的滤波器,会导致较差的结果(走样)。较好的滤波器:Gaussian, Lanczos, Kaiser。Gamma校正:如果忽视Gamma校正,会导致得到的Mipmap纹理图像的亮度与原始图像不同。,如何检索Mipmap结构,一个屏幕象素覆盖了纹理的一块区域。为了检索,我们需要找出大致多

12、少纹素影响该象素。,主要有两种方法计算d (OpenGL中称为,也称为层次细节) :1。采用由象素单元构成四边形的长边2。采用四个偏导 中绝对值的最大值进行度量。每个偏导表示纹理坐标相对于屏幕坐标变化量的度量由于Mipmapping是硬件支持的一个标准项,具体计算方法可参考相关参考书。,计算坐标d的目的是为了决定在mipmap金字塔轴采样的位置。通过三元组(u, v, d)来检索mipmapd的意义类似于纹理层。 d不是一个整数,其分数部分表示对应象素到纹理层 的距离。我们对纹理层 和 进行采样。先用(u, v)对纹理层 和 进行双线性插值采样, 然后再用d 对这两个采样值进行线性插值。整个过

13、程称为三线性插值。,Mipmap检索中的控制参数,在d坐标上的一个控制参数为Level of Detail Bias (LOD Bias)。该偏移量加到d值上,用来影响纹理的精锐度(sharpness)。如果我们把d坐标沿着金字塔轴往上移,则纹理看起来更模糊一些。根据纹理的类型和应用的需要,我们可以选择不同的偏移量。当图像看起来较模糊时,可选择负的偏移量;当图像走样较严重时,可选择正的偏移量。通常,当贴了纹理的表面在移动时,应选择较大的偏移量以避免时间走样。,Mipmap的缺陷,过于模糊现象(overblurring): 假设象素单元在v 方向覆盖很多纹素,但u方向覆盖的纹素很少(这在我们沿着

14、边看一个贴了纹理的表面时经常发生)。甚至,应该是一个方向放大,另一个方向缩小。但在Mipmap中得到的是正方形纹理区域,而不可能得到长方形纹理区域,而我们选择的是最长边,故结果看起来过于模糊。,Ripmapping,克服过于模糊现象的一个方法是Ripmapping(HP公司用的词)。其原理是把mipmap的思想推广,允许长方形区域进行下采样。采用四个坐标检索纹素: (u, v)用来检索子纹理,其它两个用来检索Ripmap数组。需要用四个子纹理进行插值。,Ripmap结构,从左下角到右上角的对角线子纹理构成mipmap子纹理,求和面积表(Summed-Area Table),首先建立一个与纹理大

15、小相同的数组,但其包含的颜色的位数精度更高(例如,红、绿、篮分量的位数为16bits或者更高)。在数组的每个位置中,计算并存贮由相应纹素和纹素(0,0)构成的矩形区域内的所有纹素的和。在纹理贴图时,象素单元在纹理空间的投影由一矩形构成。通过读取求和面积表的数据来决定该矩形的平均颜色,并把该颜色作为象素单元的纹理颜色。,颜色计算,计算公式解释,x和y分别为矩形的纹素坐标,sx ,y为相应纹素的求和面积表的值。分子为包围盒内纹素的和, 分母为包围盒面积。,效果,靠近地平线的直线变的比Mipmap尖锐,Mipmap,求和面积表,但在对角交叉线的中间仍然模糊(同样的问题ripmap也存在), 这是因为

16、当纹理对角看时,产生了一个大矩形,很多不被象素单元覆盖的纹素也一并被计算进去。,讨论,Ripmap和求和面积表属于各向异性滤波( anisotropic filtering)。 能够检索非正方形区域的纹素值,对接近水平和垂直的方向最有效。Ripmap用于1990年代HP公司的高端图形加速卡求和面积表还未见硬件实现。Ripmap和求和面积表都比较耗内存。Mipmap的子纹理只需耗原纹理大小的1/3, 而Ripmap为原纹理大小的3倍,求和面积表至少1倍(精度越高,所需存贮越大)纹理内存比较昂贵,不能随便浪费。,无约束各向异性滤波 (unconstrained anisotropic filter

17、ing),对于当前的图形硬件,进一步改进纹理滤波的最常用方法为重用已有的Mipmap硬件。思路:把象素单元在纹理空间投影的四边形采样多次,然后把采样点加权平均。不用单个Mipmap采样去逼近四边形的覆盖,而是用多个正方形去覆盖四边形。四边形的短边用来决定d(Mipmap中用的是长边), 使得Mipmap采样点中平均的面积变小, 从而变得不模糊些。四边形的长边用来创建一条与长边平行并且经过四边形中心的各向异性直线。,当各向异性比为1:1到2:1之间时,采样两个点。各向异性比越大,则沿轴的采样点越多。,上述机制允许各向异性直线朝任意方向,而不像ripmap和求和面积表那样有限制(水平或垂直)。除M

18、ipmap的纹理内存外,不需要额外的纹理内存。如果图形卡支持双通道体系结构(允许并行获得两个Mipmap采样),则能实时实现2:1各向异性滤波。支持的通道越多,则可用的最大各向异性比越大。NIVIDIA Geforce3:支持8:1各向异性滤波。ATI Radeon 8500:只有在象素单元在纹理空间的投影接近垂直或水平时才执行各向异性滤波。,无约束各向异性滤波例子,Mipmap vs. 各向异性滤波左图为三线性Mipmap, 右图为16:1各向异性滤波,分辨率为640450,采用ATI Radeon硬件。在接近水平线的地方,各向异性滤波提供了更尖锐的结果、最小的走样,纹理高速缓存(Textu

19、re Caching)和压缩,复杂的应用需要相当多的纹理。快速纹理内存的大小与系统有关,但一般的原则时永远不会够。有多种纹理高速缓存技术: 在速度和内存中的纹理数目之间取得平衡。例如:当贴了纹理的多边形离视点较远时,可只载入需要的子纹理。每个系统有它自己的纹理管理工具和性能特点,使用纹理内存的一般原则,尽量使纹理小:不要大于使得纹理需要放大。尽量使得使用相同纹理的多边形成组。采用Tiling或者Mosaicing技术:把一些小纹理拼成一块大纹理,这样可以避免纹理的切换,加快存取的速度。,最少使用(Least Recently Used)策略LRU,把载入图形加速卡内存的纹理设置一上次存取的时间

20、标记。当需要上载新的纹理时,先卸载具有最老时间标记的纹理。DirectX和OpenGL还允许对纹理设置优先级:当两个纹理的时间标记相同时,具有较低优先级的纹理先卸载。从而避免不必要的纹理交换。,上载一幅纹理需要不少时间。在需求驱动的系统中,一幅纹理只有在它所对应的多边形在视域之内时才上载,每帧所需的纹理数目可能相差非常大。若需要在单帧内上载大量纹理,难以保持恒定的帧率。一个解决方法:采用预取(Prefetching)方法。通过预测将来需要的纹理,并预先上载。,Prefetching方法,在飞行仿真和地理信息系统中,图像数据库可能非常庞大。传统方法为把大图像分成小块图像(tiles),使得硬件能

21、够处理。Tanner提出了一种称为Clipmap的数据结构。其原理是把整个数据库看成一Mipmap,但在任何一个特定的视域,只有一小部分低层次的Mipmap是需要的。根据视域对Mipmap结构进行裁剪,得到所需要的部分。,Clipmap方法,通过存取一庞大的图像数据库来进行高分辨率地形纹理贴图。通过clipmap减少一次所需的数据量。,Clipmap例子,纹理压缩,一个直接针对纹理内存和带宽的解决方法是固定速率的纹理压缩(fixed-rate texture compression)。通过硬件即时对压缩的纹理进行解压,所需的纹理内存可减少,从而增加了有效Cache的大小,同时减少了带宽需要。常

22、用图像压缩技术:JPEG、PNG等,但这些方法在用硬件进行解压时代价太高。,S3TC纹理压缩,S3公司开发了一种称为S3TC的纹理压缩技术,被DirectX选为标准(DXTC)。优点:压缩的图像具有固定的大小、每小块可独立编码压缩、解压简单快速。方便调度。给定一幅特定分辨率的图像,我们预先知道其压缩版需要多少空间。这在Texture Caching中非常有用,因为其它具有相同分辨率的图像可以重用该纹理的空间。,压缩的纹理不仅可以节省纹理内存空间,而且对于相同的纹理大小,可提供更高分辨率的图像。例如,对于256256的非压缩纹理,若用4:1的压缩比,则实际可用512512的压缩纹理。有助于减少走

23、样。,DXTC技术,首先把图像分成44的象素块(称为Tile)。对于不透明的图像(没有alpha通道),每个16个象素的Block编码为2种颜色和16个2bits的值。2种颜色表示为16bits (红:5bits, 绿:6bits, 篮:5bits),它们取值为包含象素块颜色范围的两种颜色。给定这两种颜色,编码和解码操作通过把这2种颜色均匀划分,得到另外2种颜色。因而我们有4种颜色可选择。对于每个象素,2bits的值用来选择4种颜色的哪种。每个block:表示为216+16264bits,每个象素为4bits。对于每个象素为16bits或24bits的原始图像,得到的压缩比为4:1或6:1。,

24、DXTC压缩技术的讨论,主要缺点:是有损压缩,无法恢复压缩前的图像。只能用4种不同颜色来表示16个象素的颜色。在实际应用中,该压缩技术基本能接收。应用于Normal map时,效果不好。,多重纹理绘制 (Mutipass Texture Rendering),在图形学理论中,所有的照明方程因子是一次计算的,并最终得到一采样颜色。实际上,光照方程的各部分可以在不同的pass分别计算,每个pass是对前一个pass结果的修改。这种技术称为多重绘制技术(multipass rendering)。有很多效果可通过多重绘制来得到的,如:运动模糊、景深、反走样、软影、平面反射等等。目标:用更多精致的表面光

25、照方程。,与软件绘制相比,硬件加速卡能显著提高绘制的性能。但是,由于硬件的限制,硬件绘制不能在单重绘制内提供任意复杂的光照明模型。在单重绘制中,纹理通过Replace(替换)、Decal(印花)和 Modulate(调节)等操作改变表面。在纹理贴图流水线结束时,纹理和表面构成一碎片(fragment): 颜色信息(RGBA)和几何信息(Z depth),并把结果应用于象素。在不透明物体的Z buffer绘制中,根据该碎片可见与否,决定是替换象素中的数据还是丢弃。,多重绘制中碎片的操作函数,add。把上重绘制计算的象素颜色与碎片颜色相加或相减。blend 。上重绘制计算的象素颜色与碎片颜色通过A

26、lpha值相混合。 Alpha值可来自存贮的象素信息、纹理、恒定的Alpha值或者顶点(把顶点的Alpha值进行插值),多重绘制的基本思路是:每重绘制计算光照明方程的一部分,并采用frame buffer存贮中间结果。通过图像合成等技术,可以计算得到任意复杂的光照方程。若要使得一个绘制系统在各种硬件平台运行,多重绘制是非常有用的。例如,早期的Quake III引擎用了10个pass。,Quake III的10个pass,(Passes 1-4: accumulate bump map) Pass 5: diffuse lighting Pass 6: base texture (with sp

27、ecular component) (Pass 7: specular lighting) (Pass 8: emissive lighting) (Pass 9: volumetric/atmospheric effects) (Pass 10: screen flashes)对于最快的计算机,可以用足所有的pass。如果图形加速卡不能保持恒定的速率,括号内的pass可以省略。例如,去掉凹凸纹理pass把光照模型减到6个pass。虽然图形质量会降低,但能保证实时。,多重纹理贴图(muti-texturing),目前的大部分图形硬件支持在单重绘制中应用两个或多个纹理,该过程称为muti-tex

28、turing。,减少绘制pass允许更复杂的Shading Models例如:假如我们要用一个表达式为ABCD的光照明模型,每个变量表示不同的颜色纹理值。Multipass:先结合AB(2 pass),再加C(下一个pass),得到(ABC),但无法再结合D。Multitexturing:第一重pass计算AB,第二重pass计算CD,然后在颜色buffer中把这两个结果相加。,多重纹理贴图的优点,纹理动画(texture animation),应用于表面的纹理不一定是静态的,可以是逐帧变化的视频。纹理坐标也不一定是静态的。如用环境映照模拟金属质感、用单幅瀑布图像模拟动态瀑布等。还可以对纹理坐

29、标进行线性变换。,纹理贴图方法,前面讨论的是纹理贴图的基本思想,现在我们讨论纹理贴图的各种形式(不仅仅是把简单的颜色图像粘到物体表面上):1。纹理贴图中的Alpha混合2。基于环境映照的反射3。采用凹凸纹理的粗糙表面模拟,Alpha mapping,Alpha值可以用来模拟很多有趣的效果。一种效果为印花(decaling),比如要把一朵花的图像印到一个茶壶上。印上去的不是整幅图像,而只是花的部分。另一个应用是用来模拟剪纸(cutout)效果。比如通过把一颗树的纹理贴到一个多边形上来模拟树。但是,当视点旋转时,由于纹理树没有厚度,会出现缺陷。一个解决方法为拷贝得到另一个多边形并沿树干转90度,构

30、成一颗交叉树(cross tree)。,cross tree,纹理树,alpha通道,交叉树,在实时绘制中,若提供alpha blending效果,则需要把绘制流水线进行稍微扩展。在测试和替代Z缓存的值之前,需要先测试alpha的值。若alpha的值为0,则该象素不需要做任何事情。若不进行该测试,虽然树的背景不会影响象素的颜色,但贴了树纹理的多边形会影响z的值,从而导致绘制错误。把alpha blending和texture animation相结合,可以生成很多生动的特效,如闪动的火炬、植物生长、爆炸等。,Light mapping,对于静态的光源,物体表面的漫反射部分从任何角度看都是相同的

31、。由于这一与视点无关的性质,这部分光对表面的贡献可以用纹理附加到表面上来刻画。通过预先单独计算的捕获光照效果的纹理,还可以实现类似Phong Shading的效果。,如果光照一直不变,或者只是改变整体的亮度,则可以在造型阶段把light texture与表面的材料纹理相乘,从而只需用单个纹理。但把light texture单独分开具有如下优点: (1). Light texture通常是低分辨率的。与表面的其它纹理相比, light texture的分辨率较低,存储空间小。可以即时修改或交换(swap) light texture。通过纹理动画技术,可以模拟聚光灯在墙上移动的效果。(2). 对

32、于动态的光照,light map可以即使计算。,Light map还可用于生成幻灯投影机的效果,光泽贴图(Gloss Map),并非所有物体的表面光泽度都是相同的。比如金属表面的腐蚀效果等。这些效果可以用光泽贴图来模拟。所用的纹理称为gloss map。 gloss map:改变物体表面镜面高光分量贡献的纹理。物体表面必须分割得足够细以反映高光的变化。光照方程: ;其中:漫反射颜色纹理的RGB值;:插值得到的漫反射光亮度值;:插值得到的镜面高光光亮度值;: gloss map值。它调制的是高光的亮度!会聚指数没有改变。,Gloss map例子:金属板,加了光泽图以产生腐蚀效果,环境映照(Env

33、ironment Mapping),Environment Mapping (EM)也称reflection mapping,是一种在曲面上生成近似反射效果的简单但非常有效的方法。最早由Blinn和Newell提出。所有的EM方法从视点到反射体某点P的一根光线e开始,根据P点的位置和法向n,计算得到反射光线r。不像光线跟踪那样去真正计算反射光线的最近交点, EM方法用该反射光线作为一个索引,得到EM中相应的环境纹理。,EM示意图,P,EM算法的主要步骤,载入或生成一幅表示环境的二维图像(环境图,Environment Map);对于包含反射物体每个象素,计算相应点的表面法向;根据视线向量和法向

34、,计算反射向量;用反射向量计算环境图索引,表示该反射方向的物体;用环境图相应的纹素来计算当前象素的颜色。,常用的投影函数,Blinn和Newell的方法Greene的立方体环境映射技术Heidrich和Seidel的抛物面(paraboloid)方法,Blinn和Newell方法,1976年, Blinn和Newell提出了第一个环境映射方法。对于环境映射的每个象素,首先计算反射向量,然后把该向量变换到球面坐标(, )。其中为经度,变化范围为 0, 2); 为纬度,变化范围为0,) ; 假设r =(rx, ry, rz)为归一化的反射向量,则(, )计算公式如下:,反射光线计算,P,其中e为单

35、位化的视线矢量,n为单位化的法向,左侧的球面展开为右侧的矩形(环境图),环境映照示意图,为了存取环境纹理,我们把球面坐标(, )变换为0,1) 。在(u, v)纹理空间中, u对应于经度, v对应于纬度。一些关键点:,Blinn和Newell方法的缺点,虽然Blinn和Newell方法简单,容易实现,但该方法有如下缺点:1。在 = 0处,存在一条边界2。纹理图在两极处会聚成一点故选取的环境图像在垂直边的接缝处必须相同,并要避免两极处的畸变。,上述实现方案是per-pixel 而非per-vertex,故不适合应用于实时图形。对于实时应用,我们可只在顶点处计算索引坐标,而在三角形的其它处进行插值

36、。但若有三角形的顶点穿过两极时,会发生错误(难以避免)。三角形端点跨越纹理图的接缝时,也会出现错误。例如,假设有一条短线,其u坐标分别为0.97和0.02,则会插值得到0.96, 0.95, , 而实际上应是0.98, 0.99, 然后0.0, 0.01, 0.02。一个解决方法:当两个坐标差的绝对值超过0.5时,小的纹理坐标加1.0。这样,上述例子变成了0.97到1.02的插值。有些API直接支持解决接缝问题,如DirectX支持“texture wrapping”的解决方案。结论:Blinn方法由于有上述缺点应用有限。,立方体环境映照 (Cubic Environment Mapping)

37、,立方体环境映照由Greene于1986年提出,该方法速度快、适用性强,是图形硬件中最受欢迎的方法。立方体环境映照通过把摄像机置于立方体的中心,然后把环境投影到立方体的面上。立方体上的图像作为环境图。在实用中,场景需要绘制6次(立方体的每个面一次),摄像机置于立方体的中心,以90度的视角看立方体的面。,Greene环境映照示意图,左边的立方体展开为右边的环境图,一幅典型的环境图,立方体环境映照 vs Blinn方法,可以由任何绘制程序以比较简单的方式生成,而且可以实时生成。(而Blinn和Newell的方法需要球面投影)立方体环境映照具有更好的非均匀采样特性。(与赤道处相比,Blinn和New

38、ell的方法在两极处有过多的采样纹素),Xbox游戏的一幅静态图像,Project Gotham Racing。为了模拟车身上的动态反射效果,在车位置处逐帧建立一立方体环境映照。,例子,面的选取和纹理坐标计算,反射向量(并不需要单位化)决定了用立方体的哪个面。对应的面由反射向量中绝对值最大的分量来决定。例如,若反射向量为(-3,2,5.1,-8.4),则选择-Z面。剩下的两个坐标除以最大的绝对值分量,得到值域范围为-1,1的两个值,再把它们变换到0,1以便于计算纹理坐标。例如坐标(-3,2,5.1)变换为(-3.2/8.4+1)2, (5.1/8.4+1)/2) = (0.31,0.80),讨

39、 论,立方体环境映照与Blinn方法一样,也是Per-Pixel计算的。如果两个顶点反射到不同的立方体面上,则需要在它们之间正确插值。一个解决方法为把问题多边形在EM立方体边界处分割,使得所有的插值在一个立方体面上。现代的硬件解决方法:把反射向量插值和面的计算放于加速卡上。这样EM查找表可以Per-Pixel计算。(缺点是需要专用硬件)。立方体环境映照没有奇异情况,且与视点无关(可以用于任何视线方向)。,Sphere Mapping,最早由Williams在1983年提出,是第一个商用图形卡支持的EM方法。纹理图像通过正投影观察一个纯反射球面的外形来得到,故得到的纹理称为球面图(sphere

40、map)。生成真实环境球面图的一个方法为对一个发亮的球面(shiny sphere)拍照。得到的圆形图像有时也称为Light Probe(光探测器), 因为它反映了球面位置的光照情况。,Sphere mapping实例,该图像为Grace Cathedral的内部, San Francisco,一幅光探测器(light probe)图像用作球面环境映照。,虚拟场景的球面图纹理可以通过光线跟踪来生成,或者通过把立方体环境映照图变形来得到。,光的环境映照,整个周围场景的环境映照。,无环境映照图,参考标架,球面图有一个生成纹理的参考标架。图像通过朝世界坐标系的f单位轴观看,u为图像的向上单位矢量,h

41、为水平单位矢量。从而得到基矩阵:为了存取球面图,首先用上述矩阵把法矢量n和视线矢量e从当前眼睛坐标系变换到球面图参考标架,得到n和e。存取球面图纹理的反射矢量为:,反射球把整个环境显示在球的正面,它把反射矢量映射到该球二维图像上的一点。正问题:即给定反射矢量,计算二维图像坐标(u, v)反问题:给定球面图上的一点,如何计算反射矢量?我们需要得到相应球面点的法向,然后计算反射矢量。,在球面图空间,球的法向n为反射矢量r和到眼睛矢量(0,0,1)的半角矢量,其值为这两个矢量的和(rx, ry, rz+1), 对其单位化得到:,如果球位于原点,且半径为1,则单位法向的坐标同时也是点h的位置。我们不需

42、要hz,因为(hx , hy)已经描述了点在球面图像上的位置,它们的值域为-1,1。把它们映射到0,1从而存取球面图,得到纹理坐标:在实用中,上述方程可用纹理矩阵来计算。,讨 论,Sphere mapping在多个方面对Blinn和Newell的方法进行了改进。 Sphere mapping不存在纹理裂缝问题。只在球面图的边处存在奇异情况,但这种情况几乎不会发生,因为所有的有效纹理位置位于纹理园的内部。由于纹理坐标可以用纹理矩阵来计算,该技术可以在任何支持纹理映射的图形硬件上实现。Sphere mapping的缺点。(1). 在球面图上两个点之间的移动不是线性的。越靠近球面图边界处,误差越严重

43、。 (2). 球面图只对单个视域方向有效。即使视域方向发生改变,应用的还是相同的映射。,抛物面映射 (paraboloid mapping),Heidrich和Seidel于1999年提出用两个环境纹理来实现抛物面环境映射。其思想与Sphere mapping类似,但用的是两个抛物面。每个抛物面生成一与球面图类似的园形纹理,并覆盖一半球面环境。,反射矢量的延伸线交于物体的中心(两个抛物面的焦点),参数(u, v)计算,与Sphere Mapping类似,反射矢量在抛物面图空间计算。反射矢量的z分量用来决定选取两个纹理中的哪个。对于正面纹理,参数(u, v)的计算方法如下:,抛物面纹理映射可以用

44、支持投影纹理坐标变换和插值的硬件来实现。纹理变换矩阵为:穿越接缝处的插值通过获取两个抛物面纹理来实现。 主要缺点:生成纹理图较困难。可以通过图像变形或光线跟踪来生成。,采用环境映照的光照明 (Lighting Using Environment Mapping),环境映照的一个重要用途为生成镜面反射和折射。我们前面讲过,因为Gouraud Shading只在顶点处计算光照效果,所以会丢失高光。环境映照可以通过纹理上的光照来克服该问题。通过该方法,我们可以用固定的花费模拟任何数量光源的高光(on per-pixel basis)。而且光源也可以不一定是点,可以是有大小和形状的。,光照环境映照,整

45、个周围场景的环境映照。,Per-pixel的镜面高光,用环境映照实现的递归反射,物体的递归反射可以用环境映照来实现。,环境映照应用中的绊脚石,对于平坦的表面效果较差。这是因为平坦表面的反射光线通常只有几度的变化,从而导致EM中的一小块纹理映射到相对较大的表面,纹素被过分放大。对于平坦表面,若采用正投影,情况更加糟糕。这是因为所有的反射光线相同,表面得到的颜色为一种。这时,应采用其它平面反射方法。,Diffuse, Gloss和Reflection Mapping的结合,各种纹理效果可以相结合。一个例子是把反射映射、光泽和漫反射颜色贴图相结合。这时光照模型为:,其中,:漫反射颜色纹理的RGB值;

46、:插值得到的漫反射光亮度值;:反射映射的RGB镜面高光值;:单色光泽贴图,它用来调制高光的亮度。一个纹理有四个通道,RGB颜色用来作为漫反射颜色纹理,alpha通道用做光泽贴图强度。,梨子实例,光照模型计算流程,需要两个纹理计算stage。每个纹理stage可以至多有2个RGB颜色输入和2个Alpha输入。 Stage 1:插值得到的漫反射光亮度和梨皮的RGB纹理相乘。同时输入光泽贴图(alpha通道)。 Stage 2: Stage 1得到的颜色和纹理结果输入到第二阶段。把光泽贴图与反射镜面高光相乘,并与第一项相加得到最终结果。,凹凸纹理贴图(Bump Mapping),凹凸纹理贴图最早由B

47、linn于1978年提出,是一种模拟不平表面(凹凸、皱纹 、波浪起伏等 )的一种方法。,把波浪状的高度场凹凸图像应用于一个球,用Per-Pixel照明绘制。,凹凸纹理可以模拟需要很多多边形才能实现的特征,如衣服的褶痕、动物的肌肉组织等。左图采用Normal map作为bump。,基本思想,凹凸纹理的基本思想是:用纹理去修改物体的法向而不是颜色。物体表面的几何法向保持不变,我们仅仅改变光照明模型计算中的法向。凹凸纹理没有物理意义上等价的操作。,Offset map,在左图中,法矢量n在u和v方向被凹凸纹理上的(bu, bv)值修改,得到n。在右图中,一个高度场和它对shading normal中

48、的影响。,Height-field map,offset vector bump map原理,这种凹凸纹理技术是在每个点存贮两个带符号的值,bu和bv,这两个值对应于法向在图像u和v轴的偏移量。也就是说,这些纹理值用来对垂直于法向的两个矢量进行比例缩放。这两个矢量最终被加到法矢量上,从而改变其方向。这种纹理称为偏移矢量凹凸纹理。,Height-field bump map原理,在高度场凹凸纹理中,单色的纹理值表示高度。因此,白色的纹理表示高的区域;黑色的纹理表示矮的区域。高度场用来生成类似于offset map中的带符号的u向和v向的值。这通过相邻列的差来得到u向的斜率,相邻行的差来得到v向的

49、斜率。,Bump map的缺陷,Per-pixel的凹凸纹理以较低的花费增加了丰富的几何细节。但该方法在侧影轮廓处存在缺陷。这些地方,我们看到的还是光滑的轮廓线,而没有任何凹凸感。 凹凸纹理不会投下自身阴影,从而看起来不真实。(但目前已有一些部分解决方法,如Malzbender在2001 年siggraph的论文“Polynomial texture maps”),其它讨论,对于静态的场景,光照可以(而且应该)进行预计算。例如,如果一个表面没有镜面高光而且光源相对于物体表面不动,则凹凸shading可以只计算一次,然后把结果作为颜色纹理贴图。另外我们讨论中有一个假设,就是纹理是方形的(纹理没有错切)。破坏这个假设可能会出现缺陷。,浮雕凹凸纹理贴图 Emboss Bump Mapping,浮雕凹凸纹理贴图是最早用于实时系统的凹凸纹理贴图技术之一。它借鉴了二维图像处理中的相关技术:首先拷贝高度场图像,稍做偏移,然后与原图相减。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报