The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' (I found it!) but 'That's funny ...' -- Isaac Asimov

Introduction

It's a little bit disappointing to see that the industry still are clamoring and lamenting the (supposed) difficulties of developing for the Playstation 3. Meanwhile, the consumers must be either thinking that the PS3 is a load of crap, or that the developers are. I can't really decide if they are correct on both accounts or if we as an industry have to get over ourselves and just stop whining and get to work. Now if it was easy to develop top notch video games, then they wouldn't need us, right?

Retrospect, last generation

Looking a little bit in the past history towards the last generation where the Playstation 2 dominated the market, with a small SKU of the Xbox games and an even smaller of GameCube games, what did we do for cross platform games? We started with the platform that was deemed hardest and then moved on to port it to the others. The fact that the PS2 was earlier to hit the street than the Xbox, as well as having a ultimately a larger install base, just made the decision easier to make the harder platform, the PS2, the lead SKU. The PS2 was a remarkable little machine, with amazing power hidden under the hood. You really had to coax the power out of it, but in some instances it actually managed to be on par or surpass the Xbox, which was supposed to be the more powerful machine. Certainly the Xbox was deemed the easiest of the two machines to develop for. So we did a PS2 version and then ported it to Xbox, or had the PS2 as the lead platform where all the technical decisions were made, and the Xbox had to follow along as good as it could.

PS2 Slim Silver
Figure 1: Last generation's ruler, the Playstation 2 console.

Current generation

Now when we're well into the current generation of consoles what do we do? I guess that Epic have a lot to do with the current state of affairs, they were early out and banging the drum about how hard the Playstation 3 was going to be as a development platform. They really got the message out there, with no ulterior motive. No, wait, they also told you that they had a solution, the Unreal Engine, that you could buy. In retrospect, that might have been a tad too optimistic. It turned out that Epic themselves went the route from PC to Xbox 360 to PS3. With less than stellar result. While very few really disagree that the better way to make a cross platform engine today is to first engineer it on the PS3, then port it to Xbox 360 and then maybe perhaps (never?) go to PC, most people do it the complete opposite. Why is that?

Playstation 3 console
Figure 2: Playstation 3 console

Some might argue that it's unrealistic to rewrite so much code or that they have to reuse the code they have. It's hard to argue against this with only a gut feeling that in the end they will spend a lot of time, perhaps a lot more time, trying to optimize and cutting features to even get the game to run on the Playstation 3 since they made all their choices on the Xbox 360/PC. In the end the game on the PS3 suffers. A bad port with downscaled content and features. Then you start to wonder if the PS3 games with a theoretically 10 times faster system (ok, in reality not that much) can not beat the good PS2 games (e.g. Final Fantasy XII, God of War II) what are we as programmers doing?

At the end just before the current generation consoles came out, the atmosphere was that the next-gen machines were going to be so powerful that you didn't have to take a lot of the pains on the (then) current generation machines. You could start using STL, don't worry about memory and CPU cycles would be in abundance. I guess we all got a really cold shower. I would argue that nothing really have changed. Sure we've got faster frequencies. But not from main memory in the same proportion as to CPU. It's even more important today to think about memory since it effectively moved further away from the CPU. We also got less of it. Today we're expected to have much more content in the game. Most of it really just vanishes in extra textures. More bump and specular maps galore. Some buffers for post processing effects. On top of that perhaps some accumulation buffers. Where did my memory go? Oh yeah, we're expected to have a gazillion particles and physics objects flying around. Hm, I guess we better at least store their positions and velocities... As the list goes on, we are equally or more strapped for memory on todays consoles as we were on the last generation. Again, it's more forgiving on the Xbox 360 with its unified memory.

Xbox 360 console
Figure 3: Xbox 360 console.

