We are developing a game (cross-platform) using Irrlicht. The game has many (around 200 - 500) dynamic objects flying around during the game. Most of these objects are static mesh and build from 20 - 50 unique Meshes.
We created seperate scenenodes for each object and referring its mesh instance. But the output was very much unexpected.
Menu screen: (150 tris - Just to show you the full speed rendering performance of 2 test computers)
a) NVidia Quadro FX 3800 with 1GB: 1600 FPS DirectX and 2600 FPS on OpenGL
b) Mac Mini with Geforce 9400M 256mb: 260 FPS in OpenGL
Now inside the game in a test level: (160 dynamic objects counting around 10K tris):
a) NVidia Quadro FX 3800 with 1GB: 45 FPS DirectX and 50 FPS on OpenGL
b) Mac Mini with Geforce 9400M 256mb: 45 FPS in OpenGL
Obviously we don't have the option of mesh batch rendering as most of the objects are dynamic. And the one big static terrain is already in single mesh buffer. To add more information, we use one 2048 png for texture for most of the dynamic objects. And our collision detection hardly and other calculations hardly make any impact on FPS. So we understood its the draw calls we make that eats up all FPS. Is there a way we can optimize the rendering, or are we missing something?