HLSL tex2D() - 渐变来自哪里?

时间:2011-12-20 17:51:22

标签: textures direct3d hlsl mipmaps

当我在像素着色器中对纹理进行采样时,纹理单元需要根据被着色的像素周围的纹理渐变来选择一个mipmap。

有一个函数tex2Dgrad()允许我手动提供有关渐变的信息,tex2Dlod()允许我手动选择一个mipmap但如果我只是调用tex2D()那么额外的地方梯度信息来自?

tex2D()是纹理贴图最常见的情况,在大多数着色器中使用,但我不知道渐变来自何处。 Mipmapping显然有效,因此它必须来自某个地方。

我想使用计算的UV坐标在像素着色器中将纹理用作查找表,但我不希望发生任何意外的'magic'tex2D()

我是否需要使用tex2Dlod()来避免这种情况?我读到tex2Dlod()tex2D()慢。

1 个答案:

答案 0 :(得分:1)

GPU一次遮蔽4个像素的“四边形”,用于纹理提取的渐变来自相邻像素对计算的有限差分。这就是GPU即使对于像素着色器中的任意表达式也能够生成偏导数的方式。如果您可以为作为纹理坐标传入的值计算更准确的分析导数,则tex2Dgrad函数非常有用。