深入解析纹理贴图——坐标映射和贴图种类
纹理贴图是将图像信息映射到三角形网格上的技术,以此来增加物体表面的细节,令物体更具有真实感。
作者:STANCH
1.什么是纹理贴图?
纹理贴图是将图像信息映射到三角形网格上的技术,以此来增加物体表面的细节,令物体更具有真实感。
来源:fundamentals-of-computer-graphics-4th
2.坐标映射
我们可以将三维物体上的任意一个点都映射到一个2维平面之上,举一个简单例子,地球仪:
来源:fundamentals-of-computer-graphics-4th
倘若拥有从三维World space到二维Texture space的一个映射关系,那么只需要将每个点的颜色信息即漫反射系数存储在二维的Texture之上,每次利用光照模型进行计算的时候根据映射关系就能查到这个点的漫反射系数是多少,所有点计算完之后,结果就像最左边的screen space之中,整个Texture被贴在了模型之上。
有了纹理,有了映射关系,对渲染结果会有一个非常大提升,因为很多逼真的效果都可以通过纹理的设计得到(当然这属于美术的活儿了)。可以看这样一个有点丑的例子。
来源:计算机图形学【GAMES-101】4、纹理映射(重心坐标插值、透视投影矫正、双线性插值MipMap、环境光遮蔽AO)_纹理映射 局部拉伸-CSDN博客
利用纹理渲染之后,这个独眼怪物丑的更有特点了。
好了,相信到这大家都对纹理映射了有了一个大概的了解,那么有了一张纹理之后,这种映射关系究竟是如何表示的呢?这就要从纹理坐标(UV)说起了。在纹理空间之内任意一个二维坐标都在[0,1]之内。如下图是一个可视化纹理坐标的结果:
来源:计算机图形学【GAMES-101】4、纹理映射(重心坐标插值、透视投影矫正、双线性插值MipMap、环境光遮蔽AO)_纹理映射 局部拉伸-CSDN博客
横轴和纵轴的最大值都为1,为什么整幅纹理图可视化之后是红色和绿色呢?可以将(u,v)坐标的两点想象成红和绿就能明白了。一幅纹理上的任意一点都可以用一个(u,v)坐标来表示(0<=u<=1,0<=v<=1),因此只需要在三维world space中每个顶点的信息之中存储下该顶点在texture space的(u,v)坐标信息,自然而然的就直接的得到了这种映射关系。
来源:fundamentals-of-computer-graphics-4th
3.投影函数
投影函数(projector function)的功能就是将空间中的三维点转化为纹理坐标,也就是获取表面的位置并将其投影到参数空间中。
在常规情况下,在美术建模过程中,已经投影结果把存储在模型顶点数据中。
各种常见投影的不同要点:
- 球形投影(The spherical projection)。球形投影将点投射到一个中心位于某个点的虚拟球体上,这个投影与Blinn与Newell的环境贴图方法相同。
- 圆柱投影(Cylindrical projection)。与球体投影一样,圆柱投影计算的是纹理坐标u,而计算得到的另一个纹理坐标v是沿该圆柱轴线的距离。这种投影方法对具有自然轴的物体比较适用,比如旋转表面,如果表面与圆柱体轴线接近垂直时,就会出现变形。
- 平面投影(The planar projection)。平面投影非常类似于x-射线幻灯片投影,它沿着一个方向进行投影,并将纹理应用到物体的所有表面上。这种方法通常使用正交投影,用来将纹理图应用到人物上,其把模型看作一个用纸做的娃娃,将不同的纹理粘贴到该模型的前后。
来源:https://blog.csdn.net/qq826364410/
4.映射函数
映射函数的作用是将参数空间坐标转换为纹理空间位置。
我们知道图像会出现在物体表面的(u,v)位置上,且uv值的正常范围在[0,1)范围内。超出这个值域的纹理,其显示方式便可以由映射函数(The Corresponder Function)来决定。
在OpenGL中,这类映射函数称为“封装模式”,在Direct3D中,这类函数叫做“寻址模式”。最常见的映射函数有以下几种:
- 重复寻址模式,wrap (DirectX), repeat (OpenGL)。图像在表面上重复出现。如果纹理坐标超过1,那么整数部分将会被舍弃,直接使用小数部分进行采样。这样的结果是纹理将会不断重复。
- 镜像寻址模式,mirror。图像在物体表面上不断重复,但每次重复时对图像进行镜像或者反转。
- 夹取寻址模式,clamp (DirectX) ,clamp to edge (OpenGL)。夹取纹理寻址模式将纹理坐标夹取在[0.0,1.0]之间,也就是说,在[0.0,1.0]之间就是把纹理复制一遍,然后对于[0.0,1.0]之外的内容,将边缘的内容沿着u轴和v轴进行延伸。
- 边框颜色寻址模式,border (DirectX) ,clamp to border (OpenGL)。边框颜色寻址模式就是在[0.0,1.0]之间绘制纹理,然后[0.0,1.0]之外的内容就用边框颜色填充。
重复寻址模式(wrap):
假设我们要创建一个正方形图元,并将纹理坐标声明为(0.0,0.0)、(0.0,3.0)、(3.0,3.0)和(3.0,0.0)。这时,如果我们设置了重复寻址模式,就可以使纹理在U、V方向都重复三次。
来源:https://blog.csdn.net/qq826364410/
镜像寻址模式(mirror):
在我们创建一个正方形图元,为坐标为(0.0,0.0)、(0.0,3.0)、(3.0,3.0)和(3.0,0.0)。我们设置镜像纹理寻址模式,纹理在U、V方向都重复了三次,并且每一行、每一列都与相邻的行和列成镜像关系。
来源:https://blog.csdn.net/qq826364410/
夹取寻址模式(clamp to edge):
创建一个正方形图元,纹理地址分配为(0.0,0.0)、(0.0,3.0)、(3.0,3.0)和(3.0,0.0)。这时,设置夹取纹理寻址模式,纹理将只使用一次,并且最顶一行和最后一列上的像素颜色会一直延伸到图元的最顶端和最右段。
来源:https://blog.csdn.net/qq826364410/
边框颜色寻址模式(clamp to border):
创建一个正方形图元,纹理地址分配为(0.0,0.0)、(0.0,3.0)、(3.0,3.0)和(3.0,0.0)。这时,设置夹取纹理寻址模式,纹理将只使用一次,并且在纹理坐标超过范围的地方使用一个任意的颜色,也就是边界颜色。
4.纹理贴图的种类
- 漫反射贴图
我们接触最多的应该就是漫反射贴图。漫反射贴图基本上定义了材质的所有表面颜色,没有任何照明或阴影信息。但我们可以使用漫反射贴图作为许多其他纹理类型(如凹凸或镜面反射)的起点,因为颜色通常会随着材质其他方面的变化而在相同区域发生变化。
纹理贴图,来源:Three.js – JavaScript 3D Library
- 法线贴图
如果漫反射贴图为模型提供颜色和纹理,那么法线贴图为您的模型提供深度。
法线贴图硬币,来源:https://www.cgdirector.com/
从上图这个硬币中我们可以直观的看到硬币表面的具有“深度”,但这是计算机提供给我们的“假深度”,“假深度”是什么意思呢?
在下图中,球体应用了法线贴图。看到什么不同了吗?看一下球体的轮廓和阴影,看看它们有多光滑吗?球体的表面看起来足够凹凸不平,但轮廓只是一个普通的球体。这就是“假深度”。
来源:Wikipedia
法线贴图使模型的表面看起来凹凸不平,而实际上它仍然是一个球体。
它只是使得当表面捕捉到光线时,它以一种使其看起来凹凸不平的方式捕捉到光线。但因为那里没有实际的几何体,所以轮廓和阴影看起来就像它真正的样子,一个简单的球体。
- 凹凸贴图
凹凸贴图几乎是老式的法线贴图,现在很少被使用了。
凹凸贴图 – 法线贴图,来源:Unity
凹凸贴图是使用从黑到白的 256 种颜色渐变来表示高度值的图像。
黑色意味着它是凹进去的,白色意味着它是凸出来的。灰色意味着纹理的表面与模型处于相同的高度,这意味着它不会改变任何东西。
来源:Featured Member: ParkParkin (Dmitry Parkin) - ZBrushCentral
凹凸几乎被法线贴图取代,因为它们比凹凸贴图可以存储更多信息。凹凸贴图只能真实显示高度信息;而法线贴图也可以显示角度信息。这意味着与凹凸贴图相比,法线贴图可以捕获更真实的细节描述。
●位移贴图
法线贴图为模型提供假深度,位移贴图为模型提供实际深度。位移贴图可以使曲面的几何体产生位移,它的效果与使用位移修改器相类似,而法线贴图的工作原理是仅通过改变曲面法线来创建曲面细节的错觉。
来源:https://www.letourneaudesign.com/texture-guidebook
通过建模软件手工建模微小的细节是一件缓慢且痛苦的事情,如果使用位移贴图可以快速实现模型上大量实际几何细节。
来源:CGCookie
●高光贴图
用来表现物体对光照反应的材质。当光照到塑料,布料,金属上时,所展现出来的高光部分和高光表现是不一样的。通过高光贴图上的颜色值来表现高光的强度,值越大表示高光反射越强。
来源:常用各种纹理贴图简析(AO, Normal等) - 知乎
●AO贴图
在PBR中计算光照的时候,我们一般直接通过采样IBL来得到环境光,这个环境光是该点上一个半球上的积分。
但是因为自身的之间会有凹凸,在凹陷的地方,环境光会被周围给遮挡,所以看起来并不是那么亮,通过AO贴图我们可以让调整环境光的大小,从而达到更真实的效果。
来源:常用各种纹理贴图简析(AO, Normal等) - 知乎
参考:
常用各种纹理贴图简析(AO, Normal等) - 知乎
计算机图形学七:纹理映射(Texture Mapping)及Mipmap技术 - 知乎
3D图形学(4):纹理贴图-CSDN博客
关注Mapmost,持续更新GIS、三维美术、计算机技术干货
Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)