More Job Tips

Tuesday, August 11th, 2009

Links are better than attachments. They’re easier and faster to forward and they’re more reliable. You never know if someone is going to be receiving that e-mail on their Blackberry or other mobile device, or low-bandwidth connection.

– [Caveat] If you send a link, make sure your website is up and available. There’s nothing worse than going to view someone’s portfolio and getting a “this user needs to renew their account” message. An attachment is still better than a non-working website.

Tell me what you’re applying for, especially if its a cold contact.

– If you have a video, use a codec you know is pre-installed on most computers -OR- provide a link to where the codec can be obtained from. A codec that’s pre-installed is the better of the two choices.

– On your reel, be specific about which parts are yours. This is especially important on group projects. A shot list is helpful.

– Ditto on code samples.

Job Hunting Tips

Thursday, August 6th, 2009

As a former game dev lead and now as a studio head, I look at a lot of resumes.

This is by no means a comprehensive guide, but if you’re looking for a job here are a few quick tips I can share from my own perspective from the hiring side. These are some of the top things, good and bad, that I see every day when I am evaluating potential candidates.

[Required disclaimer: This is just my personal opinion on hiring practices, not official policy for any company including my own! Different hiring managers use different criteria and techniques. Use your own best judgment when preparing your application.]

Have a demo reel, portfolio or code sample. I can’t emphasize this enough. I’m going to be dead honest: I generally watch reels all the way through before I even open the attached resume. I may even watch your reel before I read your name. I don’t care how many years of experience you have if your reel is crappy… and vice versa, I’m more likely to give someone with little or no experience a shot if they have a really brilliant demo. In the end, we want to hire people who can produce a superior end product regardless of how you acquired your skills, and the best way to prove to me you can do that is to show me a great example of an end product.

Your demo reel only needs to show what it needs to show. Or, to clarify: if you’re an animator, a reel with untextured characters or stock textures–as long as they are credited–is perfectly okay. If you’re a programmer, a well-written class file is enough. I don’t need to see a whole game or movie. I just need to get an idea of what you can do. In fact, this is especially true for programmers. Many programmers send compiled binaries and no source code. A compiled binary doesn’t tell me very much. I’d much rather have a sample of well-written code even if it doesn’t compile because the rest of the app is missing than a pretty demo with no source and no idea if it’s a rats nest under the hood.

If you are a programmer, comment your code. An uncommented demo is an instant fail. If can’t bother to comment your demo why would I believe you would comment your actual source?

Write a cover letter. It doesn’t have to be long or elegant; in fact, it’s better if it’s brief. Give me the “highlights reel” before I view your portfolio or resume. Tell me the one or two very best things about yourself that make you a better candidate for the position than anyone else. It gives me an idea of what you think I should focus on when I read your resume.

Don’t call my desk line, but it’s okay to send me an e-mail even if we don’t have a job listing posted. It’s not that I don’t want to chat, it’s just that I’m much more likely to be frazzled and in the middle of something if you call me unexpectedly. [Edit: For clarification, I mean cold calling. 🙂 Regular calling when I expect you might is okay, naturally.]

– Freelancers [sometimes] have better chances of getting work, especially if they aren’t looking for full-time. There are two reasons why freelancers are desirable: The games industry is very seasonal in nature with lots of ups and downs. We may not have enough work or the budget for a full-time employee, but we may have specific projects that need done. (And, oddly, small projects often have a way of leading to more work…) Secondly, hiring people is just darn hard. It’s heartbreaking (really) to hire someone who doesn’t work out, and nobody likes doing it. Contracting is often a good way for both parties to see if the other will be a good fit. If it turns out there’s a ton of work to do, you love what you’re doing, and we love your work, then when a full-time opportunity does present itself it’s a much easier jump. Now to be fair, I know contracting is not for everyone so it’s by no means a requirement, but if you were thinking of freelancing already it’s worth considering. ** This tip may or may not apply to certain companies. Some companies never hire freelancers. We use freelancers frequently.

If you send your resume as an e-mail attachment, put your name or something identifiable in the file name. Don’t name it “resume.doc”. “jane_doe_resume.doc” is much better. Resumes always get saved off to disk before reading so they can be virus-scanned first. Putting your name in your resume file name makes it stand-out when someone is searching through the folder of virus-scanned resumes for yours.

AC3D Plugin: Material by Crease Angle and Planar Map by Material

Monday, June 15th, 2009

Two new plugins today!

The first plugin, Set Material by Crease Angle, sets the materials of a model based on the crease angle of the mesh. For each selected area, the plugin creates a new color in the palette and “flood-fills” the area until the angle between the surfaces exceeds the crease angle of the mesh. The result is that contiguous areas are all set with the same palette material, and a new material is applied wherever a discontinuity occurs. This allows you to easily break a model into sections along its creases for easier texture mapping, or many other purposes.

The second plugin, Planar Map by Material, actually includes three new commands.

The first command is Fit UV Coordinates to Map. This command is essentially the same as the “max” button in the TCE, forcing all UV coordinates into the 0-1 range, but unlike “max” this scales the map proportionally instead of independently on each axis.

The second command is Adjust UVs for Bilinear Filter. This is useful for game developers. This command scales your texture coordinates by a ratio of 240/256. The purpose is to create a small seam along the edge of the texture map so that if your game is using mipmapping with a bilinear or trilinear filter, the texture won’t bleed into its neighbors in your texture cache nor will it bleed into itself if you haven’t clamped the edges.

The last command, Planar Map by Surface Material, is probably the most useful of the three. Planar Map by Surface Material applies a “best fit” planar projection to all surfaces grouped by material in the current selection. If you section your model by material, this will treat each material color as a contiguous group and apply whichever planar projection fits it best in the TCE. You’ll still need to do some manual adjustment after you map it this way–especially texture packing, as this leaves plenty of room between areas so the surfaces aren’t too difficult to select–but it can save a lot of time in laying down a base mapping before you manually refine each area.

More information about each plugin is available in the readme.

Download the Material by Crease Angle plugin. (Requires Windows XP, AC3D 6.2 or above.)

Download the Planar Map by Material plugin. (Requires Windows XP, AC3D 6.2 or above.)

Tower Defense as a Thread Model

Thursday, June 11th, 2009

I keep having the strangest reoccurring dream. In my dream, I’m playing a turret defense game. 1 However, it is no ordinary tower game. It’s actually a thread process model. In the dream, each turret type represents a thread synchronization mechanism, generally some sort of atomic primitive. The units marching along the paths represent the threads that require synchronization. Most are worker threads calculating a result set, but some may be polling threads reading device updates or doing other jobs. The range circle of each tower and the position of the unit along the path represent states when it is appropriate for the thread to be accessed, either quiescent states or work states where the thread has completed some useful task and has a result ready to be read. If the unit\thread moves out of the turret\synchronization range circle, the thread result is lost or held and operation on the next work cycle begins. Shooting a unit\thread with a turret is a read\synchronization operation and gathers the result.

Yeah, I know, clearly I’ve had threads on the mind a little too much lately. 🙂 I’ve been working on a major refactor of the engine at work and thread synchronization problems are tricky.

Usually when I have dreams like this I wake up in the morning and have a good laugh wondering what the heck I was thinking. This time, however, I think there may be something to it. Now, I’m not suggesting a design built literally on the model exactly as it is in the dream but I think there are elements that could be useful.

The part that is intriguing about the turret defense thread model is that you can guarantee completion (all units hit) without guaranteeing really very much at all about either the turrets or the units. The units are not synchronized with each other; in fact, in many tower games faster units can overtake slower ones. A unit does not guarantee a minimum speed–it may even be allowed to stop entirely on occasion–although it does guarantee a maximum speed. The turrets are not synchronized with each other, nor do they communicate any information to each. A turret does not guarantee a specific number of units hit, only that it will hit units at a specific rate. A turret also does not guarantee what order it will fire at units in. A unit likewise guarantees nothing about when or by whom it will be hit except that it can be hit when it is within a valid range.

Yet, with a sufficient number of correctly placed turrets all the units will be hit with none escaping. More importantly, most of the time you can have far fewer turrets than units and still complete successfully. The number of turrets required is a simple function of the maximum speed of the turret, the maximum speed of the unit, and the number of times the turret must hit the unit for completion. Placement is trickier, but with a thread model you could surely replicate that with signals.

Fascinating, isn’t it?

I’m not sure yet where to go with all this, but it seems like there’s a useful idea to be gleaned. It’s not that different that a traditional worker pool, but the lack of communication seems important. I’m sure there’s something useful that can be done with this.

1. For anyone who cares, the specific game seems to be Crystal Defenders, but with some elements of Bloons Tower Defense 3.

YouTube XL

Thursday, June 4th, 2009

YouTube just released a new “game-console optimized” version, YouTube XL.

Somehow I was out-of-the-loop on that one, so the release caught me by surprise. I like to watch videos on the Wii sometimes. I don’t use the Wii for web surfing regularly, but now and again the comfort of flopping down on the couch instead of sitting in a desk chair at the computer more than makes up for the small screen resolution of the television. Today when I went to YouTube, however, I was greeted by an all new interface. Designed specifically for consoles such as the Wii and PS3, YouTube XL is a smaller, sleeker interface targeted specifically at television viewing.

I must say, I found YouTube XL a big improvement for game console-based video browsing. It seems many of the early reviews are mixed; many reviewers seem to be complaining about some of the missing features such as comments. Honestly as someone who actually uses YouTube on a game console on a semi-regular basis I think the new UI is far more practical. Certainly there are some missing features, such as comments, but I can’t really imagine tapping out a comment with a joystick anyway. Frankly I even avoid the search box when I can. (Thank goodness for auto-complete the rest of the time.) The far improved use of screen real estate plus larger, easier to target buttons made for a much more pleasant viewing experience. The new YouTube XL isn’t a replacement for PC-based video surfing, but it’s a nice alternative when a comfortable seat on the couch beckons. I vote thumbs up.


