PREVIOUS installment, or the FIRST POST.
While all this art design was going on, I, and then in January 1995, Dave, struggled to build an engine and tool pipeline that would make it possible to render these grandiose cartoon worlds we had envisioned on paper. Since during fall of 1994 Jason was also the only artist, he frantically generated all the source material and banged on my head to make sure it would look incredible.
Our motto was “bite off more than we could chew, then figure out some crazy complicated way to make it work.”
The Playstation had this oddball 512×240 video mode that everyone else ignored, it wasn’t standard (320×240) and ate up video memory others wanted for textures. But it looked SHARP and we found the machine was really good at rendering shaded, but un-textured, triangles. In fact, just as fast in the 512 mode as 320. Jason pointed out — he’s always been the master of seeing the intersection between art and tech — that since polygons on 3D characters our size were just a few pixels, shaded characters actually looked better than textured ones. So we went with more polys on the characters, less texture. This was a highly usual approach, but had lots of advantages. The characters popped, like cartoons are supposed to, we had lots more polygons to work with, and it worked around the Playstation’s lack of texture correction or polygon clipping.
Since the soul of good Animation, is…. drum roll please… animation! We were obsessed with making ours look like that really good Disney or Looney Tunes stuff. In those days, most people used a simple skeleton system with “1 joint” weighting, and very few bones. This gives a very stiff look, so we went instead with vertex animation. This allowed us to use the more sophisticated 3-4 joint weighting available in PowerAnimator, which the Playstation had no hope of matching at runtime (until the PS2), instead we stored the location of every vertex, every frame at 30 frames a second. No one else had the guts, as while this was easy to render, it required inventing some totally hardcore assembly language vertex compressors. First me (three times), then Dave (twice), then finally Mark took a crack at it. Mark’s was the best — being the best assembly programmer of us three — but also the most complicated.
Complexity became the name of the game at Naughty Dog.
We also wanted vast and detailed worlds. Dave, Jason, and I had done a bunch of research “post Doom” on visibility calculation. And Dave and I were convinced that extensive pre-calculation of visibility could allow the renderer to handle A LOT more polygons. So we did experiments in free roaming camera control and settled on branching rail camera + pre-calculation = gorgeous visuals.
The idea was that the camera would follow along next to, behind, or in front of the character, generally looking at him, moving on a “track” through the world. Dave and I experimented with pre-calculating the visibility and sort (the Playstation had no z-buffer, and hence no easy way to sort polygons) ahead of time on the SGI workstations the artists used. Although painful and expensive, this worked really well. As long as you could never SEE more than a set number of polygons (800 for Crash 1, 1300 for Crash 2 or 3) from any given position we could have perfect occlusion and sort, with no runtime cost. We conceived of using trees, cliffs, walls, and twists and turns in the environment to hide a lot of the landscape from view – but it would be there, just around the corner.
So we decided to use an entirely SGI and IRIX based tool pipeline. In fact the game itself even ran on the SGI (with terrible keyboard control). This meant buying programmers $100,000 SGIs instead of $3,000 PCs. Gulp again. No one else did this. No one. And at the time, when a 50mhz Pentium with 8-32 megs of RAM was typical, our 250mhz 64 bit SGIs with 256 or 512 megs of RAM opened up totally different computational possibilities. By 1997 I had 4 gigs of ram in my machine! Of course some of those computational possibilities were so brutal that I had to code tools to distribute the calculations out to the video hardware, and chop it up onto all the office machines, where processing could be done in parallel 24 hours a day. Levels often took several hours to process on our 5-8 machine farm!
I also concocted a crazy algorithmic texture packer that would deal with the fact that our gorgeous 512×240 mode left us with too little texture memory. And the even crazier – way crazier – virtual memory system required to shoehorn the 8-16 meg levels the artists created into the Playstation’s little 2megs of RAM. Dave meanwhile had to invent insane bidirectional 10x compressors to help get the 128meg levels down into 12, and figure out some tool for managing the construction of our gigantic 3D worlds.
Our levels were so big, that our first test level, which never shipped and was creatively named “level1” or “the jungle,” couldn’t be loaded into Alias PowerAnimator even on a machine with 256megs. In fact, it had to be cut up into 16 chunks, and even then each chunk took 10 minutes to load!
So Dave created a level design tool where component parts were entered into a text file, and then a series of 10-15 Photoshop layers indicated how the parts were combined. The tool, known as the DLE, would build each chunk of the level and save it out. Artists tweaked their photoshop and text files, ran the tool, then loaded up chunks to look for errors. Or they might let the errors pass through the 8 hour level processing tool, there to possibly pick up or interact with new (or old) programmer bugs. If one was lucky, the result wouldn’t crash the Playstation.
But the craziest thing I did was create a new programming language – with Lisp syntax – for coding all of the gameplay. It had all sorts of built in state machine support (very useful with game objects), powerful macros, dynamic loading etc. It was also highly irregular and idiosyncratic, and in true Naughty Dog fashion “powerful but complicated.”
The secret to Crash’s success was its Art. And the secret to its Art was its Programming. [ Andy NOTE: well, and the F-word ]
Andy and Dave broke a lot of rules. First and foremost, they didn’t follow PlayStation’s library restrictions. Other developers often complained that Crash was using some sort of secret Sony library. That is the exact opposite of the truth. The truth is that Crash used as little as it could of Sony’s library and the programmers basically hacked everything right to the hardware.
Years later Sony tried to create a game called Harry Jalapeño to compete with Crash. No, I am not making that up. Besides the name fail, the internal team in San Francisco also utterly failed to create the complex worlds and characters that we created in Crash. Let me repeat – an internal Sony team couldn’t create Crash. Let the rumors of “insider information” forever rest.
Hitting the hardware directly was against the rules. But by the time Sony saw the results they needed a Mario killer. It was too late for them to complain.
It is easy to underestimate the value of the pre-occlusion and vertex animation hacks. But let me tell you, this was everything.
The occlusion meant more polygons in the background, and more polygons meant we could do the levels. Without it we NEVER could have made the world look as good as it did.
Our occlusion worked on a texture level. That is, if we had a giant polygon with a fern texture on it (think many leaves but lots of empty space) the occlusion could actually get rid of polygons behind the leaf part of the texture but leave the polygons seen through the alpha channel holes. No other game had that kind of detail in occlusion, and it paid off immensely. Given how small ground polygons could be in the distance, a little fern action went a long way.
We were up against the polygon draw limit at every twist and turn in the game. We wanted to have as much distance and detail visible as possible, but the minute we went over that limit the game started getting “hitchy.” We’d build a level over night (really 4am-11am, the only times the office was ever empty) and come in to see the results. Wherever we had too many polygons we’d add some leaves or whatever to occlude some distance. Wherever there were more polygons available to draw we’d pull leaves out.
And remember, more foreground (boxes, enemies, platforms) meant we had to have less background. So just when you had a level perfectly balanced, someone (usually me or Mark) would determine that the level was too hard or easy and we’d have to add a platform or enemy and the level builder (usually Bob Rafei or Taylor Kurosaki) would have to start balancing the background poly count over again. It was so cruel.
We couldn’t see the result of any change for at least 12 hours, so if we made a mistake we’d make a tweak and then we’d have to repeat the process. No level was “done” till the game shipped.
Crash was 512 polygons in the first game, with textures only for his spots and his shoelaces, and his model didn’t change much through the 3 platform titles. It took me a month to settle on the perfect 512. As Andy said, we went with non-textured polygons instead of textured ones on most of the characters. Instead of texture, we used corner colors to create the textures that seemed to be there.
There were many advantages to this strategy. The simplest was that we got more polygons. But we also solved a texture stretching and warping issue inherent in the PlayStation’s renderer that tended to make textures look terrible. Since you spent most of your time looking at the character, and he could get quite close to the camera, avoiding texture mess meant a lot for visual quality.
And there was another important issue solved by using polygons instead of textures. The PlayStation tended to render every polygon as a pixel, no matter how small it got. Had Crash’s pupils been texture, they might have disappeared when the got smaller than a pixel. But by making the pupil 2 polygons (a quad), they almost always showed up as long as the total eye, including whites, was more than a few pixels tall. Subtle, but trust me, it made the game so much more clean looking. It’s the small things that matter.
The most important advantage of our character system was vertex animation. I cannot imagine the torture that other game developers went through trying to bend the low polygon arms and legs of their characters using nothing but bone weighting! When the bones failed for us, and they often did in a character with <1000 polygons, we just grabbed vertices and yanked them around until things were fixed. This is why Crash doesn’t bend and fall apart when animating. It meant more mobility and stretchability.
In some of the most stretched or bent poses, we just pulled vertices by hand and forgot the bones altogether, which brought us two additional abilities that nobody else had. [ Andy NOTE: this allowed the same animation techniques then at use at Pixar into our little effort ]
The first is that the characters in Crash had different facial expressions on every single frame. Forget bones. I just pulled the vertices until I had what I wanted. It doesn’t sound like a big distinction, but I could go from a huge smile full of teeth to a whistle mouth that was toothless or no mouth at all just by collapsing vertices on top of each other to make zero volume polygons. Thus Crash had a more expressive face than any other character had ever had before, and this created emotion that gamers hadn’t felt before.
It was that opening sequence, when Crash pulls his flat face out of the sand, shakes it off, looks confused, leaps up, looks at the camera and does his great big goofy smile that SOLD Crash as a character. No 2d game could afford the art, and no other 3d game had the facial animation that our vertex system brought. And thus the main character transformed from emotionless “vehicles” to an emotive friend.
Before Crash characters had no emotion (Pacman, and even Mario), or one dimensional emotions (Sonic was “fast”). Crash had facial emotions that let him speak to you and gave him personal range. Crash wasn’t any one emotion. Crash was Crash. For example, you could see Crash acting like a mime. Sonic and Mario weren’t capable expressing even a mimes range of emotion until after Crash came out. “Itsa me, Mario” just doesn’t cut it, especially when Mario’s face didn’t even animate as he said it!!
Of course it wouldn’t be until much later that the game industry got fully 3 dimensional characters, like Daxter, who had full personalities, and could go beyond mime and do, for example, a scene from Shakespeare, but in their very own way. But that’s a story for another time. [ Andy NOTE: and when we got there we had to build a special “face engine” and “eye engine” to do it ]
The second thing that vertex animation allowed is total warping of the character beyond bones. If I wanted Crash to become a balloon, I just animated a keyframe of him wrapped around a sphere (shoes and face usually un-stretched!) and the game tweened to it. If I wanted to smash him flat into his shoes I just folded his legs and body up into his face and cleaned up the resulting frames as it went. The animators were free to do anything, and we did. Again, helped endear Crash as a character.
That made Crash’s characters feel more like the Loony Toons than the stiff 3d bone creatures of the day. I still have a signed copy of Disney’s “The Illusion of Life,” by Frank Thomas and Ollie Johnson, two of the greatest animators of all time. It’s dog-eared and beat up. Bob, Taylor and I read it, absorbed it, and tried to live it.
Again, all this was only possible thanks to some incredibly crafty programming from Andy, Dave, and Mark.
more on GAMES or BOOKS/MOVIES/TV or WRITING or FOOD
[…] Making Crash Bandicoot – part 3 […]
I have always, always, always wanted to know what ND was like before my time there. It’s great to read about the origins of our “make the impossible possible” ethos. Looking forward to the rest of it!
Smaller. Similar. Even more intense. Like a overly boyish family?
Wow, its very interesting to see how you guys approached the problem of tools for your game. And as usual with game development, you need machines 10x more powerful to build a game that will run on a target that is not that powerful.
Most insane is that you guys did all of this with less than a handful of programmers!
And finally, when I see “we rendered 800 polygons total on Ps1” made me smile… I dont know what we would do today if I went to an artist and said, hey the world needs to be 800 polys total. We wouldn’t know how to build it. Its sad to see that all those skills are getting lost with the new platforms that we deal with !
Although 800 polystyrene was just the background and the limit for what could be on screen. The levels themselves usually had several hundred thousand polys. The foreground might have 900 or so at any one time. Bosses had less in the background and more in the foreground.
Ah yeah. You’re correct Andy. I actually meant 800 polys on screen for one frame for the background. When I remember Jak being 150K, and now we can do 1M on Ps3. Doing 800 polys/frame is a skill that is lost now I think since we barely do 15K/models now 😉
Jason would sometimes work for a couple hours to shave off like 15 polys from Crash. It made a huge difference as he was on screen 100% of the time.
Very sweet I love the thought of Animation as when I was at school knowing Naughtydog make crash games. I said to myself I hope to find a career in animating and now I am doing polygon’s too.
honestly, work whit those terrible hardware and software… think to “Crash is just a Miracle” from 95’s years! 🙂 Guys, you are Awesome!
Skill, luck, and a lot of hard work on the part of the whole team!
These are super interesting! Looking forward to the next part.
Coming up tomorrow — on developing platforming gameplay in 3D with no prior examples.
Damn, wish I knew what this all meant… I swear, writing scripts is easier than game making. ^_^’ glad ya went to all this trouble for Crash! 😀
[…] PREVIOUS installment, or the FIRST POST. […]
Andy, I was wondering. When you talk about Mark, I’m guess you’re talking about Mark Cerny… Wasn’t he a Universal employee at the time? But he still did lots of coding and design for Naughty Dog it seems…
Yes, Mark Cerny. During the Crash years Mark was a Universal Executive. He mostly did producing and level design and all sorts of “discussing.” Generally for each game he’d do a spot of guest coding (a week or so) where he would code one hard thing to keep up his coding edge. By Jak & Daxter he was an independent consultant working for us, some others, and Sony. His biggest coding project was the Jak & Daxter foreground engine, MERB (the M stands for Mark).
Mark Cerny was always the Nth dog. When we were 7 he was the 8th. When we were 23 he was the 24th. You get the idea. As long as Andy and I were there Mark was always integral in the game design and coding.
“Years later Sony tried to create a game called Harry Jalapeño to compete with Crash.”
So Sony wanted to make an IP to compete with one that was already exclusive to its console, not to mention successful? Isn’t that probably the worst thing one can do when you’re already going toe-to-toe with Mario?
Were they just eager to bank on the novelty of a Crash-clone, or is there more to that story?
Reading all this, I’d say the graphics really paid off. The game came out in 1996 and I am STILL blown away by the beautiful backgrounds. The sunsets, the shadowy towers in the background, the dark temple, those creepy Cortex TVs in one level (Generator Room, I think). There’s a lot of debate on whether video game is art, but there is no question in my head that I truly think the first Crash game fits that category very well.
Thanks! We really tried to make it as pretty as we could. It was all about creating a fun world to be in, and we though it ought to look, sound, and play as cool as possible — given the human limits of working 110 hours a week for 2 years, haha.
On crash 3 when you completed the game I saw 3 other crash’s dancing. On 3 levels of (Toad Village) (Makin Waves) and (Hog Ride) which was (Fake Crash) and it made me very surprised and excited.
How did that idea come.
Fake Crash came from a Japanese commercial. They had this really funny commercial where some kids were chasing Crash and instead they caught “fake crash.” We thought he was so funny, that put him in Crash 3 as a sort of easter egg. The Japanese loved it. Part of the joke too was that Universal had made a series of stuffed Crash toys which were SO UGLY, I mean SO UGLY, that they looked more like fake Crash than real Crash — seeing them the first time in the marketing exec’s office set me to literarily laughing for 30 minutes straight and rolling on the floor (Jason will verify).
The marking peeps didn’t think it was funny.
I may be misremembering, but I don’t think any early generation PSX games used skeletal animation. The two notable character games in my mind are Tomb Raider and Die Hard, and both of those used segmented meshes. On the PC the big players were still doing vertex animation. I remember thinking myself quite clever when proposing that we “stretch polygons over the joints” for Syphon Filter. 😉
It’s a bit disheartening to read some of this though, since on Bubsy 3D we did a lot of the same things but obviously failed to make the same level of product. Vertex animation, light on textures, 512×224… Our investment in tools however was not nearly what you guys seem to have gone with, and the enabling effect of a good toolchain continues to be misunderstood even today!
Everyone thought we were crazy with our tool chain — and even so it wasn’t nearly as good as we liked. Boy was it hard to use and prone to breakage.
…of course my bad since “skeletal animation” they were, just not single-skinned mesh. it was too early in the morning…
I loved reading this blog series! I’ve always been in awe of Naughty Dog’s technical ability. I know you used PVS in Jak & Daxter and Insomniac used it in Ratchet and Clank, do you know if that continues today? Did the amount of pre-computation (PVS, streaming, texture packing etc.) increase with new console generations (relative to the hardware)?
[…] February 4, 2011 at 7:08 am Making Crash Bandicoot – part 3 « All Things Andy Gavin […]
This is a very interesting read. I only know the basics about game development, but learning what it was like to develop on early consoles is really amazing.
I feel like I’m the target audience for Naughty Dog games. I played Crash Bandicoot as a kid, then in my teen years, Jak and Daxter was my favorite PS2 series. Now I play through Uncharted loving every minute of it!
Thanks for doing great work and making Naughty Dog my favorite game development team!
[…] Crash Bandicoot – part 1Making Crash Bandicoot – part 2Making Crash Bandicoot – part 3Making Crash Bandicoot – part 4Making Crash Bandicoot – part 5Making Crash Bandicoot […]
Its really amazing to see how things changed in the videogame industry over the years, a great game like Crash Bandicoot was made by three talented guys, and now games require big teams with all sorts of roles. I used to play Crash when I was really young with my sister, Crash will always be part of my childhood memories. When I go to college i want to study game design and I really hope one day I get to work at Naughty Dog.
I worked at ND for a few months back in 2006. I caught a glimpse of the last game that was shipped with the LISP-based system Andy describes. IMHO it was a big mistake to move away from it. It looked like taking candy away from a baby, that’s how much the programmers loved it. 🙂
Haha. In 2000 we had “the great Goal revolt” when all the programmers ganged up on me and complained about the environment. But by Jak 3 and 2003-4 all but 1 or 2 loved it. Many still tell me how much they miss it.
I think you have a typo there. It should probably be something between 4 and 16MB RAM. Even my Amiga 500 had a meg of RAM (my 486 had 8)
Yeah thanks. Fixed it.
If there is one thing I can say, it is to thank you for all the fun I had playing Crash and other amazing Naughty Dog games
If any of you ever wanted Video Games Soundtracks like crash bandicoot then here is the place to get them.
choose from A-Z of your title and click on the soundtrack and where it says (Click Here) right click on that and open with itunes or other. 🙂
I just can’t stop reading! THANKS FOR THIS!!! 🙂
ps:Any chance to release some source code ?
From the game and/or the tools ?
That would make my day 🙂
I don’t own (or have) the source code — so I can’t post it 🙂
Many thanks for replying.. just had to ask since CB series is one of the 2 reasons that i became a ‘totally burned’ programmer 😉
*Goes back to page 4 🙂
What strikes me is just how close to the bleeding edge game developers had to be to produce a game. I could never have imagined that Crash Bandicoot had to be prerendered over night on graphics workstations. One would have imagined — as it would be now — that making levels was just a point and click job on a PC.
How much that must have constrained you in the creative process, yet it was still such a beautiful game with so much detail. It was like nothing else at the time, I even remember arguments with school mates over Crash Bandicoot vs. Pandamonium!
Andy, I don’t know if this has been asked already, But did you plan on going a different direction with Crash if Universal Didn’t make so many changes? For example, Twana, Crash Girlfriend, where would she have gone? Again, Sorry If this has been asked or explained several times, I do apologize.
It is a mistake to assume that there was a “long term plan” at Naughty Dog for Crash beyond CTR. During CTR, we had already begun work on Jak & Daxter, and did not explicitly plan another Crash game at that point. Workloads at NDI were always very intense, and there was no need or time to speculate on projects we weren’t actively working on.
That being said, HAD we decided to do further Crash games, and actually designed them, they would certainly have been radically (haha) different than the major one that followed early in the PS2 era (Wrath of Cortex). I can’t say what we would have done — but that wouldn’t have been it. Jak & Daxter was where our thinking was going at that time. Toward huge NO LOADING open worlds and more in-depth story telling, and away from the more classic platformer gameplay of Crash.
[…] When Sony went on it’s crusade against the hacking community they really should have anticipated it would irk some of the people you really don’t want to mess with. It’s also entirely hypocritical of them, seeing as one of the franchises which arguably helped put the Playstation brand on the map was built around the competency of ‘hackers’. When Andy Gavin & Naughty Dog were developing Crash Bandicoot they basically hacked the PSX to get the desired results.. “Andy and Dave broke a lot of rules. First and foremost, they didn’t follow PlayStation’s library restrictions. Other developers often complained that Crash was using some sort of secret Sony library. That is the exact opposite of the truth. The truth is that Crash used as little as it could of Sony’s library and the programmers basically hacked everything right to the hardware.” … source >> […]
Hey, i would like to know a couple questions about “crash”
1.Did you think “crash bash” would be a good game (i was wondering because its a different style of a crash”
2. Why did you make “CNK”
3. If you had the chance, would you make another crash game
4. in “crash bash” did you have any control over how “crash carnival” was made
Crash was my favorite game, i didn’t even bother with Spyro.I remember when i was a kid i had a dream that crash went to my house, and in the dream it felt like i was best friends with him. Weird dream! but thats how much i played crash then. Thanks for making my all time favorite games.
There is a detailed comment that I left some time ago about Crash Bash buried somewhere in one of these posts. Basically, Mark Cerny made Crash Bash with our blessing and a different developer. It’s the last Crash game that had ANY of the original people on it, but it was not a Naughty Dog game.
so i am guessing you only made crash 1,2 and 3?
if so, would you make another crash game if you had the time?
Crash 1, 2, 3 and CTR were all Naughty Dog games. On 1-3 I was lead. For CTR I had a more supervisory role, but I was right there (working on Jak & Daxter mostly).
[…] posts on Crash: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, […]
[…] Making Crash series: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, […]
[…] the multi-part version of the story, as posted by Andy Gavin: 1. The ideas 2. Characters 3. The technology 4. Crash gameplay 5. Crates and other items 6. Attending the E3, premiere of the game 7. As a […]
I love the Crash Bandicoot games you guys made, but those new Crash Bandicoot (titans and mutants things) are STUPID! I want the old Crash Bandicoot back!