实际使用的fwidth glsl函数是什么?

时间:2011-07-23 13:04:54

标签: opengl graphics rendering glsl shader

每次我醉酒浏览,所以我看到一个未答复的宽带问题。 它让我想知道它实际上是做什么的。

阅读文档:  abs(dFdx(p))+ abs(dFdy(p))。

因此,不是经典的mip选择,即max(dx,dy)。 是替代mip选择吗?但我找不到abs(dx)+ abs(dy)会更好的情况。 必须有一些siggraph纸或常见的算法,我完全没有使用该功能。它必须非常受欢迎,因为它使它成为GLSL。 我唯一能想到的是我失踪的一些二维过滤器 但是什么? 我相信这里有人知道,一旦你看到它,这是显而易见的。 那么:什么算法使用abs(dx)+ abs(dy)?

2 个答案:

答案 0 :(得分:9)

你实际上是在使用2D过滤建议。任何依赖于像素与其邻居之间的变化率的某种度量的过滤器都可以从这个函数中受益。

示例包括抗锯齿,边缘检测,各向异性过滤。我相信有更多可以想到的例子。

从您的问题和评论中可以看出,您希望将此功能纳入GLSL是一个令人兴奋的原因。我只想说这是一个有用的功能。也许对该函数的实际内部有更深入了解的人可以提供有关幕后发生情况的更多细节(即,如果与dFdx和dFdy的手写等效项相比有任何性能改进)。

答案 1 :(得分:3)

这是函数DF = dF / dx * dx + dF / dy * dy的总导数。看到相似性? fWidth> = DF或单词fWidth是片段变量F中的任何当前片段相邻像素之间的最大可能变化。即3x3邻域中的8个周围像素。