implement 3d noise as well