Here’s a sample screen-shot of this weekends work. I’ve been putting the extra performance I gained at the start of the week into moving most of the HUD sprites into 3D objects surrounding the player’s kart.
After the last round of demoing I did at the local game dev community session I realised my game is so intense that most people didn’t see any of the old HUD or on screen hint messages.
My solution is to move all those elements down around your kart so you don’t have to move your eyes away to see the HUD information, in the screen shot you should see:
- trail of coins you’ve collected (if you’re playing it with the shop enabled).
- You currently armed weapons floating just behind the kart, the circle reticule indicates the item that will be fired (you still cycle and shoot them with the right stick).
- Position indicators above the heads of all the players.
- The speech bubble for control hints and messages (“Yikes, pigs!!!” is telling you the pigs are after you because you’ve just picked up the truffle, that’s the weird blob floating above the players head).
I’ve still got to decide what to do with the heart health indicators, I think I’m almost at the limit of cluttering the screen. Also need to fix up the font on the lap time in the bottom right corner, but that won’t be too hard.
The shop is now completely broken, so that’s the next thing I’ve got to work on, otherwise I’m pretty chuffed with where all this is going!
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.