I am having a bit of a dilemma concerning the abysmal performance of the iPhone 3G compared to it’s faster cousins.
Essentially our survival game runs less than is acceptable on the aforementioned device. Even firing bullets (which are pooled) slows the framerate down to 22 FPS in a completely empty scene that otherwise goes 45 FPS +. Could someone point out what we are doing wrong? The game is so lightweight!
How much of a requirement is it to support this device? Is it OK the dump such an archaic iPhone and still be successful in the App Store? We are building an iPad version which runs a solid 50 FPS + no matter what is thrown at it so that could technically compensate for lost 3G sales.
Just to say, we are quite good at optimization, so this isn’t really our issue. It seems more a trait of Unity - would stripping help? If so, how come it doesn’t work for us in Unity 3?
Sure the pooling logic works correctly? that you especially call start etc manually on the behaviours to reinit them and alike?
Sure that you use rather few materials so you get batching cause you are limited to 20 drawcalls basically on 3G and non batching projectiles would definitely have such an impact as you describe it and would explain why 3GS+ are not affected as the have the cpu power to compensate for it. on the other hand the ipad input there implies that you might be hitting the fillrate rather hard too which combined with drawcalls could bring the cpu and gpu to knees basically.
Also you don’t happen to kill performance actively by using particle emitters or mesh collision or too many vertices and polys?
hard to say without seeing the project though, so this happens to be quite some blind guessing out of experience of what kills and basing on your information on its performance on the ipad.
and no stripping etc won’t help here. its nothing about filesizes but about what you throw in at runtime.
Hey me and my wife still own iPhone 2Gs! They still work great, and therefore we don’t consider them to be all that archaic. I wonder if there are stats out there detailing iPhone ownership and the break-down between the various models.
If anybody has a link to “recent” stats about either devices in use or operating systems in use or a mix of both that would be great. I’ve looked and so far haven’t been able to come up with anything. Closest were adMob’s statistics, but those that I saw weren’t broken down per device or per operating system to get a good feel for which devices or operating system versions to determine how far back to support.
I have this same concern too, especially since current Unity 3 doesn’t support any skinned mesh batching at all which drawcalls will skyrocket when you have multiple moving enemies on screen…and almost everything is pooled. Thing is, I was playing Hero of Sparta on my 3G and it ran almost like crap on the device so we are not the only ones. Just last week I was asking myself if I should drop support of 3Gs (I don’t support older devices and wasn’t planning to) and just go 3GS and up…
It’s not about efficiency at all, if your game have more polys/physics than the 3G can handle you can do nothing to avoid that. Let’s suppose your game have 15k polys per frame, it’s impossible to run this on a 3g, no matter what you optimise
I’ve done a lot of optimisation to get my game to work at 60fps on an iPhone 3G. That includes controlling the number of polys per frame. Efficiency covers code, assets, everything.
To get 60 FPS the game must really be extremely opted and kept simple enough. with 3D I doubt its possible to achieve that at all unless you have Doom 3 alike view ranges
For my first two games the oldest, crustiest hardware was the target, but considering that they don’t even sell 3G’s anymore and the OS itself is leaving everything prior to 3GS behind, I’m not going to cripple my future projects so that they run 100% perfectly on the older hardware. I still plan to make my future games function on 2G/3G (i.e. not crash) but they won’t necessarily run like a dream.
chances it runs fine on 2G / itouch 1st gen is higher than that it runs on 3G actually due to the fact that first gen can’t trash the device with iOS 4
It is a 3D arcade shoot-em-up, rather than a first person shooter, but my point was it is all about optimisation, and if you have 15K polys per frame, that is one of the things you can optimise.
However, as MikaMobile has said, there is a point at which you must decide, would optimising for the slower devices compromise the sales on the newer devices. It would be nice to get the sales figures per device (not the same as active numbers per device because people tend to buy more in the early stages of ownership).
honestly… their arent many games the 3g cant play… Im sure there are a few that are just too labor intensive… but ive played many new games that play just fine… SOnic 4, and SOnic winter olympics played great… I would say dont limit market… There are tons and tons of iphone 3g’s that are still living… mine included
Hehe, actually 4.1 improves performance in some cases compared to 3.x. My latest game actually gained a substantial performance boost on my 3G test device by simply updating to 4.1. I believe the newer OpenGL drivers don’t suffer as badly from draw call overload as they did in prior OS versions.
4.1 got faster yupp, as apple got a few of their ARMV6 optimations in again.
4.0 was primarily ARMV7 opted.
the memory handling though still sux and unitys major achilles heel is just as present as it was on 4.0: the kill out due to the too high initial load time. iOS 4.0 and 4.1 both are in the range of 50% to 100% slower