To be absolutely precise, yes, the vertex shader is used to change them. The vertex shader is not used to compute the necessary position of each vertice (the necessary position is stored across many frames in the computebuffer on GPU), but yes I have to do a few operations to replace each vertice each frame:
// Get data from buffer
float4 position = patchGeneratedFinalDataBuffer[bufferIndex].position;
float3 patchCenter = patchGeneratedFinalDataBuffer[bufferIndex].patchCenter;
// Translate the patch to its 'planet-space' center:
position.xyz += patchCenter;
// Apply data
v.vertex = float4(position);
As these per-vertex operations are quite simple (basically its a buffer read, one add operation and one vertex-parameter change) I hope the loss of performance is lower than the benefit of doing all the noise and normal calculations on GPU. But I dont know exactly, as the missing batching had a huger performance impact when drawing lots of objects, so a reasonable profiling was not possible yet.
Only way to avoid these vertex operations IMHO would be to read back the computebuffer from GPU to to CPU once the computeshader has done his work, to create a mesh with the final position on the CPU. Or, so to say, to utilize the computeshader for a highly parallel computation on GPU between the creation of a new mesh to gather position data and normalmaps, but do all the final mesh creation stuff etc. on CPU.
As this read-back from GPU to CPU results in stalls I haven't yet tried to go this route. That this stall happens is a pain, things like bounding and collider checks (or building a mesh) would be way simpler if you had some of the data back on CPU. Only some minimal information would be necessary (low resolution vertex positions from the buffer would be ideal, all the high res normalmap stuff could remain on GPU), but I guess the volume of data doesn't matter with regards to the stall. I think if @NavyFish would get that async plugin done he'd be a rich man
Yeah but your idea is better to utilize GPU Instancing preferable for farer away objects despite of the size and at closer distance start to detail them differently (eventually depending on the size).
I wanted to implement the GPU Instancing with precalculated objects once I've profiled the current technique to create asteroids described beforehand. I am then going to check how I can utilize the GPU Instancing like you suggested.