Opengl fwidth glsl函数实际用于什么?

Opengl fwidth glsl函数实际用于什么?,opengl,graphics,rendering,glsl,shader,Opengl,Graphics,Rendering,Glsl,Shader,每次我喝醉了,我都会浏览,所以我看到一个未回答的fwidth问题。 这让我想知道它到底是用来做什么的 正在阅读文档: abs(dFdx(p))+abs(dFdy(p)) 因此,它不是经典的mip选择,而是max(dx,dy)。 它是否用于替代mip选择?但是我没有找到一个比abs(dx)+abs(dy)更好的例子。 一定有一些我完全不知道的使用该函数的siggraph纸或通用算法。它一定很受欢迎,因为它成为了GLSL。 我唯一能想到的就是我缺少的一些2d后期过滤器。 但是什么呢? 我相信这里有人

每次我喝醉了,我都会浏览,所以我看到一个未回答的
fwidth
问题。 这让我想知道它到底是用来做什么的

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

因此,它不是经典的mip选择,而是
max(dx,dy)
。 它是否用于替代mip选择?但是我没有找到一个比abs(dx)+abs(dy)更好的例子。 一定有一些我完全不知道的使用该函数的siggraph纸或通用算法。它一定很受欢迎,因为它成为了GLSL。 我唯一能想到的就是我缺少的一些2d后期过滤器。
但是什么呢? 我相信这里有人知道,一旦你看到,这是显而易见的。
那么:什么算法使用了abs(dx)+abs(dy)?

二维过滤建议,实际上你非常有钱。任何依赖于像素与其相邻像素之间变化率的某种度量的过滤器都可以受益于此功能

例如抗锯齿、边缘检测、各向异性滤波。我相信我们可以想出更多的例子


从您的问题和评论看来,您希望将此功能包含在GLSL中有一个惊人的理由。我只想说它是一个有用的函数。也许对该函数的实际内部结构有更深入了解的人可以提供关于幕后发生的事情的更多细节(即,与使用dFdx和dFdy的手写等价物相比,是否有任何性能改进)。

这是函数DF=DF/dx*dx+DF/dy*dy的全部派生。看到相似性了吗?
fWidth>=DF或换句话说fWidth是片段变量F中的最大可能变化,在任何当前片段相邻像素之间。即3x3附近的8个周围像素。

您提到的2D后期过滤实际上是一个不错的例子。请选择。抗锯齿、边缘检测、各向异性滤波。事实上,在谷歌搜索之后,我发现了一个用于cel着色着色器抗锯齿的示例。现在在评论中聊天:)我也发现了这些东西,但它似乎不够重要,无法将其应用到语言中。一定还有别的事!对于2d,我唯一能想到的是,这可能是一个不错的预测。不过,我还是觉得有一些显而易见的东西。@starmole:仅仅因为它对你来说“似乎不重要”,并不意味着它不重要。巴特给了你4个场景,在这些场景中,函数是有价值的。当然,这应该是一个答案。@starmole我不知道你希望它有多神奇,这样才算重要?在类似于我提到的场景中,它是一种常用的函数类型。就发送到GPU的实际“代码”而言,我不知道它到底是什么,但我可以想象这个函数比自己评估对dFdx和dFdy的调用有什么优势。但这纯粹是我的猜测。谢谢你的回答。这是有道理的。我所寻找的真的是一件令人兴奋的事情。例如,看看GLSL噪声函数,我知道它为什么存在,为什么需要由输入驱动等等,但这只是因为我以前知道柏林噪声!所以我假设这个函数在一些我不知道的算法中同样重要。但随着问题的出现,没有人用siggraph链接回答问题,你可能是对的:这是一条有用的捷径,易于实现和模拟。无论如何,感谢您的耐心,如果我看起来有点难为情,请原谅:)下面是一个使用fwidth的着色器的漂亮示例: