Here is a video from my game and this cinematic scene has generated landscape and 5-10k decor objects (grass, trees, etc).
What I have done is:
- Using instances
- Optimize scene by freezing meshes, materials and etc.
- I use offscreen canvas.
- I do compute work with web workers (vertices, indices, animations and more)
- I do compute work for landscape
- I send only chunks of data depending on player location.
- I dispose/reuse objects not visible for the player.
- I have a FPS controller maxing at 60fps
I target players with 3d card equal at GTX 1030, and I found all of these points above to be useful for me, especially using web workers for compute work and offload the engine to a separate thread.