在 Direct3D 下执行像素着色器时,MaxTextureRepeat 对纹理坐标施加的限制是否仅在调用纹理查找函数(如 Tex2D())期间成为问题,或者它们是否会在着色器中访问纹理坐标时发挥作用?
我想知道是否可以通过在纹理坐标上调用 frac() 之类的东西来避免 MaxTextureRepeat 限制,然后再将它们传递给纹理查找函数。
纹理坐标具有原生插值器精度。在支持像素着色器 2.0 的硬件上,这至少是 24 位浮点(或者可能是 32 位,不确定)。在内部,像素着色器中的计算必须至少为 24 位浮点。大多数现代 GPU 以 32 位浮点精度运行。
MaxTextureRepeat 是纹理采样硬件的能力。
所以,是的,如果您没有遇到浮点精度限制,那么在采样前限制范围是避免纹理重复限制的一种方法。
然而,当 frac 从 0 变为 1 时,您将获得较大的梯度,因此在这些地方,GPU 将希望使用非常低分辨率的 mip 级别。当然,这可能不是问题,具体取决于您的情况;但这是潜在问题的一点。