HPP_Graphics_1.3 纹理的秘密
a). 什么是纹理
一种可供着色器读写的结构化存储形式(采样器变量的形式,sampler)
b). 纹理管线
模型空间位置→投影函数(不同与摄像机投影矩阵,是展UV其中一步)→纹理映射→纹理坐标→通讯函数→新纹理坐标→纹理采样(避免依赖纹理读取,如果片元着色器中不是使用顶点着色器中传递的数值,而是经过计算,那么就会产生依赖纹理读取,影响性能。因此,uv的偏移通常在顶点着色器中完成)→纹理值
c). Wrap Mode
- 简介:
- 决定uv[0, 1]以外的表现
- OpenGL —— 包装模式(Wrapping Mode)
- DirectX —— 纹理寻址模式(Texture Addressing Mode)
- 类型:
- Repeat
- Mirror
- Clamp
- Border
d). Filter Mode
- 在不同形状、大小、缩放比时,纹理过滤模式,可由专用硬件实现,也可由软件中实现,也可软硬件搭配完成
d.1) 放大(Magnification)
- 最近邻(性能消耗小,放大时每个像素读取最邻近的纹素,可能出现马赛克像素风格)
- 双线性插值——对于每一个像素点都寻找邻近的四个像素点(实际),在二维空间进行的线性插值得到的最终混合值
- 双线型内插值算法就是一种比较好的图像缩放算法,它充分的利用了源图中虚拟点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,因此缩放效果比简单的最邻近插值要好很多
- $P(u,v)$是屏幕空间的坐标,屏幕空间左下角为$(0, 0)$,而左下角第一个像素的像素中心坐标为$(0.5, 0.5)$
- The Center of the Pixel is (0.5,0.5)
- 立方卷积插值
- 兰索斯插值(不常见,性能开销大)
- Quilez 的光滑曲线插值 —— 在立方卷积插值与双线性插值的一个折中效果,画面表现效果要比双线性插值好,比立方卷积插值差
- 在纹理坐标带入到双线性插值过程之前再额外进行了一步处理
- 效果对比:
d.2) 缩小
可能出现的问题:出现颜色丢失与闪烁(奈奎斯特定律)
解决方式:
- 最邻近、双线性插值(有限地增加采样频率)
- Mipmap(减小纹理频率)