继续来看纹理!
第7章 基础纹理
普通纹理
-
纹理映射:用一张纹理贴图来代替物体的漫反射颜色,漫反射颜色类似于绘画里常说的物体的固有色。
-
纹理属性:当我们在Unity中导入一张图片时,Unity会自动把它当做一张纹理,我们可以在Inspector面板查看其属性。
Wrap Mode:纹理平铺模式,Repeat or Clamp;
Filter Mode:纹理大小改变时采用哪种滤波模式,Point(最近邻)、Bilinear(双线性) or Trilinear(双线性+多级纹理)。
-
多级渐远纹理技术:其实之前在课上就见过图像金字塔,但是影响很模糊了,这里详细说一下。
当图像缩小的倍数比较多的时候,直接降采样会得到不自然的结果,因此在这种情况下我们要生成一个图像金字塔,每一层都是对上一层图像的降采样。在物体远离相机时,我们可以直接使用较小的纹理。 -
导入的纹理图像大小最好是2的幂。
凹凸纹理
-
凹凸映射可以分为高度映射和法线映射。
-
高度纹理:导入高度纹理后,可以在纹理属性中选择Normal Map,并勾选Create from Graysc,Unity会自动生成一张对应的切线空间的法线纹理。
-
法线纹理:分为模型空间的法线纹理和切线空间的法线纹理。
模型空间的法线纹理:储存新法线在模型空间下的坐标。
切线空间的法线纹理:储存新法线在切线空间下的坐标,切线空间的x轴是切线,z轴是原法线。切线空间下的法线坐标代表了新法线相较于原法线的便宜程度。
如果法线没有偏移,则它的切线坐标为(0, 0, 1),那么映射到颜色值为(0.5, 0.5, 1),因此法线纹理的大部分都是浅蓝色。
-
纹理采样:一开始对纹理采样这个说法不太理解,但是仔细想一下还是挺简单的。
顶点着色器中输入的v.texcrood就是纹理坐标,比如(0.5, 0.5)就表示该顶点对应了纹理贴图最中间的一点的颜色。我们一般在顶点着色器中计算纹理坐标的变换(平移和缩放),并传递给片元着色器;在片元着色器中读取纹理贴图,并使用变换后的纹理坐标计算该片元的纹理颜色。 -
在Unity中实现法线纹理:
渐变纹理
-
渐变纹理很像PS中的渐变映射,前一段时间还在B站上看到了一位画师讲了渐变映射,讲的还蛮好的:https://www.bilibili.com/video/BV1AJ411M78a
我理解的:渐变映射其实就是为原图的每一个灰度值匹配一个颜色,而渐变纹理就是为模型不同的明暗处匹配不同的颜色。 -
在Unity中实现渐变纹理:
最左边的模型使用的纹理如下,这种纹理可以产生边界突变,得到类似卡通的效果,实现非真实感渲染。
渐变纹理遮罩纹理
-
遮罩纹理给我的感觉并不像是纹理,而更像是一个蒙版。它储存的不是模型应该显示的颜色,而是控制模型的哪些部分该如何显示。书中给出的例子是控制模型的高光反射,但遮罩纹理还可以有更多应用。
-
在Unity中实现遮罩纹理:
在程序上遇到的一点小bug:
-
在添加遮罩纹理的时候得到的模型是灰色的,没有彩色。发现自己在计算漫反射是返回类型应该是 fixed3,我写成了 fixed。
-
在写凹凸纹理的时候切线坐标和世界坐标得到的模型高光位置不一样。发现自己在获取世界坐标时没有强转为 float3 类型,如果不转的话,系统会自动给worldPos赋值(i.TtoW2.w, i.TtoW2.w, i.TtoW2.w)。
float3 worldPos = float3(i.TtoW0.w, i.TtoW1.w, i.TtoW2.w);
下一章继续实现透明效果!!!
图片来自 孙无力
网友评论