Aside from the standard Unity frustrum culling I wanted to add some occlusion culling. I thought this was a good idea since my analysis showed that my FPS would increase after removing some statues.
First I made a test scene in which I learned how to use occluder/occludee static objects to bake & visualize occlusion culling:
^Without occlusion culling
^With occlusion culling
This worked fine so I implemented it in my environment. I added an occlusion area so that the player camera would always be just inside the bounding box. I learned that if you want to open/close/remove objects at runtime, you have to use occlusion portals and open/close them via script.
^Stairs closed in game
^Stairs closed in scene
^Stairs open in game
^Stairs open in scene
After implementing this I realised however that using occlusion culling destabilised my FPS, which is why I didn't include it in the final build. This is probably because my level is quite vertical, and the player mostly looks forward when walking down the stairs, so much of the loaded level above gets frustrum culled by the engine already. I also tried to just bake the biggest objects, which are all of the statues, but this gave me about the same results (so no increase in FPS).
This was kind of a bummer but I'm glad that I tried it nonetheless.
^With occlusion culling
^Without occlusion culling
While profiling I noticed a large FPS drop in the editor every now and then when walking around. I l thought this would be the result of garbage collection, but after looking online I saw that others made this go away by changing their windowed mode in project settings from Fullscreen Window to Exclusive Fullscreen, which... somehow worked. Before I came to this conclusion however, I tried changing the player's Rigidbody/Player Controller Component's physics settings but this didn't change anything.
I don't know why changing my window mode helped but for time's sake I wrote this off as just another fun Unity bug.