在渲染引擎中各种类型纹理的解释

在很多时候,我们所提到的纹理,似乎都是指一张图片。这张图片按照一个指定的映射方法,把像素映射到3D对象的表面上去。但实际上纹理能做的事情远超这种简单的应用。

我想其实可以给纹理一个更加广义的定义:纹理是用来控制物体表面的物理性质,从而增强应用对3D模型表面的表达能力。而这些物理性质,大多表现在对光的反应情况。有时候,它反应的是光线照过来之后,散射出来的光应该是什么颜色,有时候它反应的是光线照过来之后反射光的方向,或者是同一束光照过来之后,有多少强度被按反射角的方向反射回去,有多少被散射开来。等等,这些一系列描述物体表面上某个点在收到光线后的反应数据。描述不同的物理原理的数据被称为各种不同类型的原理。

下面我们将分别解释这些纹理的作用

颜色纹理 (colormap)

颜色纹理是最常见的纹理,它反应的是物体表面的颜色。一般不加任何说明时,我们通常指的纹理就是这个纹理。

向量纹理 和凹凸纹理 (normal map and bump map)

在不同的软件不同的应用中有时候会区别对待向量纹理和凹凸纹理,有时候一个应用中的这两个纹理是同一个意思。但无论是那种情况,向量纹理和凹凸纹理都是用来控制材质表面对光线的反射方向的。向量纹理数据可以指定物体表面的法向量,从而进一步实现对光线的反射方向做出控制。这样,贴上向量纹理的光滑表面就能给人肉眼感觉出凹凸不平的感觉。

在有一些应用或渲染引擎中,如three.js,它在一些材质中除了normal纹理还额外的定义了bump纹理。在这里,bump是简化版的normal纹理。normal纹理的每个点要通过3维的数据来控制物体表面的法向量,而bump只需要一个数以及一个总体上的系数来表示表面的凹凸程度就可以了。bump纹理通过描述凹凸程度来表达物体表面的法向量。

位移纹理 (displacement map)

有时候仅仅通过上文所提到的向量纹理或凹凸纹理来达到物体表面情况的表达是不够的。位移纹理能实际的改变物体表面的几何凹凸形状,因此位移纹理可以在需要表示凹凸程度比较大而且几何建模又不太方便的时候使用。

反射纹理 (specular map or reflection map)

反射纹理用来表达物体表面对光线的反射情况

光泽度(粗糙度)纹理 (gloss or roughness)

光泽度和粗糙度在定义纹理时是一对反义词,因此它们内部是可以互相转化的。与反射纹理对比,粗糙度和光泽度本质上是从另外一套数学模型下来描述物体表面对光线的反射情况。

金属度纹理 (metalness)

金属对光照的反射情况与非金属是不一样的。这里其实与光泽纹理,反射纹理目的是一样,就是想要控制物体表面对光照的反射情况。只不过金属度纹理采用了不一样的数学模型来表达数据对光线的反射影响。如果,有一个3D对象同时存在多个对光线反射的纹理,例如:同时存在反射纹理,金属度纹理,则物体最终对光线的反射情况是这些纹理效用的叠加。

环境遮挡纹理 (ao map)

环境遮挡纹理是用来描述物体表面被光线的遮挡程度,它能反应物体表面上某个点在当前环境下总体上的明暗程度。这个纹理配合其他纹理使用时能表达物体表面上的阴影效果。

光线纹理(light map)

光线纹理也主要是反应物体表面的阴影情况,只是有时候与ao map不同的是,光线纹理用来描述表达物体在一个具体场景下,物体表面光线的阴影情况。而ao map反应的是当前场景下受环境光影响的阴影情况。对边ao map和light map的烘培图,我们应该就能体会到它们之间的差异。

环境纹理 (env map)

环境纹理在应用时能反应一个物体表面所对的环境的颜色。

上图中,球面贴的就是它当前所处环境的纹理。它本质上是颜色纹理,只是对环境贴图的映射到物体表面的映射方法由所不同。如果环境贴图是一个天空盒子,6张图。那么环境纹理在应用时需要建立环境贴图的6个图映射到物体的各各相应位置处。

发表评论

邮箱地址不会被公开。 必填项已用*标注