我认为在读取从顶点着色器插入的texcoords时,我在像素着色器中遇到了精度问题。
我的场景由一些非常大的三角形组成(边缘长达5000个单位,texcoords范围从0到5000个单位,因此纹理平铺了大约5000次),我有一个非常接近的相机在这些三角形中的一个(相机可能非常靠近,其视口仅覆盖几米的大三角形)。当我沿着三角形平面平移相机时,纹理是滞后和跳跃的。我的想法是,我在插值的texcoords上遇到了精度不足的问题。
有没有办法提高texcoords插值的精度?
我的第一个问题是让texcoord在xy-components中以双精度存储,在zw-components中以texcoord v存储。但我想这不起作用,因为着色器插值假设有4个独立的8位组件,而不是2个16位组件?
如果着色器侧没有解决方案,我想我只需要将三角形分成更精细的部分?我不想仅仅为了这个问题而这样做..有什么想法吗?
编辑:当在屏幕上将texcoords作为颜色打印时,问题也是可见的,根本没有任何实际的纹理采样。
答案 0 :(得分:2)
你是对的,它看起来像一个精确的问题。如果您的卡支持它,您确实可以使用双精度浮点数进行插值。只需将变量声明为dvec2,它就可以工作。
着色器插值不假设有4个独立的8位组件。在最近的卡片中,每个标量(即vec中的分量)被单独插入为浮点(或双精度)。较旧的卡片,只能插入vec4s,也可以使用完整花车(但这些卡片可能不支持双打)。