关于GLSL textureGrad的内容和原因

Nat*_*ide 9 opengl textures glsl derivative

所以我阅读了OpenGL信息页面,textureGrad但它并没有真正解释任何内容.因此,您可以明确指定P相对于X和Y的偏导数

  • 这实际上是做什么的?
  • 当您在没有特定偏导数的情况下进行采样时,OpenGL如何计算衍生物?
  • 为什么纹理采样使用甚至需要衍生物?

我的思绪已被吹嘘.

jer*_*ong 2

当您在 GPU 上调用纹理采样操作时,GPU 会执行以下操作:

  1. 纹理请求被广播到 2x2 四边形片段中的相邻像素
  2. 计算纹理坐标相对于 x 和 y 的偏导数
  3. 这些部分用于计算 MIP 级别(考虑细节级别和各向异性过滤)
  4. 最后,获取相关纹理像素(可能来自纹理缓存)并进行插值以产生最终的采样结果

现在,假设您有不同的相邻片段进行分支(例如由于某种材质或其他原因),这样在调用该着色器时,会同时发出对不同纹理的样本请求。如果这些纹理的平铺率不同,您就会遇到问题,这将破坏 MIP 选择(此未定义操作的不连贯性将导致渲染噪声)。解决方案是在分支外部使用 dFdx 和 dFdy 自行查询梯度,并使用分支textureGrad的函数,将正确的平铺乘数应用于梯度。