BMOW title
Floppy Emu banner

3D Graphics Thingy

OK, it’s a year and a half later, and once again I’m staring at a blank sheet of paper. It’s time to start a new project. My very inspired name for this effort is 3D Graphics Thingy.

When I’m not moonlighting as an electronics hacker, I get paid to be a video game developer. I write software to push around triangles and pixels and create 3D animated scenes. Military simulations were my introduction to the field, using big-box SGI hardware. For many years I was a developer at Electronic Arts, and was lead programmer on some high-profile game titles like Tiger Woods Golf. I’m currently deep into development of a new fantasy MMO game.

Working in the game industry has given me an appreciation for hardware that gets lots of pretty images on the screen, fast. I’ve done 3D graphics work on the PC with Direct3D, and on consoles like the Playstation, PS2, Xbox, and GameCube. While none of it involved working directly with hardware, the software interfaces encouraged intimacy with the hardware, especially on the consoles (and even more so on the PS2). In order to wring the best possible performance from those systems, it was necessary to understand how the hardware worked at a fairly detailed level.

Prior to 1995 or so, most games were 2-dimensional, and most game hardware was designed with 2D games in mind. Sprites and parallax scrolling were the mainstays, and titles like Sonic the Hedgehog were state of the art. Typically, a video frame buffer was filled with a background image, which changed infrequently. Hardware-accelerated sprites were overlaid onto this background, for player characters, monsters, bullets, and so on. The number and size of sprites were limited. For efficiency, a dirty rectangle technique was used to redraw only those parts of the screen that had changed since the last video frame. Hardware generally wasn’t powerful enough to draw the entire screen with a new image every frame, while still maintaining a frame rate fast enough for motion to appear smooth (typically 30+ frames per second).

3D began to creep into the picture in the early 1990’s, with hardware like the Super Nintendo’s Super FX chip, but it was the 1995 introduction of the Playstation 1 that really shook things up. I remember playing the original Ridge Racer and being absolutely stunned by the fluid 3D graphics. This was possible thanks to the PS1’s hardware, which was designed from the ground-up for the task of fast 3D image generation. Every frame, the frame buffer was completely erased, and an entire scene of 3D objects was drawn. Each object was typically constructed from dozens or hundreds of individual triangles. No sprites, no scrolling, no dirty rectangles. It was a completely different way of making a video game, and a completely different approach to the hardware.

The PS1 and its conceptual descendants (including modern PCs) draw a fairly sharp line between general-purpose computing tasks, and the work involved in 3D graphics generation. General tasks are performed on a standard CPU like a 68000, MIPS, or Pentium. For a game, that might include player movement, collision detection, and keeping score. It would also include determining what things should be drawn on screen, and where. The actual task of drawing is performed by one or more specialized pieces of hardware that are collectively referred to as a graphics coprocessor, GPU, or just graphics card. In your PC this might be another chip on your motherboard, or an add-in card from nVidia or ATI.

So let’s pretend it’s 1992, I’m a hardware engineer, and I’m drawing up plans for what will eventually become the Playstation. Clearly some kind of specialized graphics coprocessor will be needed, but no such thing exists, aside from a few small and expensive niche markets. So how should it work? What factors should be emphasized in the design? What tradeoffs must be made? Will it even be possible to design something powerful enough, cheaply enough, using available technology?

3D Graphics Thingy will be my answer to these questions. Using mid-1990’s technology, I plan to build a graphics coprocessor capable of generating real-time 3D graphics, and match it with an off-the-shelf CPU to build a custom single-board computer, optimized for the task of gaming graphics. In short, I’m building my own video game console.

I’ll post more soon on the specific functional requirements for 3D Graphics Thingy, the kinds of technologies I expect to use, and my initial thoughts on the system architecture.

Read 8 comments and join the conversation 

8 Comments so far

  1. Gregg C Levine - April 25th, 2009 7:13 am

    Good ideas to start. Given your background it shouldn’t be too hard.

    Incidentally all of my (working) computers here wear ATI video cards, some on the motherboard, others as the typical user or company installed video card.

    oh and good luck!

  2. Dave H - April 25th, 2009 8:26 am

    Hi Steve,

    Can’t wait to hear if you plan to use an FPGA or something just as self contained, or if you plan to divide functions into specific hardware sections.

    If you could make it OpenGL compatible then I guess you’d be halfway to making it compatible with a lot of games. A quick compile of Quake to create an executable for the CPU you choose and away you go 🙂

    Also can’t wait to see how you plan to do the maths parts, I’d expect the more you do in hardware the better but it will be tempting to offload a lot to the CPU.

    Oh yes, I guess you won’t be wire wrapping it this time?

    Cheers
    Dave

  3. Buddy - April 25th, 2009 11:08 am

    Awesome! Looking forward to hearing about this project…

  4. Steve - April 25th, 2009 1:29 pm

    I’ll write more about this shortly, but yes, I think it’s safe to assume this won’t be built out of 7400 series logic on a wire-wrap board. Using FPGAs or CPLDs seems likely. I’m imagining something more on a Utah Teapot level of performance than Quake, but we’ll see!

  5. Jorge - May 5th, 2009 5:18 pm

    Cool, one of my medium term (1 year?) projects has been (for ~2 years) to build a computer from scratch, your site is very encouraging.

    Good Luck with the 3D graphics thingy.

  6. Donald - May 30th, 2009 7:45 am

    Picoblaze at high speed on a Spartan 3 FPGA works great as a CPU. You can expand it via 8 bit I/O space if you prefer. You could even emulate another core (there is an 8051 one) using it. Recommend you design a 2D processor before going for 3D. Was surprised you didn’t use FPGA for the original CPU too.
    -D

  7. James Lawson - May 30th, 2009 9:00 am

    The most modern fastest FPGA’s are capable of greater performance than the PS1’s graphics hardware I think. However thats not 1993 tech, unless you just use an FPGA and restrict your clock speeds and transistor count to something aproximating the PS1’s graphics chip and say thats the chip you would have had fabbed. Or failing that if you have $15000 burning a hole in your pocket you could get an actual chip fabbed.

  8. Donald - May 30th, 2009 8:47 pm

    You can get prototype chips fabbed for a couple of hundred using MOSIS.
    Look it up…

Leave a reply. For customer support issues, please use the Customer Support link instead of writing comments.