More Job Tips

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

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

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

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

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.