Optimize rendering of high-poly meshes

What options are there for optimizing the rendering of a couple of objects(10+) each consisting of a high number of vertices (~1mio at full detail)? The meshes of these objects are the same (just planes in their original form) with the same material, but they will differ in applied textures and vertex displacements, as the user can manipulate these at runtime.
Since I need such a high vertex resolution for artistic purposes, it is unfortunately not an option to just reduce the geometry, at least not when the user is close. Currently, I implemented distance-based tesselation to save geometry with increasing distance, where a decreasing resolution is acceptable.

I appreciate any help and tips on how this scenario could maybe be optimized.

I wonder if using LOD’s ( Level of Detail ), or Culling, might somehow help you here.

Small triangles are your enemy, not vertex count itself so much. So if whatever technique you use keeps the average triangle size around 10px or larger in screen space, it likely doesn’t matter than much what the total vertex count is.