US3S2——Shader入门-纹理效果

纹理

模型的骨肉皮分别为:

  • 骨:模型骨骼
  • 肉:三角面片(由模型顶点围成模型的轮廓)
  • 皮:纹理图片

由此可以看出,纹理的主要作用就是使用一张图片来控制模型的外观
使用纹理映射技术,将图片和模型联系起来,让模型能呈现出图片中的颜色表现

纹理映射:是计算机图形学中的一种技术,它用来将图像(纹理)映射到三维模型的表面,
从而赋予模型更加真实和细致的外观,这个过程实际上是将二维图像映射到三维空间的过程

纹理就是模型的“皮”,它决定了模型的颜色表现,在建模时通过纹理映射技术将顶点和纹理图片建立联系
在模型数据中记录顶点对应的UV坐标,之后我们在进行Shader开发时,就可以利用UV坐标从纹理图片中取出对应的颜色,给片元“上色”了

image

左图为不关联纹理的模型的显示效果(固定为白色),右图为关联的纹理的模型的显示效果

注意

  1. UV坐标的取值范围在 [0~1] 之间
  2. 顶点之间的点(片元),会通过插值运算得到对应的UV坐标,从而从纹理图片中取出对应位置的颜色

本系列学习内容:

  • 单张纹理(模型蒙上带颜色的皮,而不再是单一颜色的)

    • 纹理颜色采样

    • 纹理相关设置

      前置知识详见:U3L2——图片导入概述

    • 纹理结合光照模型(让拥有纹理的模型受到光照影响)

  • 凹凸纹理(让模型在不增加更多面的情况下,通过改变法线修改反射光线方向,通过光线模拟出模型表面的凹凸感)

    • 凹凸纹理基本概念
    • 法线贴图的计算方式
    • 切线空间下计算法线纹理贴图(计算效率更高的方式)
    • 世界空间下计算法线纹理贴图(显示效果更好的方式)
  • 渐变纹理(通过一张带颜色渐变的贴图,修改漫反射光照模型的明暗变化过渡颜色,使得明暗变化可自定义化)

    • 渐变纹理基本概念
    • 渐变纹理基础实现
    • 渐变纹理综合实现
  • 遮罩纹理(通过贴图的各个像素的RGBA值来存储一定的信息,根据这些信息修改模型光照,特效,透明度等等表现)

    • 遮罩纹理基本概念
    • 高光纹理综合实现(通过高光遮罩纹理来修改高光反射颜色,使得高光反射更加自然一些)

如何进行纹理映射

在建模软件中,美术同学会利用纹理展开技术(也就是常说的展UV)把纹理映射坐标存储在每个顶点上
模型表面的顶点都与纹理坐标相关联,纹理坐标通常使用二维坐标系统(称为UV坐标),其中U表示水平轴,V表示垂直轴

image

左图是一个模型,右图就是将模型展开为一张二维纹理贴图,其中UV就作为纹理的坐标系(限定范围为0到1)
其中,纹理上某个UV坐标的颜色,决定了使用这个纹理的模型对应的点上的颜色
例如,纹理图上,模型眼睛对应的纹理上的UV坐标的颜色是黑色的,那么这个模型眼睛就是黑色的

简而言之就是:美术通过使用建模软件进行纹理映射
之后导出的模型数据中,存储了每个顶点对应的纹理坐标(UV坐标)

UV坐标对于Shader开发的意义

我们在进行Shader开发时,在顶点着色器回调函数传入的数据中,我们可以获取到模型中的UV坐标的数据,
有了UV坐标,只要有正确的纹理贴图(图片),

我们就可以用顶点的UV坐标从图片中取出映射的颜色用于渲染,模型便可以呈现出“皮”的颜色效果

UV坐标的注意事项

  1. 纹理坐标(UV坐标)的横轴和纵轴的取值范围是被归一化过的,在 [0,1][0,1] 的范围中
    主要目的是为了适应不同大小的纹理图片(256*256、512*512、1024*1024(像素)等等)
  2. 只有顶点中记录了UV坐标,因此在数据传递进片元着色器之前,UV坐标会在中间阶段进行插值运算
    也就是每个片元中得到的UV坐标大部分都是插值计算得结果,因此我们可以得到图片中非顶点位置的颜色