When trying to display some fairly large graphs (>50.000 Nodes) I noticed that the performance of the software renderer broke down quite badly, even though the current viewport didn't display more then a few hundred items.
Further experiments revealed that turning some nodes invisible improved the performance markedly.
I subsequently built a framework to automatically have groups in a ScrollPane invisible and only switch them to be visible shortly before they get scrolled into the viewport.
This solves my performance issues, but leaves a lot to be desired, because the only visibility I have access to is the public property.
Switching this has some undesired side effects (unneccessary layout passes, change of the bounds of the scrollable area) for which I had to compensate.
Furthermore, I suspect that this behavior might even be counterproductive if hardware acceleration is enabled - so I think a better place for it would be the software rendering engine.
So, to summarize, I'd like you to optimize the software rendering engine to handle Groups outside the current clipping area like invisible ones.
If you think you could use my code for switching visiblilty on scrolling, tell me -- I'd have to ask my management, but it would probably be ok.