Object "size" vs render speed

I’ve been doing a bit of benchmarking in an application I’m working on, and I’m noticing a significant difference in frame rate depending on the number of vertices in the objects in the scene, even if the sum of the vertices for all objects in the scene is the same. For example, if object Obj1 has 10,000 vertices, and object Obj2 has 100,000 vertices, I can acheive a DRASTICALLY faster frame rate rendering 10 of Obj1 than I can rendering one of Obj2.

That said, they’re being stored as VBOs, I’m sure that also has an effect as well. Still I would have thought the fps would average around the same for two scenes with the same number of vertices… An interesting observation is that for one object I’ve been using which is around 6k vertices, a scene with two of it takes only 33% longer to render than one of it, but for an object with 50k vertices, a scene with two of it takes 2x the time.

Is it accurate that a scene can be rendered more quickly by drawing a lot of “small” objects than a few “large” ones?

This is propably because you are crossing a 16 Bit boundary.
You could test the difference between 65000 and 66000 vertices per object.

Well, that was a random example. More specifically, I have two objects, one that’s ~6k and one that’s ~50k, and a scene with 8x6k takes around 15% as long to render as 1x50k. But like I said, all the objects are generated into VBOs, so I can see where that may effect the results.

That said, even if all of the 6k objects took as long to render as the first one, it would still only be around 35% of the time to render one of the 50k.

You can actually get your application to be fill limited, where the GPU is just processing more area to the screen. You can see this if you draw quads to the screen at different sizes of your viewport. The fps should be affected by the size of the quads if that’s your bottleneck. I know this happens a lot with shadow volumes being drawn out, which have a relatively limited geometry but have lots of fill.

strattonbrazil - I’m not sure quite what you mean. Can you elaborate a little? I don’t think I quite followed…

Look at the “fill limited” section of this page.


Think of it this way. If I draw a small quad on a screen, say 10x10, that’s 4 vertices to process and 100 fragments (more or less). If I just make that quad larger on my screen, say 100x100, that’s 4 vertices to process and 10,000 fragments. You see the physical size on the screen determines how much shading the GPU has to do.