Friday, May 22nd, 2009

On Friday, an article ran on Slashdot making note that Microsoft is “banning” the C function memcpy in favor of the new memcpy_s. While memcpy_s has in truth been around for a while, the notion that it would now generate compiler warnings has created quite an uproar. Some people seem curious as to why so many people are upset by what seems a pretty innocuous change. The article author asked if was going to affect anyone’s creativity. I can assure you that’s not the concern.

In a nutshell: the problem is you can’t tape a cupholder to a formula one race car and declare it street legal. It still doesn’t have any bumpers, it’s too low to be safe around other cars, and if you aren’t an expert driver you still shouldn’t be driving it. A cupholder doesn’t change that.

So what? A cupholder is still an improvement… right? Who doesn’t want a cupholder? Imagine for a moment that having the cupholder suddenly disqualified you from a number of races. You couldn’t run that race if you have a cupholder. It also slowed down your car–not a lot, but a tiny fraction of a second. Maybe it doesn’t slow it down enough to matter, but in those few races won by hundredths… well, maybe it does. Suddenly that cupholder doesn’t seem so nice.

To be clear, I’m not suggesting giving up on attempts to improve memory management and prevent buffer overruns. I just question if this exact approach was the best one.

Memcpy_s is basically a race car with a cupholder. While memcpy_s will certainly prevent some bugs, the same people who got one parameter wrong are just as likely to get two parameters wrong… and cause all new bugs in the process. Garbage In = Garbage Out. It doesn’t matter what the calling convention is.

On two occasions I have been asked,—”Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?” … I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.”

— Charles Babbage, 1864
discussing the first mechanical computer

The change also comes with a price: it breaks cross-compatibility with other compilers, including older compilers on the same operating system as well as other platforms. This means the same code can’t cross-compile anymore if you use memcpy_s. Someone with Microsoft suggested that GCC should pick up the change as well. Perhaps, but that assumes that GCC is the only other compiler that matters. Certainly, it’s the most popular other compiler that matters, but it’s far from the only one especially if you do embedded systems work or anything running on “exotic” hardware. And let’s be honest–if you’re not writing something that’s fast or exotic, you’re probably not writing it in C. The exception, of course, being legacy code… but surely that’s even less likely to be changed. The whole point of legacy code is that you don’t have the time\budget to update it, otherwise you wouldn’t be running it at all. These are the guys who will wrap memcpy_s in a macro named memcpy, defeating it entirely. Sigh.

As for that speed difference I mentioned? We’re obviously only talking about an extra comparison operator and perhaps a branch or two here. I know an extra comparison operator seems trivial, but if an extra comparison operator didn’t matter ASSERT macros wouldn’t exist. The speed difference is nominal, but it’s very, very real. On a lark I timed it. Copying 32 bytes 100,000 times with memcpy took on average 3952 counts, or about 0.001104 seconds, measured to nanosecond accuracy with QueryPerformanceCounter. Performing the identical operation with memcpy_s took on average 9706 counts, or about 0.002712 seconds. This was in “release mode” using Visual Studio 2008. (For the curious, in debug mode the difference averaged 8028 counts to 11340 counts, but you shouldn’t be shipping your code in debug mode anyway!)

Now hopefully you’ve done everything you can to avoid memcpy in your inner loop in the first place, but we all know there are rare occasions where it’s unavoidable. This all brings me back to my earlier point: if you’re not writing something that’s fast or exotic, you’re probably not writing it in C. Yes, you can write your own memcpy that’s probably faster than the system memcpy if you’re really worried about speed, but now we’re back to the portability issue. In short, I’m certain that to the people where the choice of language matters, those few clock cycles matter too. We’re talking folks writing device drivers here, not business applications.

Nobody is twisting anyone’s arm to use memcpy_s. You can easily disable the compiler warnings and continue to use memcpy all you like. But hopefully you see where I’m going with this: A lot of the reason that people continue to use C for certain projects has to do with performance and portability. This change sacrifices both for dubious return. If the change is not going to have tangible benefits that outweigh the problems, why do it at all?

Sooner or later, you need to trust that the programmer knows what they are doing. If the programmer can’t manage memory responsibly, you’ve got a bigger problem than an extra parameter is going to fix. To be honest, while a lot of people don’t like to admit it programmers sometimes leak or botch memory even in managed languages. There’s certainly a thesis paper or two in “possible alternatives” to the approach taken–perhaps checking the block size by querying the allocator instead of asking the programmer which would be even slower but more reliable, borrowing ideas from double entry accounting, etc, etc.–although the “real” fix surely involves more intelligent ways of thinking about memory, which realistically means a fundamental change in constructs, not a patched function.

As always, XKCD sums it up best (panel #2):


Ah, I wait for the day… 🙂

Sculpted Prim Wine Glass

Thursday, April 2nd, 2009

A wine glass is one of the first things most people make when they learn to use a 3D program. It’s fun and it’s easy.

Making a sculpted prim wine glass for Second Life is equally fun. In fact, it’s almost exactly the same except you need to UV map it before you upload it. A simple cylindrical map will do. Here’s a video to show you how using AC3D.

Wineglass Video
Click to download video

The step-by-step:

  1. Draw a polyline that will form the outer edge of your wineglass.
  2. (Optional) Use the spline tool to make your polyline into a smooth curve.
  3. Revolve the polyline around the Y axis 360 degrees. The more segments you use the smoother it will be, but the more polygons. You don’t need very many polygons, so don’t overdo it.
  4. Using the UV map tool, apply a cylindrical wrap around the Y axis.
  5. Export!

Here are the UV map settings I used.

When you import it into SL, be sure to set your mapping mode to cylindrical. If you don’t, the top and bottom of the glass will be solid instead of hollow.

Set the Stitching Type to Cylinder.

Download the model here.

AC3D Plugin: Poser Export

Monday, March 30th, 2009

This plugin exports AC3D models to Smith Micro’s Poser PZ3 format. It also generates a WaveFront OBJ file that Poser will recognize as “grouped” surfaces. This allows you to create custom characters and props for use in your Poser scenes with AC3D, and reduces the amount of time spent in the Setup Room in Poser grouping your surfaces.

Either the PZ3 or the OBJ can be used for importing a model into Poser.

The PZ3 is “pre-rigged” using the AC3D hierarchy as the skeleton and the AC3D object centres as the joint pivots. The PZ3 allows you to see working joints right away, but obviously the joints won’t be weighted as nicely as if you did it by hand. For this reason, I’d recommend starting with the OBJ file and building your skeleton in the Poser setup room instead unless your final output is a game engine or something else where Poser’s blend weights don’t matter. Like the Milkshape plugin, the Poser plugin supports null pivots. Any mesh in AC3D named “NULL_[whatever]” is treated as a null pivot so you can do “fancy” rigs if you need to. There are additional instructions in the readme.txt included with the plugin.

Download the plugin. (Requires Windows XP, AC3D 6.2 or above, Poser 6.0 or above.)

I’ve also built a sample file in case you need a working example of how to build your model.

Download the sample model.

In the sample, I’ve taken the perfume atomizer that comes in the AC3D stock model library. (You can load the original by clicking File > Library inside of AC3D and loading it from the samples folder.) I’ve re-rigged the atomizer so it can animate, then exported it using the Poser plugin. After import into Poser, I applied my materials, set the lights and tweaked the skeleton. All of the files are included so you can see each step.

  • – the rigged version of the atomizer from the AC3D library.
  • antomizer-rigged.pz3 – the unedited poser file exported by the plugin (yes, I realized belatedly I spelled it wrong, but I didn’t want to fix all the file links, doh)
  • atomizer-final.pz3 – the final file in poser, with materials applied and joint limits, etc., set

If you’re into building Poser models in AC3D, I would also recommend Dennis’s Poser Morph Target Assistant. The morph target assistant, as the name implies, will allow you to add morph targets to your Poser figures.


How to Send Me a Newsletter

Monday, March 30th, 2009

Like most people, I get waaaaaay too much e-mail. Between some crazy deadlines, out-of-town conferences and wiping out my primary desktop machine, I’ve been offline for a couple of weeks and boy-oh-boy have the messages piled up. [If you’re waiting for a reply from me on something, I promise I haven’t forgotten you. 🙂 I’m still re-installing and it’s going to take me a few more days to dig my way out.]

While I don’t subscribe to nearly as many newsletters as I used to — most of my news-ish stuff comes in the form of RSS feeds these days — I still subscribe to a few. Here are some tips if you’re writing a newsletter that will decrease the odds that I’ll delete it without reading it:

  • Don’t change your “from” address. I white-list only those newsletters I want. If you change your address without telling me first, your newsletter will be deleted as spam and I won’t even know it.
  • If you must change your e-mail address, tell me before you change it. Sending me a “we’ve changed our address” message from your new address is an instant FAIL. I’ll miss it because your new address isn’t white-listed. I can’t believe how many people don’t think about this one.
  • A unique per-user ID in the subject line helps me tell your newsletter apart from phishes that look just like it. If I get too many phishes impersonating your newsletter, I’ll probably just unsubscribe it. I know it’s not your fault, but I don’t have the time to spend sorting out the fakes. A unique per-user ID in the subject is a very fast, easy way to make it obvious which messages are probably real and which are almost certainly fake.

Programming is Like a Dream

Tuesday, March 17th, 2009

Have you ever noticed that computer programmers are very easy to startle? Walk up behind an accountant or a web designer sketching out banner ads, and nine times out of ten they’ll know you’re coming from a mile away. But computer programmers aren’t like that. You can stand right behind a programmer for ten minutes and quite often they will not even know you are there–especially when they are working on a difficult section. The larger the system, the deeper the trance.

I just read two fantastic essays describing programming as a dream-like state. I’d never thought of it this way before, but I’d have to say that’s the most dead-on accurate description I’ve ever heard.

Now, imagine you were in deep sleep, dreaming away about apples at 3am, and I came bashing into your room and said “Sorry, but we need you to dream about bananas now.” Do you think you could go straight back to sleep in a few seconds, dream about bananas for a bit, and then jump back to your original dream about apples? No, of course not, but this is what managers expect when they throw new tasks at us while we’re busy coding the first one. When this happens we’ve lost the hours we’ve spent on the first dream, we’re completely lost for half an hour, and then we eventually manage to get into the new dream.

This is very true. It takes a little while to “shift gears”. For small programs, it’s not so bad, because you can conceptualize the whole thing in a few minutes or seconds. For large systems it takes longer to get yourself back into the right frame of mind. You have to think about all the things you were thinking about when you put it down last, and this is often a lot harder than it sounds. There’s a small time penalty that’s paid every time a programmer sits down to work, but it’s only paid once per session. This is why a lot of programmers prefer to work in one long stretch instead of several short ones. In six 30 minute stretches, zero code will get written–zero good code, anyway–because you spend the entire time just getting started. In one three hour stretch, however, you might just compose a masterpiece.

I can sit down and start coding right away, but I don’t really “hit my groove” for an hour or two. Sometimes I try to accelerate that by leaving myself a thread the day before. I’ll intentionally not finish a block of code I was working on, but I’ll leave myself copious notes on how to write it so that when I sit down in the morning I can start right away on that block. In the morning I don’t really have to think about the block too much because the answer is right there, but by-and-by as I code it up the thoughts start rushing back to me. By the time I’ve finished writing the block, my head is where it needs to be and I can pick it up from there. Sometimes if the code is very complex I just keep thinking about the code until morning. Most programmers can and will do this, too. Some perhaps can’t hold onto the code for days or weeks, but virtually all can for a few minutes or even a couple of hours.

I know it sounds strange, but think of it this way: Have you ever had a dream that lingered? You know, when you have a nightmare or other intense dream, and it keeps coming back to you while your doing other things throughout the day? Your mind is still dreaming the dream even though you are awake, and you can feel it back there drifting around. Keeping code in your head feels very much the same way.

There’s a right and a wrong way to interrupt a programmer. The best answer is “don’t”. But if you must… If you think about programming like dreaming, you’ll realize that programmers remember more if you interrupt them gently than if you barrage them. If someone wakes you out of bed and starts shouting a long list of things at you to remember, you’ll almost certainly forget what you were dreaming. However, if someone shakes you gently and gives you a few seconds to open your eyes and look around before they start talking, it’s a lot easier to remember the dream for later. The same works for programmers. If you just walk into their office and start talking, one of two things will happen: they’ll completely forget what they were coding, or they won’t really be paying attention to you. However, if you quietly walk up to them and let them know you are there but say nothing until they are ready, the programmer can come to the end of the thought they are on. Once they’ve finished their thought, it will be easier for them to pick up next time and still pay attention to what you have to say.

Let’s take a maze for example. There is a task for the programmer to come up with an algorithm of finding the way out of the maze. When a programmer is working on this task he isn’t just a God’s Finger showing the directions to a little girl lost in a great maze. He isn’t that girl or the walls of a labyrinth either. He is actually all of that in a same time. In order to solve the task he must BECOME the labyrinth, the walls, the lost little girl and whatever else may just came along with it. It is not a figure of the speech – the programmer is literally SLEEPING and DREAMING that all in his mind.

My brother contends that it is this same phenomena that makes programmers so bad at estimates. The problem is, as he says, that the programmer already knows everything that needs to be written. When you have it all in your mind, it seems like it should be easy to write it all down. But it’s not. The physical act of writing the code takes a long time. But more importantly, your mind never thinks about all the “meaningless” details. It knows how to code them so well it doesn’t even need consider their existence anymore. Unfortunately, the computer still needs them. It can’t infer. All those loose ends, niggling details and corner cases end up eating a great deal of time… sometimes more than the rest of the program.

How does programming feel to you? What is your experience like?

Booty Blocks

Tuesday, December 30th, 2008

My good friend James works for Planet Moon, and they just finished a cool new iPhone game. It’s called Booty Blocks and it’s very cute. It’s a block stacking puzzle, but with a twist… you can continue to move the blocks after you’ve placed them, including using the iPhone’s tilt sensor to shake the whole stack. Great stuff. Congrats to the team!

How To… ?

Thursday, December 18th, 2008

This image shows the Google “auto completion” results when typing the phrase “how to”. The idea of auto completion is that the computer will complete the phrase you are most likely searching for based on what other people are searching for. In a round-about way, it tells you a little bit about what other people are thinking… or at least what Google thinks they are thinking! 🙂

Some results, like writing a resume or cooking a turkey, I’d expect given the economy and the season. But others, such as knitting, surprised me. I always find it fascinating to see what the world is pondering.

Writing Design Docs

Monday, December 1st, 2008

Brenda Brathwaite recently posted an excellent article on creating a game design doc. Her best advice:

Before you start writing, consider is your audience. Many new designers write documents as if they’re being written for gamers instead of a programmer who’s tired, annoyed and up at 3 a.m. coding your combat system…

So true! Even if you’re just writing implementation notes for yourself, this is an important thing to keep in mind. When there are a lot of complicated rules going on, it’s easy to get bogged down with loose ends when programming the implementation. Unfortunately, this sometimes means important details get overlooked. A careful and detailed list of requirements without a lot of extra hype cluttering it up is invaluable as a checklist when the going gets rough. It will help prevent anything from being missed.

Writing the right amount of detail is a fine art. You need enough detail to make sure everything important is explicitly defined, but not so much that the document becomes so overwhelming that you–or your team–will be tempted to just skim over it when you refer back to it later. Personally, I’m a big fan of writing design docs in html help file format, mainly because most of the editors force you to create drill-down type topics instead of writing the document linearly. Incidentally, many of the editors will also let you save to PDF or other file formats… it’s not the file format that’s important, as much as the concept of writing hierarchically instead of linearly.

Hierarchical format is very helpful when implementing because it allows you to keep track of the big picture with fewer minutiae details in the way while blocking out the architecture, yet you can focus in on the important-yet-tiny things when you implement the specifics. If you have the discipline to do it, keywording individual topics is also immensely valuable as the document grows in size. When programming large systems so many components end up more interrelated than people realize, and good keywords are another tool that help find everything important when you’re coding it up.

Women-in-Games Online Auction

Wednesday, November 26th, 2008

The Women in Games International (WIGI) “Celebrity eBay Auction” has started. The auction includes lots of games and game-related books and merchandise, many of the items signed by the developers. Proceeds go to support Women in Games International.

Like many math and science-related fields, only 3% of engineers \ programmers in the game industry are female. Women in Games International’s goal is to help encourage more women to enter the industry.

A couple of interesting items from the list:

  • Lincoln Revolution poster signed by Sid Meier
  • 3 music CDs signed by The Fat Man
  • Electronic arts watch
  • BioShock Strategy Guide signed by Ken Levine
  • “Attack of the 5 Foot Women” Mixer

    Wednesday, November 12th, 2008

    IGDA Women in Games and Women in Games International is hosting an industry mixer at the VGXPO video games expo in Philadelphia, and my company is helping sponsor. Cool! The mixer will be Saturday, November 22 and will have food, drink and door prizes… plus, of course, hopefully lots of opportunities to chat with other people in the games industry.

    Going to be in town for the show? You can read more and RSVP the event here.

    Harry Connick Jr on Spore

    Wednesday, October 22nd, 2008

    This video is very funny, but it’s also another great example of why it’s important to avoid the game design problem of “death by save file”.

    Sales Tales

    Sunday, October 12th, 2008

    Joel Spolsky (Joel on Software) has a new article in Inc. magazine on the things that can go wrong with commissions and incentive sales plans. The article is ok–interesting, although there is a lot of ground not covered–but it does make me think of a funny story.

    Many years ago when I was still in college, I had a PC with a trimline cabinet that was only a few inches tall. As a consequence, it only had three expansion slots. The slots were on a riser board mounted parallel with the mother board, and even that was a pretty tight fit. Now this was back in the day when computers didn’t have video or sound on the mother board, and many didn’t have sound cards at all. Many had only a PC speaker which for the most part produced only one noise: “beep”. I oh-so-wanted a sound card. But I couldn’t install one because my slots were already full with the video card, network adapter and something else I couldn’t remove that eludes me at the moment. I was stuck with no sound card because I had nowhere to put it.

    Then, a miracle happened. The hole-in-the-wall computer parts store where I used to shop got a “two in one” card that had a sound card and a video card on the same board! This store sold mainly used and import goods, so most of the items in there were one-offs. Very excited and concerned I might not run across another one, I bought it right away.

    Naturally, I got the board home and installed it only to discover the hardware was faulty. Disappointed as I was, I ran a full set of diagnostics to confirm it really was broken. Indeed, it was damaged, so I returned it to the store who kindly refunded my money without any hassle.

    A few weeks later, my brother bought me a surprise gift! He knew how badly I wanted a sound card, and he had found a two-in-one sound and video card at the parts store so he bought it right away for me. I laughed. It was the exact same faulty board I had returned to the store just a short time before, the same crumpled box and everything. I returned it to the store, who again gave me a full refund.

    Not long later, my dad bought me an early Christmas present. It was the same board again! The exact same board. This was getting downright silly.

    I brought the board back to the store and spoke with the salesman. “Doug,” I said, “You keep selling me this board over and over again. You know it’s broken. You know I’m just going to return it again. Why do you keep selling it to me?” The salesman looked at me, leaned closer and said, “Yeah, Lis, I know it’s broken and I know you’re going to return it. But you see: I get a commission on the sale every time.”

    Groan. Never would have thought of that one. 🙂

    Little Big Calculator

    Saturday, October 11th, 2008

    From upsilandre: (Be sure to wait for the “inside view”!)

    According to the description, the level uses:
    – 610 magnetic switches
    – 500 Wires
    – 430 pistons
    – 70 emitters
    …and then some!

    Time-Limited Demos, Death by Auto-Save

    Friday, October 10th, 2008

    The Designer’s Notebook: Bad Game Designer, No Twinkie! IX by Ernest Adams is up over at Gamasutra. If you haven’t read the column before, it’s a checklist of bad design choices that will frustrate the heck out of your players. If you missed any of the last eight episodes, you can find a database of all the points here.

    This year’s column is particularly good. Points covered are:

    – Failure to Explain Victory and Loss Conditions
    – Time-Constrained Demos
    – Obvious and Cheap Reskins
    – Computer Crashed While Saving? Game Over
    – Friendly AI Characters That Do More Harm Than Good
    – Fake Interactivity
    – Bad Gamepad-to-Mouse/Keyboard Conversions
    – Setting the Player Up to Fail
    – Your Only Save is Immediately Before Your Death

    I’m hard-pressed to disagree with much that was said with the exception of time-limited demos. Most of the time, I agree, that time-limited demos are a bad idea. I’d rather have a content-limited demo. If the game cuts me off too soon I can’t tell if I liked it or not. That said, I’ve seen cases where time-limited demos have worked very well. For example, I think PopCap does an excellent job with time-limited demos. I’ve bought several of their games when the demo cut me off and I was eager to play more.

    I’ve given some thought as to why some time-limited demos work, and some are just irritating. I think the key difference is not just whether or not the player has had enough time to enjoy the game before the demo runs out, but whether or not the player has had enough time to understand the game before the demo runs out. A casual puzzle game can be understood in a few seconds, and most of the demo is spent finding out if you like it. For an adventure game, you might have to play an hour or more before you understand the mechanics well enough to actually play. If the whole demo is spent learning how to play, you never get enough time to find out if it is fun.

    The last point in the article, “Your Only Save is Immediately Before Your Death”, is a really important one. I think we’ve all been bit by this at some time or another; I know I have. You load the game from your save point and die before you have a chance to even do anything. After 10 reloads, you realize you might as well delete the save file. Ernest doesn’t mention it, but this is a critical consideration if your game auto-saves! If you auto-save, be warned that you may have just killed the player permanently if you are not careful.

    Wii Music, Too-Cute Kids

    Thursday, October 9th, 2008
    Wii Music 'Preschool' documentary

    Games: Good for your Brain?

    Thursday, October 2nd, 2008

    A new study by Learning and Teaching Scotland (LTS) working with Her Majesty’s Inspector of Education and the University of Dundee tested 600 pupils and 32 schools to determine whether Nintendo’s Brain Training games really do improve learning. The answer? Yes! After nine weeks, all students improved their test scores, but students playing the game improved by a further 50 percent than the control group.

    Also in the news, companies too are researching whether games can improve your cognitive abilities. From CNN:

    Could playing computer games enhance mental agility enough to turn people over 50 into better drivers? Allstate Corp. wants to find out, and if the answer is yes, it might offer insurance discounts to people who play the games

    The article goes on to state that the games aren’t specifically driving-related, but rather designed to raise visual awareness and reverse age-related cognitive decline.

    Quote of the Day

    Wednesday, September 24th, 2008

    “Multithreading is just one damn thing after, before, or simultaneous with another.”

    – from “C++ and the Perils of Double-Checked Locking”

    Joint Deformation Tutorial

    Thursday, September 18th, 2008

    Jonathan Rush at pig-brain has an excellent tutorial on building 3D character joints so they animate properly. Building shoulders and elbows that deform properly is something a lot of new artists have difficulty with, and even experienced artists struggle with from time to time–especially when working low-poly!

    Read the Tutorial

    Metal Gear Case Study

    Tuesday, September 16th, 2008

    The SoftImage site has a great case study on the making of MGS4 with lots of wonderful images for those of you interested in some behind-the-scenes pictures of the game design process.

    Large Hadron Rap

    Thursday, September 11th, 2008

    From Kate MacAlpine, a trainee at Cern:

    Parallel Processing in a Nutshell

    Friday, August 29th, 2008

    A friend sent me the link to this video, and I have to say, this is the most clear and direct explanation of the difference between linear processing and concurrent processing I’ve ever seen. …That, and it’s just darn cool to watch a 1100 barrel paintball gun get fired.

    Best Comeback Ever

    Friday, August 22nd, 2008

    I worked on EA’s Tiger Woods PGA Tour Golf 2000, as well as the “Play Against the Pros” patch for Tiger ’99, so this particular game series will always have a place in my heart. Even that aside, this video had me absolutely in tears laughing as EA pwns a “glitch” in the game.

    Shred Nebula

    Thursday, August 14th, 2008

    Local developer Crunchtime Games is launching Shred Nebula in just a few more weeks. Check it out on XBLA on September 3rd!

    How to Make Two Shapes from One Prim

    Wednesday, August 13th, 2008

    Many times people ask me if it’s possible to create two disconnected shapes from one sculpted prim–without resorting to alpha maps. The answer is yes, you can! It can be a little tricky depending on the shape, but it absolutely can be done. Today I’ll show you how using the AC3D exporter.

    Two disconnected shapes made with one sculpted prim.


    Spore: What Have You Made?

    Monday, June 23rd, 2008

    Well, the Spore Creature Creator has been out a few days now. It’s pretty fun!

    I was really curious about the animation system, since that’s been the subject of several tech talks the last few years. I must say it works remarkably well, especially considering the number of bizarre creature shapes that are possible. Great stuff.

    Longhorn Bullipede


    Zog the Zig-Zag Frog

    Lighting for Games

    Tuesday, June 17th, 2008

    Eric Gooch of Insomniac has an excellent tutorial on Creating the Lighting for Resistance: Fall of Man. The best part of the tutorial are the “before and after” shots that show how each scene looks lit and unlit. A lot of people underestimate the importance of good lighting, but these pictures really help make it clear. Well worth the read!

    Crayons for the New Millennium

    Tuesday, May 27th, 2008

    Remember growing up with paper and crayons when you were a kid? Remember handing your doodles to your parents to hang on the refrigerator? Ah, fond memories. Kids and art may be timeless, but the methods sure have changed! A true child of the digital age, my little girl just made her first 3D model and asked me if I would post it on my blog. So here it is. 🙂

    It’s a candlestick. Pretty cool, eh?

    Phoenix Mars Lander

    Tuesday, May 27th, 2008

    Want to know what the Mars lander is up to right this minute? Read the Mars Phoenix twitter. Best part: it’s written in the first person from the pov of the craft! 🙂

    Texture Monitor Updated

    Wednesday, May 14th, 2008
    EDIT: The texture monitor is now obsolete. As of 6.4, AC3D now includes its own, much better texture monitor.

    A new version of the AC3D texture monitor plugin is available! This version adds a “smart update” feature that prevents the same texture from being reloaded multiple times, even if you use the texture multiple times in your scene. The texture monitor now also ignores files who’s “last modified” time stamp has not changed on disk within the last 10 minutes, so textures you haven’t changed don’t get reloaded. This should make load times much faster, especially in large, heavily-textured scenes.


    Read about the texture monitor or download the file here.

    AC3D Plugin: Displacement Mapper

    Tuesday, May 13th, 2008

    This plugin adds displacement map support to AC3D. Displacement mapping is a technique that deforms the current geometry, displacing the vertices in accordance with elevation values stored in a texture map. This technique is useful for “painting on” details onto a very high resolution mesh.

    Displacement maps can be painted with 2D art tools such as Corel, Photoshop or Gimp; or, they can be exported from 3D sculpting programs such as ZBrush or Mudbox. The AC3D displacement map plugin supports 8-bit grayscale and 16-bit red-green (POV-Ray format) displacement maps.

    If you are new to displacement mapping, this tutorial explains the process in more detail.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    Solve Puzzles for Science

    Friday, May 9th, 2008

    If this isn’t the coolest new geek-toy, I don’t know what is! is a new game by Rosetta@home where players fold proteins for high scores. Shockingly, it’s actually a lot of fun–you can think of it sort of like a super-advanced version of Tetris. A training mode walks players through the basics, and a challenge mode allows players to compete worldwide to see who has the most l33t folding skillz.

    Fold.It – Who says serious games can’t be fun, too?

    The goals of the research project are to learn what strategies human players use to solve the very complex problem of protein folding so the same techniques can be taught to computers. In addition, players will soon be able to solve protein folding “puzzles” that computers haven’t yet solved. While the puzzles currently available are all proteins where the real-life structure is known, plans are to release proteins where the structure is unknown in the very near future–allowing players to participate in real-world research and help save lives. If any break-throughs do occur, researchers have promised to share credit with the player who solved it. How cool is that?

    Eventually, players may even be able to design their own proteins!

    Download it now: Fold-It

    Fake Toon Outlines

    Wednesday, May 7th, 2008

    Here’s a fun one! Ever wanted to re-create the look of heavy “toon” outlines, but didn’t have a shader for it? Believe it or not, there’s an easy way to fake it using fixed-function only.

    Here’s how to do it:

    • Make sure all your surface normals are unified (facing outwards) and your polygons are set to 1-sided
    • Make a copy of your object and resize it so it is ever-so-slightly larger than the original
    • On the copy, set the surface material to black
    • Invert the surface normals

    That’s it! Nifty, eh? The method’s not perfect–for best results, stick to convex objects–but it’s great for quick renders and on limited hardware platforms where shaders aren’t an option.

    Quote of the Day

    Thursday, April 24th, 2008

    “I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.”

    Bjarne Stroustrup

    Helping People Play Nice

    Monday, April 7th, 2008

    According to a recent report by NPD, 42 percent of people who play games play online. Of those who do play online, 90 percent play through their PCs. Only 19 percent of the 42 percent play on a game console or portable.

    That it means that nearly 60% of all gamers don’t play online at all, and an even smaller fraction play console games online–despite the fact that the retail console game market is substantially larger than the PC market. That still adds up to millions of players, but it’s small compared to the offline and single-player market.

    Many people have explored different reasons for this from connectivity to ease-of-use, but in a new article on Gamasutra, Bill Fulton explores one of the less-discussed causes: The behavior of some online gamers is so abrasive–even to the point of abusive at times–that many new players would simply rather not play.

    Some gamers might be thinking “If he’s so thin-skinned that he can’t take the online banter, maybe he shouldn’t play online.” Unfortunately, many people do just that — they stop playing online.

    Even more gamers go online a few times and then never play again. This isn’t just my personal speculation; I have seen convincing data from two different sources that the biggest problem with online gaming is the behavior of others. The biggest problem isn’t the cost; it isn’t connectivity issues, or even the quality of the games — it is how people are f***wads online.


    The online behavior of our customers is dramatically reducing our sales, and continues to stunt the growth of our industry. Non-gamers simply don’t love games enough to put up with the crap they get online.

    I think most people who play online would agree that this is a problem… not just for games, but across the Internet in general as forums, instant messaging and other services are often equally plagued by griefers, net trolls and others those who’s primary source of amusement is making other people miserable. While many people use these services anyway, many people don’t, or they severely limit the online communities they participate in.

    The article goes on to further suggest ways that game developers can implement game rules to discourage the anti-social behavior of the minority of players who would otherwise spoil the game for everyone.

    Read the article: Fixing Online Gaming Idiocy: A Psychological Approach (WARNING: This article contains strong language.)

    NPD report on online gaming: Online Gaming 2008

    AC3D Plugin: Reparent Object

    Tuesday, April 1st, 2008

    This is actually a really old plugin, but it still has its uses. This plugin allows you to change the parent of a mesh or group by entering the name of the desired parent group in a dialog box. You can accomplish more-or-less the same thing via drag and drop in the hierarchy menu already, but it’s still handy when you have a really complex setup and don’t want to hunt through the list to find what you’re looking for.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    How to Cut Edges and Add Loops in AC3D

    Saturday, March 22nd, 2008

    From time to time, people ask me how to “cut edges” in AC3D since the way AC3D handles edges is a bit different than other programs. Usually, I use the Divide Loop plug-in which is normally the fastest, easiest way to go. But, every now and then you get an edge that isn’t well suited for Divide Loop. In these cases, I use a combination of Insert Vertex and Slice Surface.

    This video shows you how:

    Click to Download Video

    A QUICK SIDE NOTE: It is much faster to use the hotkeys (ctrl+shift+I and ctrl+shift+L) than it is to use the menus… the whole process can be completed in only a few seconds if you use the hotkeys. However, for the sake of clarity, I use the menus in the video so you can actually see what I’m doing. 🙂

    How Fast the World Changes

    Friday, March 21st, 2008

    My son to my daughter when she started a bandwidth-intensive game while he was web-surfing on a different computer:

    “Quit hogging the Internet!”

    It amazes me how far we’ve come in such a short time for the Internet and concepts like bandwidth to be so commonplace that kids could have an argument like this. 🙂

    More Excuses to Play Halo

    Friday, March 7th, 2008

    Looking to do some good while you earn your gamer points? According to Kotaku, RagingJellyBean of the Femmes Fatales needs a new kidney. The Femmes Fatales will be hosting a Halo 3 tournament on March 22, 2008 to help raise money towards the medical costs. The tournament will be 4 vs 4 and 1 vs 1 elimination. Entry fee is $10.

    Read more about it

    – Sign up for the tournament at Gaming for Others


    Thursday, March 6th, 2008

    If you’re into reverse engineering biological systems–in my mind, one of the most fun parts about AI programming–this talk by Drew Endy is absolutely a blast. Also be sure to check out the BioBricks project at or download the actual “bricks” at the MIT Registry of Standard Biological Parts.

    The BioBricks are sequences of DNA described in a standardized, open-source format where each sequence represents a single, interchangeable part or “device”. A data sheet is provided for each device that describes what it does and what its tolerances and parameters are, etc., similar to the data sheet for an electronics part. Like an electronic component, devices can be combined together to make more complicated structures. When you’re finished designing your device, the sequenced DNA can be inserted as a plasmid into a suitable host cell and used to make all kinds of cool stuff, like this biological film where the bacteria change color in response to light.

    Hello World displayed by light-sensitive, color-changing eColi

    Gary Gygax Passes On

    Tuesday, March 4th, 2008

    Gary Gygax, one of the co-creators of Dungeons and Dragons alongside Dave Arneson, passed away in his home today at age 69. Well-known for his founding contributions to the ever-popular genre of fantasy and role playing games, Gyax wrote, published and was otherwise involved in more than 80 games, related products and books enjoyed by millions of hobbiests worldwide.

    When I was in elementary school, my parents didn’t have money for lunch money so I washed dishes in the school cafeteria. Because I had to work the lunch line during the time when I would normally have lunch, I had to stay in during recess to eat. A Korean boy and a few other children were in the same situation. We used to play D&D together while we ate, and we had a lot of fun anyway even though we couldn’t go outside. I kept those friends all the way through high school and beyond. Thanks, Gary, for the good times. We’ll miss you.

    Original forum announcement from Troll Lord Games

    CNN News summary

    Crayon Physics Deluxe

    Tuesday, February 26th, 2008

    Congratulations to Kloonigames, winner of the Seumas McNally Grand Prize at the 10th Annual Independent Games Festival Awards, for their game Crayon Physics Deluxe.

    [youtube: 350 292]

    Way to go, guys!

    Quote of the Day

    Friday, February 22nd, 2008

    Courtesy XKCD:

    Adventures in Suffugium

    Wednesday, February 20th, 2008

    I was recently introduced to the delightfully-dystopian SL build of Suffugium. The New World Notes describes it as “Donald Trump meets George Orwell”, and I’d have to agree. It’s dark, oppressive and a lot of fun. There’s plenty to do and explore–to clarify for you cynics, that’s plenty of non-porn things to do–from avoiding the roving police drones to wandering through the twisting sewer maze.

    All visitors are requested to give a handscan id. Don’t worry if you miss it; the police droids will find you for an obligatory scan soon enough!


    Areum Starport

    Tuesday, February 19th, 2008

    Well, I finally broke ground on the starport in SL.

    I started with some robot minions. I figured this is going to be a big job, so the first logical thing to make is some help.

    The second thing I made is a crate. 😀

    Plasma HD Render

    Wednesday, January 30th, 2008

    The tiny little 320×240 render of the plasma for the POV-Ray tutorial was a bit hard to see, so I did a render in 1920 x 1080 resolution for those of you interested in seeing the details. It’s still a bit compressed, but the image is a lot clearer. You’ll find it here: download the video.


    The Most Perfect Video Game

    Monday, January 28th, 2008

    Why make games? Steve Meretzky, formerly of Infocom and currently of Blue Fang games, gives us all a reason to be in his speech “The Most Perfect Video Game”, presented at the Boston Postmortem:

    Rendering Plasma in POV-Ray

    Friday, January 25th, 2008

    POV-Ray has some very powerful commands for rendering realistic plasmas and explosions, but not very many people know how to use them well. This tutorial will show you how.

    [youtube: 350 292]
    An turntable of a plasma cloud rendered in POV-Ray
    UPDATE: download the high-res version


    Gallery: Sea Horse

    Friday, January 18th, 2008

    Click for larger view, or download the high-res image.

    This image was 3D modeled in AC3D using the box modeling method. The textures were hand-painted (no photographs) in Corel Photopaint. The final image was rendered with Poser using image-based lighting.

    Tips for Authoring Game Demos

    Thursday, January 17th, 2008

    David Edery, Worldwide Games Portfolio Planner for Xbox Live Arcade, just posted an excellent article on developing compelling game demos for downloadable titles.

    The best advice in his article? The trial is not just the first five minutes of your game. David recommends showing players the best parts of your game–not just the first part–to peak their interest.

    If your game has an incredible mode that fires up anyone who plays it, but that mode is only encountered in the final third portion of the game, think about ways you can expose a slice of that mode during the trial experience. There’s no law that says a trial must begin at the start of a game. And there’s no law that says you should be forced to “level up” in a trial to the point at which you can finally enjoy the most fun aspects of a game.

    Read the full article: How to Increase Trial, Improve Conversion Rate, and Sell More Games

    Quote of the Day

    Thursday, December 20th, 2007

    “In God we trust… all others bring data.”
    – Dr. W. Edwards Deming

    AC3D Plugin: Milkshape ASCII Exporter

    Tuesday, December 18th, 2007

    AC3D ships with a Milkshape ASCII exporter, but it only exports the geometry and doesn’t export the animation rig. This plug-in supplements the existing exporter by adding an alternate export option “Milkshape ASCII (With Skeleton)”. This allows you to export to Milkshape ASCII format with the skeleton and materials intact.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    Practical Use of Virtual Worlds

    Friday, December 14th, 2007

    From Reuters:

    Instead of jetting over to Bali for climate talks, Edward Markey (a Democrat from Massachusetts) will use a 3-D animated version of himself to address the conference at 9.30 am on Wednesday Bali time. It is estimated Markey will save 5.36 tonnes of carbon dioxide emissions by doing this.

    Watch the speech or the Q&A.

    Merriam-Webster Word of the Year: W00t!

    Thursday, December 13th, 2007

    Believe-it-or-not, “w00t” is Merriam-Webster’s word of the year. For those of you not familiar with the term–I’m not sure who, as I’d think anyone reading this blog probably uses “woot” as part of their daily vernacular–it’s an expression of glee or triumph commonly used by gamers.

    “W00t! We totally pwnd those n00bs.”
    “Steak for dinner? W00t!”

    A bit of gamer culture making it as word of the year? Well, I guess there’s only one thing I can say to that: w00t!

    One Dozen Easy C++ Programming Tips

    Wednesday, December 12th, 2007
    1. Consistency breeds ease of use. Even if your buttons do some weird thing, as long as they all do the same weird thing users will eventually figure it out. Make the buttons each behave differently, however, and the user is lost forever.
    2. Sort data the way it is most likely to be used. The logical sort order for a date is chronological, not alphabetical.
    3. When in doubt, the default option should be the least destructive \ most undoable choice.
    4. If you have to write an explanation of your code, never assume that the reader has read the same papers you have, unless you told them what else to read–and where to find it–first.
    5. Wrong code comments are worse than no code comments.
    6. “Copy and paste” errors happen to everyone. Be on the look out for them.
    7. If a bug disappears in debug mode, 90% of the time it will be one of two things: 1) you are overflowing memory or 2) you have a thread race condition. At least two thirds of the time, it will be a memory overflow. It is extremely unlikely it is problem with the compiler.
    8. Releasing your program compiled in “debug mode” is not an acceptable “fix”. The bug only looks like its gone… it’s still there, and can come back to bite you at any time. Don’t do it, no matter how tempting it might seem.
    9. If the program crashes on exit, you probably freed something you didn’t properly allocate, or that isn’t allocated anymore.
    10. Leaking memory is bad. Freeing pointers or objects that don’t belong to you is worse. If an object you expect to be free is still hanging around, don’t force it, find out why… “fixing” bugs by patching the symptoms and not the cause makes the code much harder to repair in the long run.
    11. If you have an intermittent bug, and your “fix” made it go away and you don’t know why, the bug is almost certainly still there. If you can’t explain it, you didn’t fix it.
    12. Good documentation is more important than more features. Write it down, even if it’s just a simple “readme.txt” file… the next person who has to work with your stuff will appreciate it!

    More tips? Ideas you would recommend? Post a comment!

    A Million Objects

    Sunday, December 9th, 2007

    From a Zen Kōan:

    Gyosan asked Isan, “If a million objects come to you, what should you do?” Isan answered, “A green object is not yellow. A long object is not short. Each object manages its own fate. Why should I interfere with them?” Gyosan bowed in homage.

    It’s good advice for programming multi-core, too.

    AC3D Plugin: NMF (ATI Normal Map) Exporter

    Saturday, December 8th, 2007

    This plugin exports your AC3D file into NMF format, the native input format of the ATI NormalMapper utility. NormalMapper allows you to generate normal maps, bent normals and ambient occlusion maps suitable for use in video games and other realtime 3D applications.

    If you aren’t familiar with normal maps, normal maps are a way to make your low-polygon model look more detailed by encoding surface information from a high-polygon version of the same model into a texture map. Ben Cloward has an excellent tutorial where you can learn more.

    This plug-in requires the free NormalMapper utility available from AMD in order to process the output files. The companion NormalMapperUI (Stand Alone) available at the same location is also helpful, but not required.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    AC3D Plugin: Bake Texture Layout

    Thursday, December 6th, 2007

    This plugin “bakes” a texture from one object to another, allowing you to transfer texture data between two models with the same geometry but different texture coordinates–without having to re-paint the texture bitmap! This is useful if you start to paint a texture, and change your mind later about the UV map; or for games when you can’t change the layout of the map for technical reasons, but would like different UVs for convenience during painting. It’s also good for fitting text onto a warped surface or other projections that would be difficult or impossible to paint by hand.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    Pardon Our Dust

    Thursday, December 6th, 2007

    Well, Pivot finally died on me. Please don’t mind any broken links in the next couple of days while I get moved over to WordPress. Thanks!!

    Why Researching Workflow Matters

    Friday, November 30th, 2007

    Autodesk has a fun quiz on their site called the Fake or Foto test. In the quiz, you have to look at each image, and guess whether it is real or a render. Surprisingly, I aced it the very first time!

    After I took the quiz, I went back and documented all the things that made me think a particular image was real or fake. That way I could see what it was that clued me so that I might improve my own work. In almost all cases, it wasn’t that the CG images were obviously wrong in any way, it was simply that the real images had more “detail” in them.

    For years, the limitation has been what the software could do, but I’m not so sure that’s true anymore. In games especially, production costs have gone up as graphics have become more realistic simply because making detailed images is very time consuming. The relationship between time, money and graphics detail is linear. The problem, of course, is that neither time nor money are infinite. Limited budget means limited production cycles, which means limited time to spend adding things like scratches, scrapes and nose hairs. Eventually, we’ll reach a point where we can’t add more detail not because we’re out of RAM–we can’t add more detail because we’re out of time! Truthfully, I think we’re on the horizon of that already.

    While I’m certain that there are still numerous improvements to be made in traditionally researched areas such as lighting, I think technological improvements to workflow have more potential to improve the quality of computer graphics in the near future than virtually any other area. Automated procedural geometry, better methodologies and tools that allow for less restrictive workflow patterns–such as recent advancements in re-topology interfaces–can allow us to complete the same job in less time and with far less effort. We know the artists and software can do it; now we need to make it practical.

    For the curious, here are my impressions from the Autodesk quiz:

    ** WARNING ** Spoilers follow. You might want to take the quiz yourself before you read my analysis of the images.


    How Games Influence Ideas

    Thursday, November 29th, 2007

    Games, books, and movies may be entertainment, but they also influence the way people think. The “Values at Play” research project, a collaboration between Hunter College’s innovative Tiltfactor Lab and New York University sponsored by the National Science Foundation, is investigating how game designers unconsciously and consciously express and encourage specific worldviews through their creations.

    This looks like an interesting project, providing a growing body of useful research for seasoned developers, as well as game design contests and curriculum tools for students and educators.

    Wearable Mo-Cap

    Wednesday, November 28th, 2007

    This new wearable motion capture system is so compact, it can even be used to capture movement in otherwise impossible environments like behind the wheel of a car!

    [youtube: 350 292]

    The most interesting part? The authors claim to have built their prototype from off-the-shelf components for only around $3K. Read the paper here.

    What is Ambient Occlusion?

    Tuesday, November 27th, 2007

    Ambient occlusion is a lighting technique that is commonly used to create soft shadows on objects. Ambient occlusion isn’t used to create the type of shadows that are cast from objects with a light shining directly on them. Instead, ambient occlusion generates the type of deep shadows that appear in the corners or creases of things, where it is hard for the light to reach.

    Technically speaking, ambient occlusion is a global illumination technique. However, in common usage of the term it is often referred to as a cheap alternative to global illumination. To clear up any confusion, what most renderers refer to as “global illumination” is actually an amalgamation of several techniques such as radiosity, metropolis light transport, image-based lighting or photon mapping. The actual techniques used differ slightly from renderer to renderer. Some renderers include an ambient occlusion term as part of their global illumination calculation; others do not.

    Like most global illumination techniques, ambient occlusion is dependent on the other geometry in the scene. Ambient occlusion on its own generates less realistic lighting than “full” global illumination. However, ambient occlusion is much faster and less complex to calculate than other methods which is why it is still popular among game developers and in production animation.

    (Left) Without Ambient Occlusion. (Right) With Ambient Occlusion
    Click for larger image.


    Sony Cuts Price of PS3 Dev Kits

    Tuesday, November 20th, 2007

    According to Information Week:

    In the latest move, Sony Computer Entertainment, the unit responsible for the PlayStation, reduced the price of the SDK, which SCE calls the Reference Tool, to $10,250 in North America, $8,600 in Japan, and $11,250 in Europe. In addition, SCE said it would enhance the development environment by integrating programming tools from SN Systems. SN’s core tool is called ProDG.

    Read the rest of the article here.

    Sculpty Earth

    Wednesday, November 14th, 2007

    If you haven’t seen it yet, stop on by and check out “Sculpty Earth”! It’s a 3D topographic model of the Earth in Second Life that’s big enough to walk around on top of. It also has live cloud tracking. Nifty, eh? Now your friends can stand with you and point at their house even if they live on the other side of the world.

    For all the details, read the write-up at New World Notes.

    Finger Tracking with Wii Remote

    Tuesday, November 13th, 2007

    Johnny Lee shares a simple but clever approach for implementing finger tracking with the Wii remote:

    [youtube: 350 292]

    AC3D Plugin: Pivot Tools

    Monday, November 12th, 2007

    This plug-in collection adds a series of tools to AC3D that allow you to manage object pivots more effectively. With this plug-in set, you can: Set an object pivot to the highlighted vertex, zero the object pivot, rotate around the pivot instead of the centroid (numerically), or manually enter a pivot location. These functions are very helpful for setting up your model for animation or import into games.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above.)

    GDC Already?

    Saturday, November 10th, 2007

    In case you missed it, the annual Game Developer’s Conference is early this year! The conference is usually held in March, but this year it runs from February 18-22 in San Francisco, California. Alumni early-registration deadline is December 5.

    Cats in Zero-G

    Thursday, November 8th, 2007

    An amusing excerpt I ran across from the essay collection A Step Further Out, by Jerry Pournelle:

    And prior to (the) Mercury (program) we hadn’t any real experience at all. We flew transport planes in parabolic courses that might give as much as 30 seconds of almost-zero-g, and that was all we knew. I will not soon forget some of our early low-g experiments. Some genius wanted to know how a cat oriented: visual cues, or a gravity sensor? The obvious way to find out was to take a cat up in an airplane, fly the plane in a parabolic orbit, and observe the cat during the short period of zero-g.

    It made sense. Maybe. It didn’t make enough that anyone would authorize a large airplane for the experiment, so a camera was mounted in a small fighter (perhaps a T-bird; I forget), and the cat was carried along in the pilot’s lap. A movie was made of the whole run.

    The film, I fear, doesn’t tell us how a cat orients. It shows the pilot frantically trying to tear the cat off his arm, and the cat just as violently resisting. Eventually the cat was broken free and let go in mid-air, where it seemed magically (teleportation? or not really zero gravity in the plane? no one knows) to move, rapidly, straight back to the pilot, claws outstretched. This time there was no tearing it loose at all. The only thing I learned from the film is that cats (or this one anyway) don’t like zero gravity, and think human beings are the obvious point of stability to cling to.

    Which leaves me with only one question:

    If you wanted to know if it was visual cues, wouldn’t it have been easier to just blindfold the cat? 😉

    Escaping Through Air Vents, Not Just for Movies

    Wednesday, November 7th, 2007

    I found this great blog by screen writer John August. It’s full of tips and tricks for budding writers, and it’s a fun read. I about fell out of my chair laughing when I read this:

    One day, I’d love to win an Oscar. An Emmy. A Tony Award. But if all I accomplished in my screenwriting life were reducing the number of times characters climbed through air vents, I’d consider my work successful.

    Mr. August contends that “air ducts are for air” and shouldn’t be used as a magical escape mechanism for characters in otherwise hopeless circumstances.

    Now some may argue that people do fit in air vents, but it’s hard to disagree… It’s a silly cliché and it’s used much too often not only in movies but in games, too. I can’t count the number of times I’ve climbed through air vents in games of all kinds. Nonetheless, I don’t like to blindly dismiss concepts either. For example, there are very rare times when even climbing through ducts makes sense: AVP on the Atari Jaguar is a brilliant example. Allowing players as the alien to climb through the ducts added game play that wouldn’t have existed otherwise.

    It intrigues me how many Hollywood clichés have made their way into video games. I can’t help but wonder how long until video game clichés start regularly making their way into movies. I guess we’ll know the first time a movie opens with an ammo crate and a pork chop on the ground.

    Quick, Quick, Rewind!

    Monday, November 5th, 2007

    I admit it. I love cars. I don’t read all the latest car news–I rely on my brother to pass on just the juicy bits–but I can tell you the difference between a turbo charger and a super charger, and I’ve even helped my brother replace an engine or two.

    A couple of weeks ago, Wired posted an article about Alex Roy’s record breaking race across the county. In a car that would make the Batmobile feel under-equipped, Roy and his co-pilot shrieked from New York to Los Angeles determined to beat the real-life “cannonball run” record of 32 hours and 7 minutes. Their final time? 31 hours and 4 minutes coast to coast. Joyously, they video taped the whole thing.

    Yes, I know, illegal street racing is wrong. I don’t disagree, and I tell every kid I know who wants to race about Firebird Raceway’s run what ya’ brung nights in the hopes that it will keep one more kid from getting killed.

    Just the same, I’m still dying to know how these guys did it. On a lark, I popped over today to the 32 hours site to see if the video was out yet. The video is not available yet, but the trailer is.

    I was mindlessly watching the trailer when suddenly I saw a familiar face I wasn’t expecting. Wait… that couldn’t be! Quick, rewind. I looked again. Could that be… Will Wright?

    Another chat about procedural animation in Spore? Surprise! This one’s about fitting larger fuel tanks into a Mazda RX-7.

    Sure enough, it was. I’ve been in the same room as Will Wright before, and that certainly looked like him. Rattling around in the dusty corners of my mind, something about Will Wright and illegal street racing seemed vaguely familiar, so I looked it up. And there it was: Will Wright was the winner of the 1980 “US Express” race, with a cross country time of 33 hours and 39 minutes.

    And here, I thought my post about cross-country illegal street racing was going to be totally off-topic to game development. What a small world it is!

    How to Make a Torus

    Friday, November 2nd, 2007

    This step-by-step guide will show you how to make a torus in AC3D using the Revolve tool.


    NaNoWriMo Starts Today!

    Thursday, November 1st, 2007

    It’s November 1, which makes today the first day of “National Novel Writing Month”! If you haven’t heard of it before, this is the month when the brave, the daring and the possibly insane bust out their word processors and write that novel they’ve been meaning to all their life. It’s open to anyone who feels like doing it. The only requirement is that you must write a fiction story of some sort consisting of at least 50,000 words, all of which must be entirely written during the month of November. Short of that, pretty much anything goes.

    Scary as it seems, 50,000 words isn’t that much when you break it down: It’s about 1500-2000 words per day–two or three long blog posts, to put it in perspective. It’s a tough but achievable goal even for the gainfully employed. The novels aren’t judged in any way except for meeting the minimum word count, so it doesn’t matter how bad your writing is. The point is just to get it done. Surprisingly, though, quite a few of the novels written in past years have gone on to be published, including the New York Times best seller “Water for Elephants”… presumably with some serious editing after the nanowrimo event, of course. 🙂

    I haven’t decided yet if I’m going to participate–yeah, I know, I’d better decide soon, soon being now–but if I do, I know exactly what I’m going to write: a cheesy sci-fi novel. Didn’t see that coming, didja? 🙂

    Content Aware Image Resizing

    Tuesday, October 30th, 2007

    A friend at work just showed me this, and boy is it cool. “Seam Carving” is a new algorithm for image retargeting. Image retargeting is an alternative to scaling and cropping, but it is content-aware. Scaled images suffer from the problem that the re-sized content may be too small to see. Cropped images may eliminate important content. Image retargeting solves both problems by keeping the image elements the same size and simply eliminating the “unimportant” parts of the image.

    Graphic artists occasionally modify images this way by hand when doing page layouts for magazines–think of it like a visual form of copy-fitting–but an automated approach opens a world of possibilities. The number of of potential practical applications are immense, and include everything from dynamic web page re-flowing to widescreen-to-standard aspect texture fitting for games.

    [youtube: 350 292]
    A better version of the video as well as the research paper can be found on Dr. Shamir’s home page. What’s really neat is how straight-forward the method seems to be. The paper is well worth the read if you are interested in graphics algorithms.

    If you’d like to play around with this technique on your own images, someone’s already implemented the algorithm in Flash.

    The Nastiest Parasite Ever

    Saturday, October 27th, 2007

    Sometimes you run across something so disgusting you just have to share. I already traumatized my co-workers with this one, but then I realized I hadn’t shared it with you yet, my fine readers.

    Cymothoa exigua is, simply put, the nastiest parasite ever. I ran into this bugger studying crustaceans for a project at work. Cymothoa exigua is the only known parasite that functionally replaces a complete organ, in this case the tongue. It is born as a nymph and swims in the ocean until it finds a spotted rose snapper. It then enters through the fish’s gill and attaches itself to the base of fish’s tongue. The parasite diverts blood from the tongue to feed itself. As it grows and clamps around the tongue cutting off blood flow, the fish’s tongue eventually withers away and dies.

    Now here’s where it gets weird: Cymothoa becomes a functional replacement for the animal’s missing tongue. Attached to the tongue stub, the fish is able to use Cymothoa as it would it’s own natural tongue, except that Cymothoa shares what the fish eats. As the fish feeds, Cymothoa consumes some of the food right out of the fish’s mouth.

    After reading what the parasite does, I searched for a picture expecting to see a formless mass of flesh much like other parasites. To my shock and horror, I saw THIS:

    EEEEEEEEEEEEEEEEEEEEEEeeeeeeeeeeeeeeeeeeewwwwwwwwwww!! Now that’s an image I won’t be getting out of my mind for a while.

    Export Outlook Task Lists

    Friday, October 26th, 2007

    Outlook 2007 has a very cool feature that lets you embed your current calendar in an e-mail and send it someone else. Wouldn’t it be nice if you could e-mail your To-Do list as well? Now you can! This macro shows you how to generate a formatted e-mail that contains all of your current tasks, as well as a list of any messages that you’ve flagged for follow-up.


    Second Life: Writing Effective Event Announcements

    Monday, October 22nd, 2007

    I subscribe to a lot of groups in Second Life so I can get notification of upcoming events. One thing I’ve noticed is that some people write more effective group announcements than others. Here are some tips for writing your event announcement in a way that will encourage more people to attend.


    Okami on Wii

    Saturday, October 20th, 2007

    Rumors have been brewing for a while, but Capcom has now confirmed that the beautiful Okami will be coming to the Wii. The news was announced in London with an expected release date of early 2008.

    I’m currently playing Okami myself, and it’s one of the more unique titles I’ve played in a long time. While the basic storyline and world design are very Zelda-esque, the Celestial Brush Techniques set Okami apart. By drawing on the screen, you can manipulate the world around you causing trees to bloom, the wind to blow and fire to appear. The graphics are done in an ink-and-wash style, as if the story were told in ancient Japanese scrolls. It’s breathtaking to look at, and a lot of fun to play.

    The brush techniques seem a natural match for the Wii’s motion sensitive controller. I’m eager to see it when it is released.

    Okami Confirmed for Wii

    Code Snippet: Make Outlook Move Deleted IMAP Items to Trash

    Friday, October 19th, 2007

    One of the shortcomings of Outlook 2007 is that it does not allow you to automatically move deleted IMAP items to the Trash folder instead of marking them for deletion. This functionality is available in most other e-mail clients–and it’s even available in Outlook if you use Exchange–but it’s not available in Outlook if you use IMAP.

    This limitation really bothers me, so I wrote this VBA macro to work-around the problem.


    Is ASM Really Dead?

    Thursday, October 18th, 2007

    I hear this question all the time: “I heard asm was dead. Do video games still use assembly code?”

    The answer? No, but yes. Sometimes. Sorta. It depends.


    Free Stand-Alone Rendering Software

    Wednesday, October 17th, 2007

    So you’ve created your 3D model… now what? Many 3D design programs have their own renderer built in, but some don’t. You may need an external program to create images. In other cases, the software may include its own renderer, but it may not have all of the features that a stand-alone renderer provides.

    If you’ve never tried a stand-alone renderer before and want to try one, here is a list of well-known stand-alone 3D rendering programs that are available from their creators free-of-charge:


    Play Halo – Save a Life

    Tuesday, October 16th, 2007

    Can’t convince your significant other you need to be playing more Halo 3? How about a Halo tournament to end breast cancer!

    The Cave Girls are hosting their 2nd Annual “Fight Like a Girl” Halo tournament. Proceeds from the tournament benefit the Susan G. Komen For a Cure breast cancer foundation. Tournament founder Kari Toyama explains how it all started in this interview at United for Pink.

    They asked me, “Kari, would you like to participate in a bake sale?” I said, “Um, no.” So they asked, “Is there anything you are involved in that could potentially raise money?” I thought, “Hey, I love to play ‘Halo.'”

    Get the full tournament details from the Cave Girls. Even if you don’t play, you can still donate!

    What is Source Code?

    Tuesday, October 16th, 2007

    Source code is a computer file that contains a set of instructions that tells the computer what to do.

    Source code is written in one of many “computer languages”. A computer language is an artificial language that allows people to write instructions in a way that they can understand, yet still easily convert the instructions to “machine code” that the computer can understand. A special kind of program that converts source code to machine code is called a “compiler”. Some languages convert source code to an intermediate form and execute it a little bit at a time, instead of converting the entire source code file in advance. A special kind of program that does this instead is called an “interpreter”.


    Which Way is Up?

    Sunday, October 14th, 2007

    New to 3D? Make sure you know which axis is “up” with this primer on 3D coordinate systems. (more…)

    Gallery: Daniel Radcliffe

    Friday, October 12th, 2007

    Click for larger view, or download the high-res image.Did this the other day, just practicing some sketching myself! This image was painted in Corel PhotoPaint with a Wacom tablet. Unlike most of my work, it does not have any 3D elements–I’m trying to improve my skills at drawing people, especially trouble-points like mouths and noses, so this is a purely a 2D work. For some real fun, watch the time-lapse video of the creation of this image. I really love UNDO. 🙂

    Bringing New Meaning to “Next Generation E-mail”

    Thursday, October 11th, 2007

    For longer than I can remember, I have been on a quest for a good e-mail client. I need something fast, reliable and–this is where everything falls apart–able to handle at least 10,000 e-mails in a single folder quickly with complex automatic filtering. Some of my support mailboxes receive many thousands of messages in a single day. Ideally I’d also like an integrated calendar, to-do list and a pretty UI.

    I was beginning to suspect that I had tried every known e-mail client on planet earth, when today I ran across one I hadn’t tried before. Without really reading what it was other than “e-mail client I haven’t tried” I eagerly downloaded it. To my surprise, this is what I saw when I ran it:

    Yes, the readme did say “LCARS interface” before I downloaded it, but somehow I didn’t put two-and-two together.

    Now that wasn’t what I was expecting! Unfortunately, it doesn’t support IMAP. 🙂

    AC3D Plugin: Texture Monitor

    Wednesday, October 10th, 2007

    New for AC3D! This plug-in adds quick reload to the tools menu, allowing you to reload all your textures in just one click. It also includes a tiny disk monitor client that automatically notifies AC3D when your texture maps are saved to disk by your paint program. With this plug-in, you can see your changes made in Photoshop, Corel or your favorite paint program show up in AC3D right away–without any additional clicks.

    * UPDATED 5/14/2008: New version with faster reload! This version tracks textures more intelligently to prevent the same texture from being reloaded more than once per cycle, even if it’s used multiple times.

    * UPDATED 11/27/2008: The texture monitor is now obsolete. As of 6.4, AC3D now includes its own, much better texture monitor.

    Download the plugin. (Requires Windows XP, AC3D 6.2 or above. Disk monitor feature requires TCP\IP loopback support for communicating with AC3D.)

    Want to Be a Great 3D Artist? Pick Up a Pencil.

    Tuesday, October 9th, 2007

    If you want to excel as a 3D artist, one of the best things you can do is to learn how to draw.

    Most experts recommend gesture drawing and life drawing as the most important exercises. I’d agree, and I don’t think you can ever get enough practice at either. Even if you don’t think you are any good at it, you should still do it. Drawing is an important exercise in “visually dissecting” an object. It’s not about what goes on the paper; it is about learning to be observant.


    Lego Turing Machine

    Monday, October 8th, 2007

    I know this link went around a while ago, but in case some of you haven’t seen it yet I thought I’d share. With all this talk of Turing machines here’s one of my absolute favorites: the Lego Turing Machine!

    Your Own Turing Machine: Part II

    Sunday, October 7th, 2007

    Last time we built a Turing machine as a rainy-day project. Today, I’ll show you how to use it to do something useful, like add two numbers together. (more…)

    AC3D Plugin: UV Map to DXF

    Friday, October 5th, 2007

    This AC3D plug-in exports the uv map (texture coordinates) of the currently highlighted faces in DXF format, suitable for import into vector drawing packages such as Corel Draw. Very handy if you like to do your textures as vector art!

    Download the plugin. (Requires Windows\AC3D 6.2 or above)

    So Many (Virtual) Shoes, So Little Time

    Thursday, October 4th, 2007

    Given the ability to fly, move mountains and create literally anything I want, once again I find myself doing the only known thing a woman in my position could do:
    buying shoes! Ooooh, and stripey socks. Yum. I love virtual worlds.

    Ironically, I only own one pair of flats, one pair of heels and one pair of boots in real life–and they are all plain black. Go figure.

    Watch Where You’re Drivin’, Fool

    Wednesday, October 3rd, 2007

    Bored with your GPS? NavTones just released “Celebrity Voice Packs” for the TomTom navigation device, including Mr. T. You heard me: Mr. T can now give you driving directions. What’s not to love about THAT?

    Listen to the voice sample, fool!

    Build a $2 Computer

    Monday, October 1st, 2007

    In 1936, Alan Turing conceived of a machine that helped lay the groundwork for modern computing. These extremely simple machines, dubbed Turing machines, are in theory able to simulate the logic of any known computer that can possibly be constructed. While Turing originally conceived of his machine only as a thought exercise and never constructed it, it is possible to build and program a simple version of Turing’s computer for only a few dollars worth of basic office supplies.

    This is a fun afternoon project for all ages, and a great way to introduce both kids and adults to the fundamentals of computer programming.


    Bolts vs. Screws

    Monday, October 1st, 2007

    This is one of my favorite government publications ever: Distinguishing Bolts from Screws. Sure, for most bolts and screws it’s pretty easy–or is it?–but for all of the specialty fasteners in-between, the difference can get a bit hazy. Why does it matter, you ask? Apparently, they are subject to different import tariffs! Ouch. The poor engineers who have to deal with design changes because of this. And people wonder why it costs so much money to design a car or anything else.

    My second-favorite government publication: Suspicious Activity Report-Casinos and Card Clubs. Casinos can use this Internal Revenue Service form to report customers who they believe might be a terrorist. I understand reporting this to the police or the FBI… but the IRS?

    I guess we all know who wields the real power. 🙂 Yes, yes, in truth I can think of good reasons to do this… if someone ended up extorting money from me, I guess it seems there should be some kind of tax implication. And after all, it was the IRS that did in Al Capone. But still, it wasn’t a form I would have thought of! How on earth do people ever find these things come tax time?

    New Gallery Image: “Pierce”

    Friday, September 28th, 2007

    Click for larger view, or download the high-res image.

    This image is hybrid 2D\3D. The underlying female form is a 3D mesh, but the hair and other details were added later in 2D.

    Sculpted Prims from Existing 3D Models

    Thursday, September 27th, 2007

    The AC3D “sculpted prim” exporter for Second Life has some unique capabilities versus other sculpt map exporters; it is one of the very few that is capable of exporting an arbitrary polygonal model. While not all models are good candidates to become sculpties due to limitations of the sculpted prim format, a surprising number of models can be converted quite well–including many pre-existing models that were never designed for Second Life.

    This tutorial provides a quick walk-through on how to setup a pre-existing model for import into Second Life using AC3D.


    First Post!!!!!

    Wednesday, September 26th, 2007

    Sorry, couldn’t resist. 🙂

    Hi, I’m Lisa and welcome to my blog. I’m an independent software developer, and the owner of a small studio that goes by the name TFPSoft. We make video games and multimedia applications. I’ve been in the games industry for a long time, and I’ve been a computer programmer even longer–in fact, both my parents are programmers. My dad is still in the tech industry and works for a major technology company in San Jose. My mother doesn’t code per se any more, but she knows an awful lot of Visual Basic for someone who “doesn’t program”. My brother also codes and my children seem to be taking an interest in computers, too.

    I also love art, although debatably I’m a better programmer than an artist. Nonetheless, I did spend several years as a graphic artist doing electronic prepress before getting into programming, and I still do a lot of art even now.

    Why start a blog? Well, several reasons…

    The first and most obvious reason is that despite all my years in software, I’ve never really had my own homepage. Silly, isn’t it? I’ve done plenty of web work all the back to before 1993, but never built much of anything for myself. So, I’m finally taking this opportunity to post some fun links, crazy ideas, and half-baked projects all for the joy and bewilderment of total strangers. 🙂

    I’d also like to share my love of both code and art with you–especially if you’re someone who’s just getting started in 3D graphics, because I’m keenly aware of just how much material there is to slog through. I know how much benefit I’ve gotten from other people’s online tutorials, Siggraph papers, research notes and books. I’d really like give back at least a little bit of that knowledge to other people if at all possible.

    I can’t promise that I’ll write very fast, as my schedule is always a bit swamped, but when I do write I promise I’ll do my best to make it as clear, concise and understandable as possible. I resolve to avoid using jargon without explaining the terms first, and I will do my best to explain things in a way that anybody can understand. As I go, if you run into things that are unclear or topics you’d like to see covered, by all means, leave me a comment!

    Since this site is aimed at novices, I may mention high-end tools occasionally but for the most part I’m going to try to keep my discussions limited to tools that cost less than $250. I think it’s amazing the things that are happening with free and inexpensive 3D tools these days. It’s really becoming a medium that anyone can enjoy, and I think that’s wonderful.