我读过很多关于行为的描述dFdX(n)
and dFdY(n)
并且相信我仍然能够掌握学校的偏导数。我不明白的是,在最简单的示例中,“n”来自哪里?
读取glsl内置函数dFdx(n)
and dFdy(n)
除了数学之外,没有任何背景,我会将它们解释为“我有一些 x 和 y 的函数:f(x,y)
,我对该函数求偏导数。x d/dx(x,y)
,并且我评估偏导数公式的某个值x
and y
我假设是输入参数n
above.
我读过很多关于如何进行的描述dFdx()
and dFdy()
允许您找到输出片段的窗口空间梯度。输出片段的情况是我目前最感兴趣的,因为我not尝试确定纹理坐标相对于纹理光栅化方式的变化率。
我正在寻找使用dFdx(n)
and dFdy(n)
找到输出片段的窗口空间颜色梯度。我不完全理解如何在心里构造被微分的函数以及它与帧缓冲区的关系以及如何n
与此相关(例如n
与当前片段的 2x2 片段邻域、整个帧缓冲区的窗口坐标空间相关,以便我评估该值的梯度,其他)?
我希望输入类型n
对这个问题的任何回答都是一个标量(浮点数),我们只讨论一个维度,dFdx()
,以简化讨论。
让我们检查一下man page https://www.opengl.org/sdk/docs/man/html/dFdx.xhtml:
genType dFdx( genType p);
genType dFdy( genType p);
这些函数仅在片段着色器中可用,返回
表达式 p 关于窗口 x 的偏导数
坐标(对于 dFdx*)和 y 坐标(对于 dFdy*)。
dFdxFine 和 dFdyFine 使用局部差分计算导数
基于当前片段及其直接片段的 p 值
邻居)。
dFdxCoarse 和 dFdyCoarse 使用局部计算导数
根据当前片段的 p 值进行差异
邻居,并且可能但不一定包括该值
对于当前片段。也就是说,在给定的区域内,
实现可以在更少的唯一位置计算导数
将允许相应的 dFdxFine 和 dFdyFine
功能。
dFdx 返回 dFdxCoarse 或 dFdxFine。 dFdy 返回
dFdyCoarse 或 dFdyFine。实现可以选择哪个
根据性能或性能等因素执行计算
API GL_FRAGMENT_SHADER_DERIVATIVE_HINT 提示的值。
暗示高阶导数的表达式,例如 dFdx(dFdx(n))
具有未定义的结果,混合阶导数也是如此,例如
dFdx(dFdy(n))。假设表达式 p 是连续的并且
因此,通过非均匀控制流评估的表达式可能是
不明确的。
专注于 Fine 变体。当每个片段进程到达 dFd* 调用时,GPU 将收集传入的值并基于这些值,通常是通过获取相邻值之间的差异并除以片段大小。
换句话说,片段着色器已经计算出F(x,y)
并将其传递给 GPU 以收集它们,并根据其旁边的片段传回 dFdXF(x+e, y)
GenType
意味着您可以在其中放入浮点数,您也可以传入 vec4 并获取组件方面的 dFd* 值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)