Here's the code
I use an area to determine when the player enters the multimesh and another one to determine the player position and render distance.
The most important bit is to be aware of how much time per frame you spend iterating over the instances, especially if you have a lot of them. To avoid iterating over the whole list in a single frame I split the iteration into batches and process them over multiple frames.
You can ignore the following part, as it is quite convoluted and the performance gains are not that huge.
Another optimization I use is to have a dynamic amount of meshes being available to be shown. As mentioned before, the biggest cost lays in iterating over all of the meshes, but if you only have a set amount of meshes you can show, then you can potentially break the iteration once you're showing all the instances you have available.
This is handled by the dynamic pool, which grows or shrinks trying to fit the amount of meshes in the display area.
Keep in mind that there might be better options for creating grass. This is mostly to increase performance of wide area multimeshes by limiting the render distance, since Godot doesn't have occlusion culling.