1.3 纹理

1.3 纹理

  • 可供着色器读写的,结构化存储形式
    • Image[Height][Width][4],4为RGBA
  • Pros:建模工作量、储存空间、读取速度⬇️
  • Cons:几何细节损失

纹理管线

截屏2023-07-29 16.48.42

截屏2023-07-29 16.55.29

纹理采样中问题解决

超出UV部分

  • Warp mode:纹理采样,超出UV范围时的处理方式
    • 截屏2023-07-29 16.58.11

纹理被放大

  • Filter mode

截屏2023-07-29 17.16.27

  • 纹理被放大

    • 截屏2023-07-29 16.59.43
  • 立方卷积插值(Bicubic Interpolation 双三次插值)

    • 截屏2023-07-29 17.11.35
  • Quilez光滑曲线插值
    • 在双线性插值前,改变线性的插值模式
    • 截屏2023-07-29 17.14.23截屏2023-07-29 17.15.33

纹理被缩小

  • 问题:颜色丢失;移动时出现闪烁

    Mipmap

    • 截屏2023-07-29 17.20.36
    • 确定Mipmap的Level D
      • 截屏2023-07-30 12.10.57
    • Mipmap间过渡:三线形插值
    • Mapmap问题:过渡模糊(overblur)。上述金字塔结构的mipmap只考虑了各向同性的纹理

      各向异性过滤Anisotropic Filtering

  • Ripmap:做出各种比例的矩形预处理,内存开销变为三倍

    • 截屏2023-07-30 12.13.21

    • 无法彻底解决多角度观察的问题,如上图红圈部位

  • SAT

    • 积分图Summed-Area Table:所需区域,求平均
      • 截屏2023-07-30 12.56.56
  • 重用Mipmap:现代游戏引擎内使用

    • 截屏2023-07-30 13.19.16
    • 由屏幕空间像素反向投影到纹理空间,形成不规则四边形;通过四边形覆盖的最短边查找Mipmap的Level;创建一条穿过四边形中心的各向异性线,沿着线段进行采样、合成
    • Pros and Cons
      • Prons:因为是沿着各向异性线,所以这个方案不受方向约束,解决了Ripmap的不足;因为是重用Mipmap所以纹理内存消耗只多了1/3
      • Cons:沿着各向异性线进行采样、合成,且基于三线形插值,计算消耗要高

纹理相关优化

CPU优化

  • 纹理图集 / 纹理数组:目的是减少DC数量
    • 截屏2023-07-30 13.31.46

GPU优化

  • 压缩纹理:目的是减少带宽

其他纹理

立方体贴图CubeMap

  • 用三维向量对cubemap进行采样,一个map一个纹理的点

Bump/Normal Mapping

  • 不增加顶点,没有真正改变顶点的高度。过改变几何体表面各点的法线,使本来是平的东西看起来有凹凸的效果

Displacement Mapping

  • 真的把顶点作了位置的移动