1.3 纹理
1.3 纹理
- 可供着色器读写的,结构化存储形式
- Image[Height][Width][4],4为RGBA
- Pros:建模工作量、储存空间、读取速度⬇️
- Cons:几何细节损失
纹理管线
纹理采样中问题解决
超出UV部分
- Warp mode:纹理采样,超出UV范围时的处理方式
纹理被放大
- Filter mode
纹理被放大
立方卷积插值(Bicubic Interpolation 双三次插值)
- Quilez光滑曲线插值
- 在双线性插值前,改变线性的插值模式
纹理被缩小
问题:颜色丢失;移动时出现闪烁
Mipmap
- 确定Mipmap的Level D
- Mipmap间过渡:三线形插值
- Mapmap问题:过渡模糊(overblur)。上述金字塔结构的mipmap只考虑了各向同性的纹理
各向异性过滤Anisotropic Filtering
- 确定Mipmap的Level D
Ripmap:做出各种比例的矩形预处理,内存开销变为三倍
无法彻底解决多角度观察的问题,如上图红圈部位
SAT
- 积分图Summed-Area Table:所需区域,求平均
- 积分图Summed-Area Table:所需区域,求平均
重用Mipmap:现代游戏引擎内使用
- 由屏幕空间像素反向投影到纹理空间,形成不规则四边形;通过四边形覆盖的最短边查找Mipmap的Level;创建一条穿过四边形中心的各向异性线,沿着线段进行采样、合成
- Pros and Cons
- Prons:因为是沿着各向异性线,所以这个方案不受方向约束,解决了Ripmap的不足;因为是重用Mipmap所以纹理内存消耗只多了1/3
- Cons:沿着各向异性线进行采样、合成,且基于三线形插值,计算消耗要高
纹理相关优化
CPU优化
- 纹理图集 / 纹理数组:目的是减少DC数量
GPU优化
- 压缩纹理:目的是减少带宽
其他纹理
立方体贴图CubeMap
- 用三维向量对cubemap进行采样,一个map一个纹理的点
Bump/Normal Mapping
- 不增加顶点,没有真正改变顶点的高度。过改变几何体表面各点的法线,使本来是平的东西看起来有凹凸的效果
Displacement Mapping
- 真的把顶点作了位置的移动