【问题标题】:What and why about GLSL textureGradGLSL textureGrad 是什么以及为什么
【发布时间】:2014-01-09 01:20:41
【问题描述】:

所以我阅读了textureGrad 上的 OpenGL 信息页面,但它并没有真正解释任何事情。 所以你可以明确指定P相对于X和Y的偏导数

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

我的心被炸了。

【问题讨论】:

  • 因为我试过了,运气不好。我希望这里有人能真正理解并能够解释。你知道,该网站的用途是什么?
  • 本文档将彻底回答您的所有问题:Paul S. Heckbert。纹理映射和图像变形的基础知识。技术报告,1989 年 ------------------------------------------ ------------------------------
  • 我不明白为什么我的 cmets 被删除了,我真的是 Stack Overflow 上唯一一个真正阅读指南和/或帮助/旅游页面的人吗? ... Stack Overflow 引用:“关注有关您所面临的实际问题的问题。包括有关您尝试过的内容以及您正在尝试做什么的详细信息。”
  • @Vallentin:我认为这与你们最近的 cmets 的总体基调有关……您所说的非常正确,但不是特别有建设性。即便如此,Stack Overflow 上仍有很多质量问题,这些问题更多地与某些语言/API 的新功能/未充分记录的功能的目的/功能有关,而不是实际的编码问题。我倾向于回答不完全适合 SO 在 cmets 中的模型的问题;它可能不适合一个完整的答案,但如果我能提供帮助,我通常会提供帮助。

标签: opengl textures glsl derivative


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多