So, I did some debugging. Most of the issues here are perf issues you would have with any scene. The problem with XR is that you are rendering the entire scene twice. For example, take this -
testWEBXR | Babylon.js Playground (babylonjs.com)
Setting the performance mode before creating the meshes will probably increase the performance (does on my device). I am rendering this scene in 85-90 FPS.
Or
Create Fountain | Babylon.js Playground (babylonjs.com)
Which will render better.
Don’t forget that each scene starts with every feature the framework offers. Near interaction, pointer selection, teleportation enabled and more. And those are just the XR features. The scene itself should also be optimized to your specific use case (described wonderfully here - Babylon.js docs). I agree that you should expect a default scene to render as fast as possible. Here is the simplest scene, which, if doesn’t render in the (almost) highest FPS, we do have a problem:
Any unoptimized babylon scene is raw and needs to be prepared for production. There are many ways of doing it, which mostly depends on your use-case