One way to avoid reflection as method of achieving continuity from u=1 to u=0, and v=1 to v=0, is to map u and v on the 2D tile from the surface of a torus embedded in the 3D texture space.
The parametric equation for the X,Y and Z of u,v on the surface of a torus, where u runs around the major circumference, and v runs around the minor circumference, is as follows. c is the major radius of the torus and a is its minor radius. u and v must run from 0 to 2 pi, or some variation giving a whole number of cycles.
- X(u,v) = (c + a cos(v)) cos(u)
- Y(u,v) = (c + a cos(v)) sin(u)
- Z(u,v) = a sin(v)
Thanks to this answer on Math SE
Here's an implementation of that as nodes, expressing c as a multiple of a. The U and V nodes multiply the generated 0-1 X and Y values by 2pi.
whose output can be put through a mapping node for conveniently hunting down locations and rotations of the torus which give a desirable pattern..
with this sort of result:
There is a disadvantage of uneven scaling.. the inner radius of the torus is shorter than the outer, for u. For v, the radius is constant. But changing the ratio of c to a covers most anisotropy.
It's very possible that someone with better math than me comes along and improves / corrects this, but it's working so far.