Weird, suddenly I can't access jmonkeyengine.org. If I remember correctly, per its documentation, this engine only does frustum culling. So if an object has any part inside the frustum the whole object is rendered. In case of multiple submeshes I don't know If each submesh is checked again the frustum, I think they aren't.
Correct me if I'm wrong but when a triangle isn't visible due to the direction it's facing, the vertex shader will still run for that triangle but the pixel shader won't, so invisible triangles should be cheaper than visible ones, correct? While triangles facing in the right direction but occluded by geometry nearer to the camera will go through the pixel shader only to get overdrawn latter. I think let the GPU overdraw things is still faster than a bad occlusion culling implementation. If I were to implement It myself I don't sure what to do about semi transparent objects and such. I will try to survive with Frustum culling for now, older hardware worries me but well...
I need to clarify that the corner shown in the screenshot It's not the whole chunk, I choose a spot with good illumination to take the screenshot, but the statistics shown in the debug box are for the whole chunk. I think we can safely conclude that the engine is rendering the whole chunk at once.
My recommendations in short form:
1) Find out if there is an occlusion culling mechanism in JMonkey engine and use it.
2) Find out if there is a static batching mechanism and make sure it is active for all your panels.
3) See if you could reduce the polycount of those panels... with proper optimization, the visible poly count should be okay, but I would rather use the polys for objects that make better use of it than just a displaced rock wall.
1) I think we are out of luck here.
2) There is, they call it GeometryBatchFactory, I think. I don't tried it yet.
3) As the base panel is very simple I can always just redo it again or I can use the Blender decimate modifier, that will reduce the polycount without noticeably affecting the mesh (most of the time). I wanted to confirm if my polycount is acceptable or not so I know if I can just leave It as It is now or if It needs to be edited again. OK, I will try to reduce polycount while It still looks acceptable.
A better measure in is a rolling statistic, perhaps once per second, with the minimum, average, and maximum times between display, in milliseconds. Perhaps you may see 3.24/5.43/5.98, which tells you all the frames are going along at a nice pace, or you might see 0.45 / 5.43 / 206.34 which means you've got a lot of very fast frames and occasional frames that are terribly slow.
I will try it, I think I can collect the per frame statistics in some kind of list/queue and then iterate through It each second to do averages. I don't know if the engine already does that for you.