While I was learning about ways to create a looping generative art GIF, I encountered two different ways of making noise loops.
Etienne Jacob's example code in his tutorial uses 4D OpenSimplex Noise as follows.
(float)noise.eval(scl * x, scl * y, R * cos(TWO_PI * t), R * sin(TWO_PI * t));
Daniel Shiffman's example code in his tutorial uses 2D Perlin Noise as follows.
noise(cos(a) + 1, sin(a) + 1);
What I understand is that both achieves the loop by "walking in circle" in the noise space like above gif. But the difference between two are unclear to me. What is the intent of choosing 4D OpenSimplex over 2D Perlin Noise to create a looping noise?