So why do people insist on making the Xbox 360 the lead SKU? Is it marketing that announces that there are more Xboxes out there and thus it should be considered the more important platform? If that is the case, then somebody should be fired. I would argue that the only call marketing can do here is weather or not make any SKU, the thing they could come in and say is that the projected sales on the PS3 would be too small and thus they should drop the entire SKU. But to dictate which SKU should drive the technical decisions? That's crazy. If any other technical people advices you to make the Xbox 360 the lead SKU, I would like to talk to them and ask what their secret sauce is...

It is definitely not as clear cut this time around as it was for the last generation which SKU to make the lead one. The Xbox 360 have a significant lead in both numbers and also when it first hit the streets. Many (non technical) managers may be swayed by the (for now) larger install base and potential sales on the Xbox into declaring the Xbox version the lead one. This is where we as technical people must fight back and make it clear that although it would be possible to have the Xbox as the lead SKU, there will be an easier time to do it the other way around with the PS3 as the lead SKU - and less grey hairs for the programmers.

Development environment

My personal belief is that since the Xbox had the first good, or even native, visual studio integration it was a favorite. The other platforms had various incarnations of a gcc based toolchain, which for most developers were something that came from Mars. To this day I meet programmers that if they can't se a combobox in visual studio, the option might as well not be there for them. Needless to say, the GCC compiler is very much driven by the command line, given its UNIX roots. Command line driven interface are arguably less user friendly than a point and click interface, which is why this might scare people away.

Now, Microsoft has always been a software company first, and it really shows in their development environment. Say what you will about Visual Studio, but even with all its warts and flaws, it's still the best environment out there. Basically all the others suck worse. In the end, the environment for Xbox development is extremely familiar for developers already at home with Win32 development under Visual Studio.

Hardware

Another thing that sets the two systems apart is the hardware. On the surface the two processors might look very similar, both have PowerPC cores with roughly the same deficiencies. The CELL does however also have the SPU processors, whereas the Xbox has it's 3 cores, which maps better onto the PC hardware and paradigm than the SPUs. The SPUs on the other hand requires really good discipline on memory patterns and data arrangement. Not that this is a strange concept to any console programmer, but the extra kick here is that whereas it ran slow before on previous consoles, it usually won't run at all on the SPU if you have bad data structures. Rearranging data structures is one of the more painful things you can do on a large code base, say for example some legacy PC-engine. The amount of work required is daunting, and in the end you will have done more work for less performance than you would have gotten if you just have written the thing from scratch. Which is really dissatisfying and moral crushing as a programmer, here you spent all this time to optimize, and you barley come up to the levels the mindless coding brought on the PC. And yet, you see that if you just could have coded with the grain on the PS3 it would not have been as difficult and certainly faster.

Likewise it is ironic that while the graphics cards are closer to each other today than they were, we still have to look at both of them in detail to design a pipe that can run decently on both. They both have unique features and some pitfalls, which if you call in them can seriously hurt your performance. Unfortunately the pitfalls are not always overlapping so you have to consider both architectures.

In closing

Until we as an industry make an honest effort on the PS3 we will continue to see reviews that claim that the PS3 version of the game is a disappointment, buggy and just downright bad. Given that the game probably is good on the Xbox, this is mostly a reflection on programmers. As we get further and further into the console generation, it will just look embarrassing since you can't really blame it on the launch title syndrome anymore. Games like Uncharted: Drakes Fortune and Ratchet and Clank really show that you can make amazing games on the PS3. What's their secret sauce? They develop exclusively on the PS3, so there is no question that all the technical decisions are made with PS3 in mind. The thing is that we are so early on into the PS3 development that most companies are just using a fraction of what the SPUs can do. The code that runs now on the PS3 could easily be run on the Xbox with little speed difference. As we start to use more and more of the SPUs, the gap will widen and at some point the Xbox will not be able to keep up. Maybe at that point Microsoft will put out a new console based on CELL? But until developers start to treat the PS3 with a healthy respect, then we can continue to see bad ps3 ports delayed. Meanwhile I'm probably going to continue playing Mario on the Wii and forget about the power console war.

References

Here are some random pages with PS3 related news with comparisons to the Xbox 360 versions.

Comments