Finally overcame my performance bottle necks this afternoon, I always suspected I wasn’t pushing the Xbox’s GPU that hard with my poly count or texture usage, today I got 4 player split screen running at a solid 60 frames per second. I even did some stress testing an added 10 times the polys (32,000 faces) to the level decoration on the Egypt map and it still ran a 60 FPS.
I adding 3 avatar players dropped 5 FPS, so I think that must be about the limit, still even half that amount is more extra polys than I’ll ever have time to model up in the foreseeable future.
The solution proved to be a combination of GPU batch count and CPU load, which as I found out is directly related. Using the Slimtune profiler I identified a few interesting high frequency calls that quickly yielded considerable decreases in CPU load.
Interestingly setting the pitch variable in an XACT cue was quite an expensive operation every frame so I cut them back to every 10 frames for the engine sounds on the karts.
Another expensive call turned out to be nulling values in the large collision detection arrays, which I didn’t think would cost anything, maybe it was the loops themselves but leaving the references alone (and potentially some garbage in memory) and just resetting the counter was a lot faster.
Cutting down the batch count was mostly done by implementing mesh instancing, which worked really well in my game seeing there’s a reasonably high count the same objects.
A fair bit of work in the end but this extra performance will definitely give me plenty of breathing room to finish it off properly.