Rather than just put this on IRC, I managed to get TPS demo working the other day and did a bit of looking into why I had very low frame rates (12fps). I only have an integrated Intel GPU so not expecting too much.
Anyway I profiled it:
I got some improvements with my octree optimization PR (up from 12fps to 17fps)
https://github.com/godotengine/godot/pull/41123
Then had a look at other things. Textures were all very large, it could do with a mechanism to shrink them for hardware that isn't good with 4096x4096 textures. I hard coded the Godot importer to max size 256 to look at this.
I also found when deleting the .import folder and reimporting, it crashed in xatlas (with near zero area triangles). I've had problems like this with the latest xatlas. I did a little hack in xatlas to get it to import correctly.
Next I saw the number of drawcalls and material changes was very high. So I ran it through my mesh merging addon:
https://github.com/lawnjelly/godot-splerger
Doing a split of meshes that have multiple surfaces, then merging the resulting meshes. This reduced drawcalls from over 9000 to around 900. In GLES2 frame rate went from 12fps - 50-60fps. I can't say categorically that this is like for like as I think merging the meshes may have affected the baked lightmaps. But it does suggest that (at least on GLES) merging some of the meshes can result in far better performance.
Also worth mentioning - for something of this type for the main player, if you aren't already you might get away with just creating a navmesh and using that for physics instead of real physics. The physics was pretty dodgy and tended to get stuck easily.
If anyone wants to try merged version, hopefully this will work:
https://drive.google.com/file/d/14Fs0wjxsK_fb1GE4aZi8AFShiddafBYT/view?usp=sharing
This is the merged level file. You will need to open level/level.tscn
, delete the existing linked level (the dae file) and then add to this scene a link to the tscn you downloaded.
It also complains it can't find some of the nodes as the names have changed when you run it, but it seemed to run mostly ok. I didn't take a lot of care over the merging this was just a test.