...but what you don't seem to understand is that it always looks like blocks and not a gradient, plus to make gradient the lines need to all be in straight lines but this particular print the lines are not the same, they are all not level
With respect to your comment that "they are all not level", I presume you mean that in the photo you posted individual rows of dots appear to be following the contours of the torso. If that's your concern, IamSam already addressed it when he said:
"...overlay it on a T-shirt and warp it to fit". Sam's suggestion to "warp it" (at the end of the process) means that you start by first constructing the array of dots with true horizontal rows, but then use either the warp, liquify, or even puppet warp tool to make the horizontal rows follow the contours of the wearer's torso.
Secondly, with respect to your comment,
"...it always looks like blocks...", that is because with whatever method you used to make the dots in the example you provided, you did not construct the lines of dots one at a time, in the way Sam suggested, in which the horizontal spacing increases more or less smoothly and in *much* smaller jumps as you go from one line to the next. Instead, the way you did it, the horizontal and vertical spacing jumps in large and exact integer steps, ie, 1 cm, 2 cm, 3 cm, etc. You need to work more slowly and in smaller increments.
Also, to avoid the 3D effect that you didn't like, while the vertical spacing can increase smoothly (ie, with no random variation), there has to be a bit of random variation in the general increase of the horizontal spacing to break up the formation of diagonal lines. Of course, you could also introduce a bit of random variation on top of the slowly increasing trend in both the horizontal and vertical spacings, if you prefer that look. Again, work slowly and in smaller increments, introduce a bit of randomness and you will be fine.
Tom M