temas and I have been working on improving OGRE’s speed when dealing with scenes with large numbers of arbitrary SceneNodes, and the results are now in CVS.

Previously OGRE would slow down when using many hundreds of nodes, which made it harder to use a lot of separate moving objects in your scene (note that ‘world’ geometry and particle systems were not affected by this slowdown because they use a ‘batching’ approach).

I’ve just committed the results of this work into CVS, and those of you with large numbers of SceneNodes in your scene should see significant improvements. As an example, I had over 1600 objects of 700 tris each (at full detail, LOD reduced this) running in release mode on my system at a steady 60fps just now. Before these updates, this size scene would have reduced OGRE to a single-digit framerate.

To achieve this, the updates that the node hierarchy does are more specific than before, rather than the whole tree being parsed every time. If you rely on the getDerived..() or getWorldAABB() methods being 100% up to date, then you should ensure that your code that relies on it is either scheduled after the global scene update (i.e. in frameEnded rather than frameStarted), or you should update subparts of the scene yourself by calling Node::_update(). The beauty of the new approach is that if you do call _update() yourself, the global scene update will skip this scene section unless further changes are made to it, so you won’t be doubling up the effort.

Please fire any queries at the team in the Forums.