Use information already gathered to displace vertices

The better solution here is to use a vertex shader to handle the displacement of the visual mesh, and roll your own physics (possibly using bvhtrees). I suspect you would get a massive performance boost over displacing the vertices in Python.

Using a vertex shader means they can all be the same mesh as it is displaced on the GPU. Using a bvhtree rather than reinstance physics means you can cache the physics for different parts of the world so you don’t have to keep regenerating it.