FPS not increasing when visibility to complex objects is blocked

I expect that in a particular scene when complex objects (shaders, a lot of vertices etc) are visible in the viewport, the FPS should be much lower than when a single simple object takes up the whole screen. However, this is not entirely the case in my test.

I have a scene with a terrain. On one side there is a complex forest, while on the other there is nothing, apart from terrain and sky. I place a big simple object in the middle (either a rock, or a BSP Box).

I take the FPS depending on what’s visible in the viewport. There are 4 cases depending on the direction of the camera and whether the large simple object is in front of it. Visible in the camera/fps:

  • The forest: 24 fps
  • The object, while the forest is hidden behind it: 31 fps
  • The empty terrain: 48 fps
  • The object, while the empty terrain is hidden behind it: 52 fps

It can be clearly seen that putting the object in front of the camera increases the fps somewhat due to a simpler scene to render. However, the improvement is nowhere near what I expect. It seems that the scene behind still decreases the performance quite a lot, even though it’s not visible. Initially I expected to get the same fps when the simple object
takes the whole screen, regardless of what’s behind it.

Is this by design? It poses a performance problem for me. The thing is that I planned to build my level in a way that huge rocks block the visibility in different places. This way I make sure that in every scenario only a part of the level is visible, therefore there will be no huge performance hit. However, since the FPS does not improve much even if I block visibility to the rest of the level, this approach cannot work. How can I optimize my level in this case?


Extra info: in case that’s important, my bottleneck in case of looking at the forest is mostly the GPU, and while looking at the empty terrain - mostly the CPU. In any case the GPU is superior to the CPU (OC HD 6950 / Phenom x3 @2.4). Another thing that might be relevant is that every plant in the forest has a wind animation (though turning it off did not change much).

Forest:
Game: 18 ms, GPU: 41 ms
CPU usage: 87%, GPU usage: 85%

Empty terrain:
Game: 18 ms, GPU: 21 ms
CPU usage: 87%, GPU usage: 70%