I was thinking about that, I've been working within the library already since I was modifying the sphere model to see if I could split the entire build process into smaller sets as you mentioned trying.
Im wondering if maybe chunking out the output would solve the issue but idk. If I combine them later idk if I'll see any benefit. I could implement futures and have an elevation grid be entirely made of futures filled by the threads, which might prevent any weird cross talk by the threads.
Edit: Nah, it looks like the issue is literally just within the line
Mutexing around that single line stops the artifacting, but mutexing around the output:
//classically found in NoiseMapBuilderSphere::Build();
float curValue = (float)sphereModel.GetValue(curLatb, curLonb);
doesn't do anything.
*pDest++ = curValue
So to me, this seems like an issue with threads snagging the return float value from the sphere model that belongs to other threads? The sphere model's source module winds its way back to the previous source module, which I think ends at Module::Cache FinalPlanet in their program. I'm not sure though.