US3S2——Shader入门-纹理效果
US3S2——Shader入门-纹理效果
纹理
模型的骨肉皮分别为:
- 骨:模型骨骼
- 肉:三角面片(由模型顶点围成模型的轮廓)
- 皮:纹理图片
由此可以看出,纹理的主要作用就是使用一张图片来控制模型的外观
使用纹理映射技术,将图片和模型联系起来,让模型能呈现出图片中的颜色表现
纹理映射:是计算机图形学中的一种技术,它用来将图像(纹理)映射到三维模型的表面,
从而赋予模型更加真实和细致的外观,这个过程实际上是将二维图像映射到三维空间的过程
纹理就是模型的“皮”,它决定了模型的颜色表现,在建模时通过纹理映射技术将顶点和纹理图片建立联系
在模型数据中记录顶点对应的UV坐标,之后我们在进行Shader开发时,就可以利用UV坐标从纹理图片中取出对应的颜色,给片元“上色”了
左图为不关联纹理的模型的显示效果(固定为白色),右图为关联的纹理的模型的显示效果
注意
- UV坐标的取值范围在 [0~1] 之间
- 顶点之间的点(片元),会通过插值运算得到对应的UV坐标,从而从纹理图片中取出对应位置的颜色
本系列学习内容:
-
单张纹理(模型蒙上带颜色的皮,而不再是单一颜色的)
-
纹理颜色采样
-
纹理相关设置
前置知识详见:U3L2——图片导入概述
-
纹理结合光照模型(让拥有纹理的模型受到光照影响)
-
-
凹凸纹理(让模型在不增加更多面的情况下,通过改变法线修改反射光线方向,通过光线模拟出模型表面的凹凸感)
- 凹凸纹理基本概念
- 法线贴图的计算方式
- 切线空间下计算法线纹理贴图(计算效率更高的方式)
- 世界空间下计算法线纹理贴图(显示效果更好的方式)
-
渐变纹理(通过一张带颜色渐变的贴图,修改漫反射光照模型的明暗变化过渡颜色,使得明暗变化可自定义化)
- 渐变纹理基本概念
- 渐变纹理基础实现
- 渐变纹理综合实现
-
遮罩纹理(通过贴图的各个像素的RGBA值来存储一定的信息,根据这些信息修改模型光照,特效,透明度等等表现)
- 遮罩纹理基本概念
- 高光纹理综合实现(通过高光遮罩纹理来修改高光反射颜色,使得高光反射更加自然一些)
如何进行纹理映射
在建模软件中,美术同学会利用纹理展开技术(也就是常说的展UV)把纹理映射坐标存储在每个顶点上
模型表面的顶点都与纹理坐标相关联,纹理坐标通常使用二维坐标系统(称为UV坐标),其中U表示水平轴,V表示垂直轴
左图是一个模型,右图就是将模型展开为一张二维纹理贴图,其中UV就作为纹理的坐标系(限定范围为0到1)
其中,纹理上某个UV坐标的颜色,决定了使用这个纹理的模型对应的点上的颜色
例如,纹理图上,模型眼睛对应的纹理上的UV坐标的颜色是黑色的,那么这个模型眼睛就是黑色的
简而言之就是:美术通过使用建模软件进行纹理映射
之后导出的模型数据中,存储了每个顶点对应的纹理坐标(UV坐标)
UV坐标对于Shader开发的意义
我们在进行Shader开发时,在顶点着色器回调函数传入的数据中,我们可以获取到模型中的UV坐标的数据,
有了UV坐标,只要有正确的纹理贴图(图片),
我们就可以用顶点的UV坐标从图片中取出映射的颜色用于渲染,模型便可以呈现出“皮”的颜色效果
UV坐标的注意事项
- 纹理坐标(UV坐标)的横轴和纵轴的取值范围是被归一化过的,在 的范围中
主要目的是为了适应不同大小的纹理图片(256*256、512*512、1024*1024(像素)等等) - 只有顶点中记录了UV坐标,因此在数据传递进片元着色器之前,UV坐标会在中间阶段进行插值运算
也就是每个片元中得到的UV坐标大部分都是插值计算得结果,因此我们可以得到图片中非顶点位置的颜色