第七章 基础纹理
导言
在OpenGL里,纹理空间的原点位于左下角,而在DirectX中,原点位于左上角。Unity中使用的纹理空间是符合OpenGL的传统的,位于纹理左下角。
一、单张纹理
通常使用一张纹理来代替物体的漫反射颜色。
纹理导入面板
- Filter Mode ,代表纹理拉伸时的滤波模式,支持3种模式: Point、Bilinear、Trilinear;效果依次增加。
- 纹理缩小时,多个像素将会对应一个目标像素。我们往往需要处理抗锯齿问题。一个最常用的方法是使用多级渐远纹理(mipmapping)技术。即提前用了滤波处理得到了更多更小的图像,储存起来。运行时,可以直接使用。通常需要多占用33%的空间。
- Point:使用最近邻滤波,在放大或缩小时,采样像素数目通常只有一个,一次图像看起来有种像素风格。
- Bilinear:使用线性滤波,对于每个目标像素,它会找到4个近邻像素,然后对它们进行线性插值混合后得到的最终像素,因此图像看起来被模糊了。
- Trilinear:除了Bilinear所做的工作之外,还会在多级渐远纹理之间进行混合。
- 纹理的最大尺寸:unity允许不同平台发布游戏时,选择不同的分辨率。如果导入的纹理大小超过了Max Texture Size中的设置值,那么unity将会把该纹理缩放为这个最大分辨率。理想情况下,导入的纹理可以是非正方形的,但长宽的大小应该是2的幂。这样unity内部才能进行压缩,而且GPU读取该纹理的速度更快。
二、凹凸映射
两种凹凸映射做法
-
高度映射:使用一张高度纹理来模拟表面位移,然后得到一个修改后的法线值。优点是直观,缺点是消耗运行时性能。高度纹理更多用来存储地形信息。高度图中存储的是强度值,表示模型表面局部的海拔高度。
-
法线映射:直接存储表面法线信息,由于法线方向的分量范围在[-1, 1],而像素的分量范围是[0,1],因此我们需要做一个映射,通常使用的映射就是。所以我们从法线纹理进行采样后,需要进行一次反映。