# List of objects in scene with counts (verts, faces, tris)?

Is there a way to see a list of all objects in the scene with the number of verts, tris, faces of each object?

I know you can click on a object and go into edit mode and it shows the numbers, but if you have many objects in a scene and you have to decrease the amount of verts in the scene this procedure gets tiresome.

A list with all objects of the scene and their counts where you can immediately see where you could possibly remove some verts would be very handy.

## ------------------------------------------------------------

Edit: If anyone is interested the user sambler and i (independently) both wrote an addon. Look further down for his solution.

The addon shows the geometry information of the scene. It is sortable and you can select an object by clicking on the button.

• @brasshat: your link is not working anymore. I'd like to try yours for the sorting portion (nothing against samblers, it works). Any chance of re-posting it? – Jahf Jul 24 '15 at 21:43
• @Jahif, thanks, but it was not my link. I merely added one tag to the question. The missing link was by Biene Maja, who does not seem to have been active in the community for nearly a year. . – brasshat Jul 26 '15 at 10:18
• Maybe if someone has this they can reupload it somewhere? Otherwise the question should be edited – MicroMachine Jan 17 '17 at 6:56

I miss the tris so far but you can do that :

import bpy
print("Object, Verts, faces, edges")
for element in bpy.context.scene.objects:
if element.type != "MESH": continue
print("%s, %i, %i, %i" % (element.data.name, len(element.data.vertices), len(element.data.polygons), len(element.data.edges)))


That will return in the console the informations you are looking for :

Object, Verts, faces, edges
Cone, 33, 33, 64
Cube, 8, 6, 12
Cube.001, 8, 6, 12

• Note that this isn't the actual count of geometric elements on screen - modifiers are not included. – CodeManX Jul 4 '14 at 19:07
• 3 issues in this example, no need to call list(), and use bpy.context.scene.objects, not bpy.data.objects, if element.type not in ("MESH") is also incorrect. != 'MESH' is fine here. no need to call __str__.__contains__ – ideasman42 Jul 4 '14 at 19:20
• Thanks for the answers! Is there a way to include modifiers? – Biene Maja Jul 5 '14 at 13:58
• Thanks for the feedback and fixes. I'll update my post. But I was using "in" so he can include something else than the meshes if needed. But it's clearer with the other test. Sorry @BieneMaja, so far I don't know how to get the count including the modifiers... without applying them... I'll think about it. – Flavio Jul 7 '14 at 8:04

You can save this link to your addon folder or to somewhere convenient and use the Install from file button in the preferences. As awi's step of using bmesh to calculate the vertices after modifiers are applied takes some time in larger scenes, even without modifiers (a few seconds with a million verts scene) I have displaying that count as an option.

When you enable the addon there is an option to set how many mesh objects are listed (default is 5). The list is sorted by the true vertex count so you can easily see what objects have the vertices. Also large numbers are nicely truncated with k,M,G suffixes to make for easier reading.

Once enabled you can find the Mesh Information panel under scene properties.

• Neat! reminds me of the meshlint addon. – gandalf3 Jul 9 '14 at 7:52
• Nice :) I basicly did the same lol. – Biene Maja Jul 12 '14 at 22:27
• Thanks, however doesn't work completely with 2.8 (option modifiers displays nothing except number of vertices for the first object) – mins 2 days ago
• @mins yes I didn't update it after the 2.80 release, it is fixed now. – sambler 22 hours ago

It's an update of @Flavio answer.

There is a way to get the final polycount. An object after conversion to BMesh will have the modifiers already applied:

import bpy
import bmesh
print( "Object, Verts, faces, edges" )
for element in bpy.context.scene.objects:
if element.type != "MESH": continue
finalMesh = bmesh.new()
finalMesh.from_object( element, bpy.context.scene )
print( "%s, %i, %i, %i" % ( element.name, len( finalMesh.verts ), len( finalMesh.faces ), len( finalMesh.edges ) ) )
finalMesh.free()

• I was updating my question with your great answer but creating another answer is better. Thanks ! Beaware that if the finalMesh = bmesh.new() is not in the loop it will increment your answer and be wrong. I my case I had (before including it in the loop : Cube.001, 6179, 6177, 12352 Cube, 6187, 6183, 12364 And then (once in the loop) Cube.001, 6146, 6144, 12288 Cube, 8, 6, 12 – Flavio Jul 7 '14 at 9:09
• Whoa. I should never post without testing on bigger scenes :) Thanks – Oskar Świerad Jul 7 '14 at 9:53

Sorry for the up but it is thanks to this thread that I could write my own polycount addon, so I share it if this can help people : https://github.com/Vinc3r/BlenderScripts

Here stats are shown only for objects in selection, in verts & tri.