I have a bunch of voxels, lets just say 64x64x64, that I use to create a sphere/planet. This works very well, but once I try to apply noise to create a more interesting terrain things go wrong.
3D noise works fine, but I don't always want to create terrain with caves, overhangs etc, so I figured in those cases 2D noise would be a good solution, but I can't figure out how to use it correctly.
I tried this, where pos (world position) is a float3 and x and y are the input values for the noise function:
float x = math.acos(pos.z / math.length(pos));
float y = math.atan(pos.y / pos.x);
That results in a very noticeable seam along one axis and pinching at the poles though.
Is there any way I can convert my 3D world position into 2D coordinates, so that the noise function (Perlin or Simplex) will produce a seamless result without pinching? I don't mind in the least if this causes symmetry or repeating features.