Someday I'll get around to actually making a proper thread on this subject given it returns like a half-brick to the skull every couple of weeks now.
A couple of things said in this thread are sorta right, most can very easily be ignored due to just well plain ignorance on the subject from those dishing out the information.
I'll very quickly cover the subject on the whole though, which could easily take up several posts at maximum size.
Q: How many polygons can I have in my game?
A: How long is a peice of string?

Seriously that is basically what you're asking with that.
The number of polygons your game will be able to handle is entirely dependant upon, the minimum system you wish to run it on; and how well that system handles your code.
A good example would be the system I'm currently writing this on is:
Athlon64 X2 3800+, 768MB RAM, GeForce 6100 256MB RAM
Now theoretically, this setup should be able to handle roughly 1.2million polygons (triangles) per scene at 60fps textured and lit (by a single light source)
Realistically in DarkBASIC Professional with nothing else running, I've found it's far more likely to handle closer to 600,000 polygons (triangle) per scene.
This might seem like a lot, but when you start breaking that up in to more objects (not just one), animation, adding shaders, etc... this figure starts to drop dramatically.
So even if you can gauge what your system will handle, there is certainly no given you'll be able to keep that throughout.
It's not likely but let's for arguments sake say you're minimum system is the same as this setup, and again for arguements sake we'll say that you can use 600,000 polygons (triangles) on-screen at once even with your shaders and textures (which I'll cover in a bit).
Q: Alright so I have my polygon limit, how complex should I make everything?
A: As rules of thumb, even if you know exactly the limit you have you should always aim below that when initially creating your media. Given yourself some headroom here, as you never know exactly how many polygons will hit the screen at once (not that polycount is really your biggest consern tbh).
So we'll say, 100,000 out of 600,000 is our headroom. Leaving us 500,000 to actually play with.
The question is how do you really divide this up effectively?
Well this is done by determining what sort of game you're working on and what you need to have on-screen during this.
We'll use a first person shooter as an example because they generally have the most diverse numbers you'll see.
Here we can take a couple of case studies to show the different decisions made.
Not first thing to remember, is that number you have above that you've "discovered" your minimum system can handle. Yeah ignore that.. like completely for now.
I'm sure during your design phase you've decided what sort of game this will be (yeah it's an FPS, but believe it or not there are different types of FPS), for this we can bring out come case studies of potencial situations for your game.
Gears of War, Halo, and Serious Sam.
Now Gears, is strictly aimed at more technical and calculated action. So generally speaking there are never huge numbers of enemy on-screen at once. Focus is more around the environment and your useage of it. Another big factor of this game is you have team-mates along with being able to see yourself, as such a big part that has been taken out of the equasion is the visually represented weapon.
Let's say we 4 team members (including yourself), 16 possible adverage enemies, plus the environment which is split into playable area and background area.
As focus is on the environment we want to spend around 50% on that total. This leaves you to share 50% between 4:16 (or 1:4) .. so 10% on team, 40% on enemy. As far as the environment goes, again you want to split this between what you can see and as the distance objects are still a huge part of the atmosphere 15% to that and 30% to the playable terrain seems like a good enough compromise here. We're left with 5% that covers pick-ups.
So let's break this down in to the sections we've decided from what your refined max is:
- Characters Total - 250,000
- - Team (4x Character) - 50,000 (if we say 10,000 each this leaves 2,500 free for equippment)
- - Enemy (16x Basic) - 200,000 (again we'll say each is 10,000 so we have around 2,500 free for equippment)
- Environment Total - 250,000
- - Playable - 150,000
- - Background - 75,000
- - Items - 25,000
Total - 500,000
I mean for the enemy, you basically have 200,000 to share amongst all of them for on-screen at once. So you might half what their count is to double the number you can have on-screen... or double it for a boss but still have enough for a handful of little monsters.
For the most part you design the set-peices you're going to have and then decided how many can be on-screen at once and of what sort. If you want bodies to remain throughout the game, then scaling back often is the only real option.
After breaking it all down however it becomes obvious you really don't have anywhere near as much as you'd probably liked.
As was said above those, the best thing after figuring all this out; is to really work to a lower number for everything the enhance later if you can squeeze enough speed out.
Usually once you set on a character/enemy polygon count that'll never really change; instead you'll increase the world detail. Often this is a better scenario as it's much easier to do without quite a fair bit more work.
Q: Yeah this is all well and good, but what are the main causes for slow down causing low-polycounts?
A: Everything really. I mean remember the game in general has more going on than just the visual aspect. You'll probably have AI, Networking, Collision, Dynamics (Physics), Shaders, etc...
each of these things can take quite a bit of processor time, and affect the loop speed that in-turn affects the graphics potencial.
Also remember that, you don't only have a polygon limit, but also a pixel limit, and memory limit. While textures of 1024x1024 might look really nice and give high-resolution to your models detail remember they take up quite a fair bit of graphics and system memory, take longer to move between the two and generally take more power to render as they eat up your pixel throughput.
So using lower resolution textures, helps.
Also keep track of what texture is doing what... for example Shaders now generally use a Diffuse (colouring), Normal (lighting) and Specular (Highlighting); so that's 3 textures for a single model. This uses a lot of graphics memory for multiple objects, especially with high resolution models.
You'd also be good to not that a single texture = multiple draw passes for the entire model just to do a single material area (especially with Shaders)
So splitting up your textures into several smaller ones often you can get more detail, waste less space and be able to then set each aspect in it's own draw queue. This will cut down on the number of draws (which the less the better performance!), memory space, and often overall processing power needed.
Animation wise, less bones = less cpu power needed; although more keyframes = less cpu power needed for interpolation. Flip side being the model requires more space in memory.
A very good idea is to actually let a physics system take over the animation and only use basic keyframes... something good to remember is that DirectX Skin&Bone animation allows you to set time-indices for each keyframe.
So a walk animation only needs about 4 keyframes, combined with a physics ragdoll and IK you retain a fairly realistic walk at very little memory overhead and more reliance on the CPU during the physics calculation cycle (if TGC ever sort out DarkPhysics to be MultiThreaded, this means that it'll end up pratically no cost either over normal physics).
If left to a simple interpolation system though (believe DBP uses a Bicubic Interpolation) then we'll you'll need to set keyframes at regular intervals.
Try to keep all animations to around 6-15 keyframes across every 30-seconds.
If you're using Shaders, then make sure you know their rough throughput values. For example, anything using vertices (even just reading) will mean you can only use half the polygons you originally wanted to. As far as the pixel aspect goes, remember the shader will be running the same number of times as the rendered frames per second.
So if you have a full-screen shader, on an 800x600 resolution doing something like bloom. Then you'll find you'll render:
28.8million pixels/second (at 60fps) just doing that on everything; and depending on how well it's written it might take double that doing 2 passes for blur, plus a few nanoseconds calculating. The more complex the more calculation time.
If you have say a shadow shader on all 20 characters on-screen at once... and you're doing say shadow mapping; then you'll probably output to a 512x512 texture in order for it to be smooth enough.
So you'll be doing 512x512x20x60 (315million pixel/second) when you have a budget of 1.1billion/second, and you've just blown 1/3rd on shadows alone.. you can start to see how careful you have to be if you're actually thinking about it.
All of this is just really theoretical more than anything else based on Gears of War as a case-study. It's quite ironic really but atleast half if not more of that games possible polycount is lost purely due to what it can do pixel-wise.
I mean after all while yeah, the cards have a 1.1billion/sec pixel fillrate; on the flip-side that's if there is no 3D going on. So the fillrate also affects what you can draw and use.
Most of the time trial and error is just frankly easier. Microsoft DirectX PIX will go a long long way to showing you bottlenecks and what is happening, but on the whole you'll be just fumbling after you have your preliminary figures in a T&E fashion to get the best out of your engine.