PISCOnoob

导航

纹理的其他使用

写在前面:

本文章为个人学习笔记,方便以后自己复习,也希望能帮助到他人。

由于本人水平有限难免出现错误,还请评论区指出,多多指教。

部分图元和素材来源于网络,如有侵权请联系本人删除。

参考资料与链接会在文章末尾贴出。

=======================================================================

之前已经提过,纹理可以作为贴图“贴”在模型表面上,为模型增加颜色等细节,而不必像使用光照模型一样为每一个点计算它的颜色。简单看来纹理就相当于一张图片,实际上,纹理有着更深层的应用。

我们可以用下面这张纹理贴在墙面的模型上增加细节。

当我们采样纹理,实际上是在此纹理上查询某点(u,v)的RGBA值,说到底,其实纹理上存储的是一系列数据。所以纹理可以理解为可供着色器读写的结构化存储形式,是一个容器。

那么一个2D纹理,实际上就相当于一个三维数组ijk,ij对应的是像素点,k就是对应像素点的RGBA值。纹理除了包含存储的信息外,还包含了纹理采样的设置。

这么做可以大大节省其他流程的工作量,比如建模,用贴图来提升表现细节,即便在摄像机靠近时可以明显看到几何细节的丢失,但大部分情况下,这种trade off是值得的;此外还有之前提到的,用查询来替代实时计算,用空间换取时间。

Bump Map(凹凸贴图)/Normal Map(法线贴图)

在游戏里有没有注意过墙壁和地面,这些路面凸起的石块真的是一块块建模出来的吗?实际上只是法线贴图为一个平面模型增加细节后的效果,之前学习光照模型的时候,公式(Cdiffuse =( Clight *Mdiffuse )max(0,dot(N,L)))中N是模型的法线,法线贴图则改变,或扰动了模型本来的法线,代入光照模型着色后模拟出石块路面凹凸不平的效果。法线贴图“伪造”出几何物体表面细节的应用大大地提高了渲染的效果的真实感。

 

下图即为法线贴图:

Bump Map是老版本的Normal Map,前者只能改变法线的高低,而后者还能够改变(扰动)法线的角度,更加提高了渲染真实感。

但实际上,法线贴图所呈现的增加几何细节的效果是“假”的,为什么这么说呢?

下面左图是应用了法线贴图的例子,我们可以看到模型表面有了“褶皱”的效果,但我们仔细观察模型边缘和影子会发现依然是很平滑的,因为法线贴图也只是影响了在着色模型中的法线参数,“伪造”的只有模型表面的着色效果。

而上面右图会发现几何真实感又提升了边缘和影子也有了细节,这是因为应用了Displacement Map(位移贴图)。位移贴图是真正改变了模型的几何细节,让其有更真实的表现。但是位移贴图对硬件有要求,需要在必须支持ShaderModel3.0及以上才可以,此外也需要模型的三角形数量“跟得上”位移贴图的“改变频率”才有效,如果模型本身三角形数量太少,几何细节太差,那么应用位移贴图也是没有效果的。此外,现在我们也可以利用曲面细分着色器的功能,在模型某个面片在应用时才细分成更多的三角形从而与位移贴图产生更好的效果。相较于法线贴图的缺点也是显而易见的,更好的效果通常意味着更多的计算量。

Environment Map/Spherical Map/Cube map

假设我们在一间屋子里,我们能看到四面八方的物体墙壁是因为有光进入我们的眼睛,不论是直接光还是间接光,于是我们记录下四面八方来的光,就有了一张环境光照图。比如下面这图,假如在房间内放置一个茶壶,能够看到茶壶上接收/反射窗户的光,在现实中也是如此。

既然如此假设我们就在场景中放置一个光滑的金属球来反射所有的环境光,即我们可以把环境光存储在球上,这就是Spherical Map。

并且我们还可以像展开地球仪成世界地图一样,展开Spherical Map。但是我们可以观察到顶部和底部有扭曲的问题,世界地图也是一样,位于不同位置的国家地图有一定程度上的形变,这种展开并不是一种均匀的描述。

假设有一个立方体包围盒包住上述的反射球,从圆心出发发射射线直到打到立方体表面,用立方体的六个面来记录环境光信息,,这种方法可以减少形变,这就是Cube Map。虽然需要一些额外的操作来计算方向,但也是比较小的工作量。

此外,纹理并不限于2D纹理,也可以有3D纹理。2D纹理只是贴在表面,3D纹理可以实时生成模型的剖析截面显示图,比如将下图的模型切开我们可以看到内部的纹理。实际上他定义了空间中每个点的值,但是并没有生成结果,而是定义了在三维空间中的一个噪声函数,对于空间中的每个点都有解析式能够算出相应的值,我们甚至可以对这些值做进一步处理比如二值化等。下图就是著名的Perlin noise。

纹理还可以记录一些提前算好的信息。比如下面例子,左图是简单的shading,中间我们计算了AO(环境光遮蔽,阴影的一种),两者结合(结果相乘)起来后得到了右图更真实的结果。

此外还可以做“体渲染”,原来光照模型我们渲染的是一个面,而体渲染,比如医学核磁共振返回三维信息,如每一个点上的密度信息。

在实际应用中,我们还会用纹理记录各种各样的信息。

 

 

参考资料:

1.现代计算机图形学入门–闫令琪

2.TA百人计划

posted on 2022-11-01 10:34  PISCOnoob  阅读(41)  评论(0编辑  收藏  举报