纹理概述: 纹理的用途之一是存储图像数据,每个纹理元素中存储一个像素颜色。纹理分为: 1D纹理:类似1维数组 ;2D纹理:类似2维数组(常用) ; 3D纹理:类似3D数据元数组
纹理坐标: 纹理坐标系为:图像水平方向的u轴和图像垂直方向得v轴表示。坐标(u,v)指定了纹理对应的一个元素,我们称这个元素为纹理元素。其中u轴正方向为水平向右,v轴正方向为水平向下;u和v的取值范围为:0 <= u,v <= 1。规范化的区间为[0,1]。规范化为[0,1]区间是为了方便gpu进行相关的计算。因为纹理的实际尺寸多种多样例如:512x512、128x256等等,如果采用实际尺寸,我们还需要将纹理的尺寸告诉给gpu,然后gpu再去进行相关的计算。进行规范化之后无论尺寸是512x512还是128x256。(0.5, 0.5)永远表示中间的纹理元素。(0.25, 0.25)永远表示1/4处的纹理元素。目前我们只讨论[0,1]区间的纹理坐标。
按照三角形进行贴图,把模型划分成多个三角形,每个点对应贴图上面的点.
倍增过滤器: 原因:图片为10x10 屏幕坐标为100x100 这样纹理坐标没有与纹理元素对齐.解决这个问题,GPU提供了两种插值的方法:①第一种为:常量插值(Point),常量插值也称最最近邻接点采样。因为它总是使用最近的纹理元素点的值作为采样结果(使用最近的纹理元素点的值填充被放大的像素)。② 第二种为:线性插值(默认使用)。在2纬纹理中,也称之为双线性插值。因为我们的纹理坐标会落在四个纹理元素之间。我们对在横向进行两次线性插值,在纵向进行一次线性插值。这样就能够得到一个正确的像素。线性插值相对于常量插值计算速度慢.
在unity3d中体现为:Point 单点插值,纹理将变得块状化(blocky up close);Bilinear 双线性插值,纹理将变得模糊(blurry up close);Trilinear 三线性插值,类似Bilinear,但是纹理还会在不同的mip水平之间(between the different mip levels)进行模糊;这个解决图片在摄像机下被放大或者缩小所带来的锯齿问题.
缩减过滤器:Mip-Map:多级渐进层,DDS:可以存储多级渐进层,即多张有比例的图片 1、不启用多级渐进层 2、为纹理映射挑选一个与屏幕分辨率最匹配的多级渐进纹理,根据需要在多级渐进纹理层上使用常量插值或者线性插值。这种用于多级渐进纹理的操作称为点过滤。因为这个方式非常类似常量插值。常量插值是选取最近的纹理元素。点过滤是选取最接近的多级渐进纹理层。3、同样跟线性插值方式一样,GPU可以使用线性插值的方式来选取多级渐进层。GPU选取两个多级渐进层,一层是比所占屏幕分辨率区域小一些,一层是比所占屏幕分辨率区域大一些。然后在这两个层级中间使用常量插值或者线性插值。最后得到一个颜色。不使用多级渐进层会出现锯齿,也就是多个像素被挤压到一个像素上面.
寻址模式:f(u,v) = (r, g, b, a) 重复(warp): 最常用的寻址模式,使用重复图像的方式来扩展我们的纹理,即无缝拼接图片。夹/截取(clamp): 超过1.0的值被固定为1.0。超过1.0的其它地方的纹理,沿用最后像素的纹理。用于当叠加过滤时,需要从0.0到1.0精确覆盖且没有模糊边界的纹理。 镜像(mirror):每到边界处纹理翻转,意思就是每个1.0 u或者v处纹理被镜像翻转。边界(border):超出[0.0, 1.0]范围的值都被置为边界色,也可以设置tex_border_colour属性。