有没有办法计算片段着色器中某些东西的 dFdx(dFdx()) ?

问题描述 投票:0回答:1

所以我已经知道 dFdx、dFdy 和 fwidth 的文档指出“暗示高阶导数(例如 dFdx(dFdx(n)))的表达式具有未定义的结果,混合阶导数(例如 dFdx( dFdy(n))”。如果此类表达式未定义,是否有可能在片段着色器中获得某些表达式的高阶导数?

我听说 dFdx 从相邻片段获取信息,并找到邻居值与该片段值之间的差异。也许有一种方法可以手动从相邻片段中获取信息?

我认为有一个公式可以用来求二阶导数:

(f(x+h,y+h) - f(x+h,y) - f(x,y+h) + f(x,y))/h^2


但我的问题是,我们如何获得术语

f(x+h,y+h)

f(x+h,y)
f(x,y+h)
?我们如何获得
h
,即片段之间的距离?

glsl shader fragment-shader threejs-editor
1个回答
3
投票
也许有一种方法可以手动从相邻片段中获取信息?

即使你可以(并且通过

一些子组扩展,你可以),这也无济于事。

片段着色器在 2x2 四边形中执行调用,每组 4 个调用彼此直接相邻。导数函数仅取四边形中水平/垂直片段中的数据之间的差异。如果四边形中的一个或多个片段恰好位于被光栅化的图元区域之外,它仍然会被执行(为了计算导数),但它没有可见的效果。这些称为“助手调用”。

无论如何,四元组中的调用只能与同一四元组中的其他调用进行通信。如果您想获得更高阶的导数,您需要从多个相邻片段中采样。

© www.soinside.com 2019 - 2024. All rights reserved.