How many polygons is too much?

Hi, I am having allot of trouble with this one. I am working on a major game project with a group from my school and have been placed as Art Lead. For this I am trying to make my poly budget and cannot get a straight answer. So I guess my major question is, if we are making a browser based game target at systems are average to slightly higher specs how many polies can I put on the screen at a time?

Honestly the more I read the more answers I get, anywhere from 30K to 500K.I know being in the browser does pull it down some but I really don't know how much.

Thanks

The answers given are pretty good, just thought i'd through in a few of the keywords that might help you search for more information.

DrawCalls - every time a model is drawn to the screen you have to issue a drawCall to the gpu. Unfortunately its not as simple as 1 call per model. Its more like 1 call per material within your model. So if you have a single model, but with 5 sub-meshes, that will be 5 drawCalls. Alas that is not the end of it, you also have to factor in if using per pixel lighting that you get a drawcall per light pass or if you have dynamic reflections (or similar effects) you'll be rendering the scene at least twice, potentially doubling draw calls.

Something that can help here is material batching, or rather model/mesh combining that share the same material and are spatially local.

FillRate - this is the amount of pixels that can be drawn a frame or to 'screen per second'. This is pretty hard to pin down as you'll never reach the manufactures stated values, at least not with typical usage. The main aspect to be aware of here would be to minimise overdraw , especially with regard to transparent textures, though I guess these days with multi-pass shaders they can burn up your fillrate too.

An easy test to see if you are fillrate limited is run the game windowed at a small size, check the framerate, then increase the size, checking framerate each time. If you reach a window size and the fps drop off dramtically you've hit the fillrate limit.

Bandwidth Limited - Probably not worth mentioning these days since most if not all persistant data is stored on the gpu, though you could still find ways of saturating the bandwidth (i.e. uploading to much data to the card in a frame), but I would have thought it unlikely.

Finally there really is only one way to 'know' this and that is to test on your baseline machine. However what you can do is try to ensure that models are created with a view to easily increasing/decreasing polygon count. Though i'd not advise simlpy running a LOD over it. It has to be thought out a little, but talk to the artists and see what they can do. Doing this will allow you to tweak you polygon count during the project.

In terms of budgeting it may be more helpful to think in percentages. e.g. the environment gets 50% of your polygon budget, characters get 25%, effects and other stuff get the last 25%, etc. Then you can start breaking down those numbers more. For example your lead character might have twice as many polygons as enemy characters, but you might want 10 enemies on screen at once, so that gives roughly 2% per enemy and 5% for lead character.

Once you've got that, you could easily mock up a simulation of those assets pluging in different max polygon counts. E.g. 100k limit, so 50k for environment, 25k for characters etc. Create very rough models that emulate the dimensions and polygon count and place those in Unity and see how it runs. If its too slow, reduce you max polygon count, if its too fast, increase it.

Obviously don't make the environment a single model, as its likely to be made from 10's of models, so do that. Its pretty vital to apply appropriate shaders to the models for checking fillrate/overdraw - (in the editor there is a handy option to draw the scene with a special shader that helps to visualise how much over-draw is going on.)

I'm afraid your varied answers are really down to the fact that it isn't as simple as polys. Performance is heavily dependent on other things such as texture size, code complexity and physics usage. To make matters murkier still, browser games are generally aimed at an even wider scope of hardware specs than perhaps any other platform.

So the best way is to experiment. This isn't difficult or time consuming, but very sensible (looks good on your planning too if it's coursework!)

  • Decide on your mean target spec. You will need a machine that meets (but not exceeds) it. You will need this anyway for testing.

  • Create an object, could just be a bundle of tetrahedrons, with a 3D program. Make sure it has exactly 100 polys (or some other set number). Textures and maybe some animation are a good addition. But doesn't matter what it looks like.

  • In a blank Unity project, import the object. Write a script to duplicate it / set number of it on the screen at any time, at the press of a button or with a number entry box. Keep a counter on screen of number of objects (or number of objects x 100 or whatever the polycount is, if you prefer).

  • Add a frame-per-second display. I believe there's a script for that here.

  • Export to web and try on your target machine. You will want to keep the frames at no less than 20-25 really, but this is up to you and your game.

How many polygons you should use depends on the quality you are going after. Anything between 500-6000 triangles is reasonable. If you want lots of characters on screen, you will have to sacrifice in polycount per character, if you want it to run on old machines, you will have to use less polygons per character. As an example: Half Life 2 characters used 2500-5000 triangles per character. Next-gen AAA games running on PS3 or Xbox 360 usually have characters with 5000-7000 triangles.

You also want to keep the number of Materials on that Mesh as low as possible. There is only one reason why you might want to have more than one material on the character: when you need to use a different shader (e.g. if you want to use a special shader for the eyes). However 2-3 Materials per character should be sufficient in almost all cases. If your character is carrying a gun, it might be useful to have the gun a separate object, simply because it might get detached.

Most modern computers can handle about 150000 verts give or take a couple thousand. Unless you have a really complex game, verts really won't be a problem.

Hope this helps!!!!! :P

When using multiple UV sets go with "verts per frame" instead of "poly's per second". My experience is on consoles and I would aim for around 150,000 verts per frame to run at 60 frames per second. I would probably double that for PC.

This is your starting point. Use too many transparencies or shaders and your number goes down. Get smart with your material usage and your number goes up. It's a never ending balancing game until the day you ship.

Also, have your frames per second counter on screen and have it flash red when you drop below an acceptable framerate!

What about mobile games such as a 3d iphone game? What’s a good polycount for that?