How to improve performance in scenes with 20k+ geometries?

Hello,

in the context of my doctoral thesis in germany, i’m working on the visualization of large scale software systems regarding aspects of high layout stability and compactness. A quick overview (maybe as from 4 years ago) you can find at Software-Cities.org. In our tool we’re using jme for the rendering. JME is integrated since version 2 and was ported to version 3 several years ago. The main mechanism is to extract structural and evolutional data from a software project, transform it in our model and then compute different layouts for the visualization, like packings, treemaps, circular and street approaches.

The scene graphs leaf elements are always simple geometry objects like boxes or cylinders with a low number of vertices. We’re not targeting ‘real world cities’. In the moment i’m working on a system with 25k classes and 200k relations (inheritances, imports, calls, …). When rendering the scene the performance is breaking down massively, so that a simple mouse translation tick takes several minutes.

Now the main question: Do you have any hints on how to improve the performance? In most cases it’s absolutely neccessary, that each object is visible (overview). Batching is not a good idea since each object needs to be focusable (additional information in the local context). We’re currently working without culling because there was a problem with our height field generator.

Best Regards
Moe

PS: Hardware Specs are great, Intel Xeon 3,2GHz with 12GB ram and an AMD FirePro V7900 shown at 2560x1600.

The BatchNode allows still picking single geometries in it.

Use less geometrys is the only way.

I feard this answer :wink: For testing purpose i disabled MSAA, VSync and setup dynamical culling. Now it’s partly navigable.

I read a bit about batching. Is there any tutorial where batch nodes are used? I think it will bring a lot of complexity into our layout graph.

If this adds complexity you probably depend too much on the scenegraph for your data structure. You basically just add things that are supposed to be batched to a BatchNode and call batchNode.batch().

I just give it a try and report back when batching is integrated. But thanks a lot for the quick answers :slight_smile: