Tools for Teaching

Today’s question: what tools are there for teaching about computer graphics and/or computer games? I don’t have a definitive answer, but I have a little experience with a few resources and know of others. That said, I haven’t sat down with more than two of them for any serious amount of time. Comments are most welcome, especially for pointers to better overviews than this!

I’ll list these roughly from the more basic to those for budding programmers and indies. That said, I think some languages, e.g. Processing, are easier to get into than the UI-driven systems, but some understanding of programming is needed. I’ve also ignored some famous examples like Logo, as it feels a bit crusty and limited to me. But, that’s me—let me know if you have a great counterexample.

Game Maker: My experience with this one is trying it with my younger son, and later Cornell using it in a 20 hour digital game design workshop for high-school students. It’s much more about games than graphics, graphical elements are 2D sprites and backdrops. Most of the focus is on events and constraints, as you might guess. Very UI oriented, no programming language involved per se – the UI controls are essentially a programming language of a sort. I have The Game Maker’s Apprentice, which is good in that it gets the person involved quickly, but bad in that little understanding gets transmitted early on (“now set this UI control to do this, now load that file there, now hit ‘run’; if it doesn’t run, walk through all the instructions carefully again”). From Amazon reviews, the book Getting Started in Game Maker might be better. There’s lots of example games and web support. Cost: free Lite version and trial Pro version, cost for Pro version (which you want) is $20.

Multimedia Fusion 2: this is an expanded and rebranded version of the company’s “Games Factory 2” product that includes all its functionality. It looks similar to Game Maker, but targeted for a somewhat more professional audience (and at a higher cost) overall. That said, there is a book for it, Game Creation for Teens. Cost: free trial download from 2008, lowest street price I saw for Multimedia Fusion 2 was $83.

Flash: Adobe’s popular animation & game programming system, famously unsupported by the iPad. Back some years ago the local science center used Macromedia Flash to teach grade-school kids about basic Flash animation. Now Adobe Flash Professional CS4 is used to create Flash. From what little I’ve read, the interface is daunting, but it’s actually pretty easy for beginners to get going. Animation is something that can be done purely with graphical tools, Actionscript 3 is a language for serious interactive applications. There’s of course a huge number of books, forums, and other online support. Cost: as low as $200.

Flixel: I’ve heard this mentioned twice as a worthwhile development resource for Flash. It provides some useful base classes in Actionscript 3 for making games, along with tutorials, a forum, etc. Cost: free.

Pygame: This is the first of a few language-oriented resources. Pygame is a bunch of modules to help in writing games in Python. One friend said he got a simple game running in less than two hours from download (but that’s him…), another acquaintance wasn’t so wild about it as he hit its limitations. 2D oriented, though there’s a few 3D experiments. This sounds like a pretty good, and super-cheap (free!), way to introduce kids to programming. I recall an article in CACM or IEEE Computer a year or so ago about Python, and it made an excellent point: Python is one of those great languages that is made for people who have never programmed before. Like Perl, it provides the ability to program and get something done quick without a lot of clutter, and so is a better candidate for the first programming language taught, not Java. Let the programmer have fun getting things done, then teach them about more elaborate computer science concepts and why these are useful. Python is pretty easy to learn: Andrew Glassner has a great introductory page – in a few hours you’ll know the basics. But I digress… Anyway, Pygame has lots of users, many of the projects are open source, there’s even a second edition of a free professionally-produced book about Pygame. Cost: free.

Processing: OK, if you’re sick of hearing about game programming resources, here you go. This is a little language suited for making cool 2D images. Key basic graphics concepts—transforms, curves, image manipulation—are encapsulated. Basic interaction is also a snap. It has a 3D component, but that part is fairly weak. I’ve played with it, it’s fun. Not meant for games; nonetheless, it’s possible. Much online support, and there are two popular books, here and here (the second has lots of additional material online). Cost: free.

Blitz Basic: I’ve heard of this one from a few people but have no direct experience. Definitely about programming, it uses BASIC, but enhanced with functions and types. It looks pretty full-featured, e.g. there’s joystick and networking support. BlitzPlus is the Windows 2D version, BlitzMax also runs on Macs and Linux, Blitz3D adds 3D support: camera, lighting, texturing (including bumps), CLOD terrain, etc. There’s an SDK for interfacing the 3D engine with C++, C#, etc.  Manuals are online, and there looks to be a healthy user community. There’s a German version of the website. Cost: free trials of all, prices range from $60 to $100 per product, with more for add-ons.

XNA: This is something of the 800-pound gorilla for programming-related graphics education. As an example, some teen programmers in the Cornell workshop were using XNA as the next step beyond Game Maker. A Microsoft initiative, it’s partially aimed at students and hobbyists. The base language is C# (Java on steroids, if you haven’t used it). There are lots of element and audiences for XNA, Wikipedia also covers the area well. There are many XNA resource sites and books out there (though I was sad to see Ziggyware is no more). Cost: free for the most part, depending on what you’re doing.

Ogre: Begun about a decade ago, this is from all reports a pretty nice graphics engine. It supports a huge number of effects and areas (I know developers who have consulted the codebase for ideas). There are lots of add-on libraries. It’s great for deep-down serious graphics education; Ogre is entirely open source (MIT license), so everything can be examined. Cost: free, and free licensing.

Unity: You’ve now definitely entered the Indie game developer zone. A 3D games development system I’ve heard mentioned by others as a way of learning. Multiplatform, now including the iPhone. Cost: free base version and trial of Pro version, which costs $1499; other pricing for iPhone version. There’s a book. Licensing for Indies has become free.

