US3S2L11——遮罩纹理基本概念

纹理图片存储的数据

纹理(图片)中可以存储的数据可以是

  • 颜色(单张纹理)
  • 法线、高度(凹凸纹理)
  • 漫反射光的强度色(渐变纹理)

一张图片中主要存储的就是像素点数据,
常见情况下,一个像素点存储的 RGBA 值通常占据4个字节
每个颜色通道 R(红),G(绿),B(蓝),A(透明度)通常使用1个字节(8位)来表示
RGBA值中的每个通道通常使用 0~255 之间的整数表示

我们完全可以在图片数据中存储非颜色的数据
比如我们之前学习凹凸纹理时,在图片数据中我们实际上存储的是:

  • 法线数据(RGBA中的 RGB 分别存储模型表面点的法线数据的 XYZ 分量,A 一般为1)
  • 高度数据(RGBA中的 RGB 存储的值相同,为模型表面点的高度数据,A 一般为1 )

遮罩纹理 本质上就是在图片中的RGBA内存储各种数据,用于参与渲染相关的计算,从而达到我们的目标效果

遮罩纹理

遮罩纹理通常用于控制或限制某些效果的显示范围。它允许我们可以保护某些区域,使它们免于某些修改。
一般情况下,遮罩纹理也会是一张灰度图,其中的RGB值会是相同的
我们利用它存储的值参与到

  • 光照(指定某些区域受光影响的程度)
  • 透明度(指定某些区域透明的程度)
  • 特效(指定某些区域出现特效)

等等相关的计算中,从而来让指定区域达到我们想要的效果

以高光遮罩纹理举例,下图三个胶囊体的对比就是高光遮罩纹理起到的效果
利用高光遮罩纹理,我们可以控制模型上的各个区域,受到高光影响的强弱

image

原本直接使用 BlinnPhong 光照模型的右侧模型高光较多,模型偏亮,反射偏多
而使用高光遮罩纹理后(中间纹理),胶囊体的高光被控制住了,使模型没有那么亮,但也不至于没有高光,砖石材质的显示效果更自然了

高光遮罩纹理的基本原理

高光遮罩纹理的基本原理是:

  1. 从纹理中取出对应的遮罩掩码值(颜色的RGB值都可以使用)
  2. 用该掩码值和遮罩系数(自己定义的)相乘得到遮罩值
  3. 用该遮罩值和高光反射计算出来的颜色相乘

最终呈现出来的高光反射表现就会受到 高光遮罩纹理 和 遮罩系数 的影响,从而表现出最终效果

image

遮罩纹理中的RGBA值

对于高光遮罩纹理中的RGBA值,从使用率上来讲是非常浪费的,因为我们只使用其中一个值就可以得到我们想要的数据
因此对于遮罩纹理来说,我们可以合理的利用其中的每一个值来存储我们想要的数据

随着以后的学习,我们可以在遮罩纹理当中存储更多信息,比如:

  • R值代表高光遮罩数据
  • G值代表透明遮罩数据
  • B值代表特效遮罩数据

等等,甚至可以用 n 张遮挡纹理存储 4*n 个会参与 每个片元渲染计算的值