47 minutes ago, regnar said:
What I do is I use 6 planes to form a cube, send it to GPU and use vertex shader to form a sphere and add random noise to simulate surface of the planet.
You should just generate the terrain on CPU before you send to GPU: You have all data you want, you don't need to repeat the exact same calculations on GPU each frame
Otherwise APIs allow to transfer vertex shader results to CPU, either by using stream out or writing vertex results to a GPU buffer that you download after vertex shader is done.
It's also possible to do all work on GPU by using compute shaders (nice for LOD, but a bit of a waste to perform just one single collision check). This would allow to generate procedural data just once and update / refine on demand. To do collision or other CPU work you could download only a small region of that data. (It is possible to treat vertex data as regular memory so compute shader can modify and CPU can download. But you may want to subdivide each of your 6 quads to even smaller quads to avoid downloading memory from a neighbouring quad you're not interested in.)