LOD + Instancing

I think I have an idea which is exactly what you want.

I have implemented an algorithm called “Instanced LOD”, which combines the LOD and instancing.

Take a forest scene as an example:

First, for every frame, calculate the distance between every single tree and the camera, then set levels of details. For example, set distance[0,100] as level0, distance[100,200] as level1, and so on.

Second, take all trees in level0 as a THREE.InstancedMesh, all trees in level1 as another THREE.InstancedMesh. Render these InstancedMeshes to the screen.

Finally, update the camera position, re-calculate the distances between trees and the camera, re-allocate the instancemeshes in every frame.

Here is a demo showing the above example: https://strange-forest.netlify.app
And the source code is here: https://github.com/Strange-tech/100kTrees