Welcome aboard!
There’s a discontinuity at x=0 for atan:
When doing texture(base, vec2(lon / ${TAU}, lat / ${TAU/2} + .5))
, the GPU uses the (u,v) values from this call + the (u,v) values for the neighboring pixels to calculate derivatives to choose the right mipmap. At the discontinuity point, this calculation will be wrong and a wrong mipmap will be chosen.
The easiest fix is to disable mip mapping (3rd parameter of Texture
constructor):
Or you can try to calculate the derivatives yourself and use textureGrad
instead of texture
.