Amount that can be rendered on iPad

Hi there.

I’m creating a game for iPad2 (and iPad-Mini/3/4, but lets talk iPad 2 for now) which I’m trying to ensure will keep running at at-least 30 fps.

There is next to no transparency in the game.

I need to get a ‘ballpark’ answer about max-polycounts that I can give to modellers. Is there any way I can calculate a rough ‘max-vertex-count’ on screen at any moment? I only need a rough figure?

I know at the end of the day there is no substitute for testing, but when you are paying modellers to create stuff (on a tight budget); you cant really ask them to create ‘proxy stuff’ just to check out if it works or not, and then keep scaling back/up. It simply will become too expensive. I just need to have something to begin with to cut out a few of those ‘back and forth’ sessions with the modellers and save some money / time.

Cheers

So, the GPU on an iOS device is a tile-renderer. It works very very very hard to avoid drawing each pixel more than once. iOS GPUs do not have z-buffers in the usual sense. Instead the toss triangles into tiles, and then sort these triangles in depth order, and work out which triangles are not visible (because they are occluded by triangles closer to the camera). The following may not be factually true, but see it as a way of thinking. Suppose your scene has 1m triangles, but these triangles are mostly obscured by some large object close to the camera with few triangles. The CPU will submit 1m triangles to be rendered, but the GPU will eliminate many of them hidden behind the large close object. (Perhaps it’s a big boss coming close towards you in a first person shooter). Since many of these 1m triangles are hidden then are not drawn, or shaded, or anything. So, you can see that the game can submit 1m triangles. The GPU isn’t drawing this number though. So, how do you measure the triangle count? You could say that your game is drawing 1m triangles.

Now, as whydoi… says, what’s (also) important is how many shader instructions are used to paint each of those visible pixels. A complex shader might restrict the fill rate too much. Also, switching textures is expensive, so too many draw calls can have an impact. Further, the amount of bandwidth between the CPU and GPU can be a problem. If you are shipping lots of textures and lots of vertices with lots of parameters per vertex, then this bandwidth might be a limit. Choosing textures of the appropriate size matters.

What makes you think that your game is going to be GPU limited? What processing are you going to do on the CPU? The framerate might be determined by the CPU, not the GPU.

Now, I know you asked a simple question. I’m not trying to baffle you with an essay of an answer. 100k might be a good limit. My advice would be the same as Fattie’s. Do some experiments with free models to start to gauge what works for you. Use the production shaders you plan to use in the game. What you want to try to avoid is to pay your artists to do their work, get to within 2 weeks of shipping, and then need to rework the artwork to keep to your frame-rate, or fit within the memory budgets of your target audience. Alternatively, get relatively low-poly models made cheaply, and as you get closer to the end of the production swap out these low poly stand-ins for higher quality ones. You can always ship on iPad1 using the low poly models.