UDK: The Unreal Development Kit is the most popular game engine used for game development. Cost: free to download full version, 530 Mb of fun. Licensing cost: if you have to ask, you can’t afford it.

Torque: Torque is the second most popular development platform for game creators. For Torque, two versions exist, 2D and 3D. Three books are available on this engine. Cost: $250 for 2D, $1000 for 3D version, but educational pricing can be arranged.

Whew! OK, what did I forget? (Make sure to read the comments—some excellent additions there.)

Update 2/6/2010: Kodu, from Microsoft. For grade schoolers, it uses a visual language. Surprisingly, it’s in 3D, with a funky chiclet terrain system. Another interesting graphics programming tool is NodeBox 2, now in beta. It uses a node graph-based approached, see some examples here.

12 thoughts on “Tools for Teaching

  1. sevas

    I’ve found glman (http://web.engr.oregonstate.edu/~mjb/glman/) to be a handy teaching tool.

    It basically looks like a stripped down FXComposer that really focuses on writing GLSL shaders, and leverages the scene creation using a simple scene description language, inspired from Renderman.

    However, in my experience, it currently has minor issues on OSes different than Windows XP.

  2. Wussie

    Great listing, some useful stuff in there that I haven’t seen before! From the ones I’ve worked with, XNA and Ogre are definite recommendations. Torque is good for game related stuff, I haven’t had the chance to look at the graphics pipeline in there yet though.

    Another package that is being used by our school for the first year projects is A7 Game Studio (http://www.3dgamestudio.com/) fairly cheap although I have to say I haven’t got much experience with it in terms of graphics programming.

    I’ve heard good things about Virtools (http://en.wikipedia.org/wiki/Virtools), supposed to be a good way to get to know about creating games requiring virtually no programming experience. I haven’t got personal experience with this package either though.

    The courses specifically oriented at graphics programming I’ve attended tend to use small ‘template’ applications taking care of the generic set-up hassle (window management, API startup / software plotting routines / OpenGL extensions / shader set-up / vector & matrix classes, etcetera) with which the student can experiment and do assignments. While this is hard to come by for an individual looking to learn more about graphics – if the resources are available and your target group is big enough to warrant the overhead, it’s a good way to go.

    Finally, if you are the programming type, sitting down to write a little (unoptimized but functional) raytracer and/or software rasterizer in a language/environment of your choice is probably one of the most educational things you can do to grasp some of the core concepts of computer graphics, at least that’s the way I’ve experienced it.

  3. Eric Post author

    One I thought about but didn’t pursue: Alice, http://www.alice.org/. It’s more about storytelling and virtual world building, but is definitely in the graphics educational space. I’ve never tried it, so if you have comments, great.

  4. gilbazoid

    They use Alice for a summer camp for girls at UT Austin called first bytes. From what my friend (who was a counselor for 3 years) tells me, it seemed to work reasonably in that setting. They have some videos that the campers made up on youtube.

    In a similar vein to Alice, MIT’s Scratch just got a cover story in CACM. They seem to have more community built up around that tool, and even some games that people have made in it.

    When I was in high school, the computer science class was taught in C++ with the CodeWarrior IDE. One amazingly useful library that came packaged with the educational distribution was Carnegie Mellon Graphics. During my first year, I was able to cobble together a graphical battle screen for the RPG a friend of mine was making. I still have that program on a floppy somewhere…

  5. tartley

    If you’re considering using Python, then pyglet is a viable alternative library to Pygame.

    http://pyglet.org/

    It is smaller and not as popular, but is great if you want a leaner and more lightweight library. It requires no binary dependancies, unless you are playing sound or video. It works on Windows, Mac or Linux.

    It provides full OpenGL bindings, so full 3D (including shaders) is easy to do, and it provides some utility classes to help you batch up sprites (textured quads) or vertex drawing into as few openGL render calls as possible, separated by as few state changes as possible, with verts packed into contiguous arrays in VBOs. (Good for performance)

    Every six months or so is the ‘PyWeek’ challenge, to create a game in a week, written in Python. This sees lots of entries using both Pygame and pyglet.

    http://www.pyweek.org/

    Last one was August, so I speculate that we may be due another sometime soon.

  6. Blind Renderer

    I thought UDK has a royalty option, which is very affordable. It’s $99 only upfront and 25% on revenue over $5000. I personally found this option is far better than Unity if you need full-featured game engine: Unity’s free version lacks of certain things, like post-process effect.

  7. bdb

    I’ll second the recommendation for Scratch. It’s a great place to start with programming 2d graphics especially for K-8 students. I’ve had success making games with my kids (boys, 9 and 10 at the time).

    Scratch was inspired by Etoys (www.squeakland.com), and both are written in Squeak. I think Scratch is more accessible and has become more popular largely because of the ease of posting creations to the scratch.mit.edu website with a single click where anyone can then play them in the browser using a java runtime.

    I’ve also had success with Pygame with my nephew (high-school aged at the time). From there he moved on to Povray and gimp scripting to follow his graphics programming interests.

  8. Pingback: Real-Time Rendering · 7 Things for February 6

  9. Pingback: Real-Time Rendering · 7 Things for February 8

  10. Reg

    There is also AMD RenderMonkey – nice environment to play with shaders, more lightweight than FX Composer.

    As for programming, IMHO it’s hard to learn basics while trying to make game. I mean, how can anyone manipulate actors or blocks if he doesn’t know what is variable, loop or function call? And for someone who already knows programming a little and wants to code graphics (not only gamplay) starting from pure Direct3D or OpenGL is not so bad idea.

  11. Pingback: Real-Time Rendering · 7 Things for February 8

  12. Pingback: Herramientas para enseñar diseño de juegos | CG News

Comments are closed.