当我在像素着色器中对纹理进行采样时,纹理单元需要根据被着色的像素周围的纹理渐变来选择一个mipmap。
有一个函数tex2Dgrad()
允许我手动提供有关渐变的信息,tex2Dlod()
允许我手动选择一个mipmap但如果我只是调用tex2D()
那么额外的地方梯度信息来自?
tex2D()
是纹理贴图最常见的情况,在大多数着色器中使用,但我不知道渐变来自何处。 Mipmapping显然有效,因此它必须来自某个地方。
我想使用计算的U
和V
坐标在像素着色器中将纹理用作查找表,但我不希望发生任何意外的'magic'在tex2D()
。
我是否需要使用tex2Dlod()
来避免这种情况?我读到tex2Dlod()
比tex2D()
慢。
答案 0 :(得分:1)
GPU一次遮蔽4个像素的“四边形”,用于纹理提取的渐变来自相邻像素对计算的有限差分。这就是GPU即使对于像素着色器中的任意表达式也能够生成偏导数的方式。如果您可以为作为纹理坐标传入的值计算更准确的分析导数,则tex2Dgrad函数非常有用。