Friday, February 27, 2009

Intro to 3D Studio Max Class

[This post was written by one of our designers, Mike Nielson. Thanks Mike!]

The teacher for this class was the lovely Shannon Blitz, one of our artists. Basically, NinjaBee decided to do this class, per Shannon’s request, as a response to designers and programmers ALWAYS having to ask artists to make temp art for them when the artists have better things to do. In Shannon’s own words, “laziness” was the motivation for this class.

The class basically covered the basics of how to create simple 3D objects in 3D Studio Max. We started by talking about how to create what are called “standard primitives” – shapes like boxes, cones, cylinders, etc. Next we talked about how to edit said shapes. This included rotating, moving, sizing, distorting, mirroring, etc. We also talked about how to attach simple objects together to make more complex objects.

The next phase of the class was a low-level rundown of how to texture (apply color to) an object. We pulled out the materials editor, unwrapped our UVWs and went to town. It was most informative.

Finally we discussed how to export objects from Max into game projects. She showed us step-by-step how to export objects from max using the NinjaBee exporters. She also walked through how to put .png textures into projects and how to get objects showing up in the game viewer.

It was a pretty awesome class for designers, programmers, and others that have had little exposure to the labyrinthine miasma that is called 3D Studio Max. The basics were covered nicely and I think that I and my fellow designers/programmers are much closer to creating ugly temp art of our very own to be used in future games.

Wednesday, February 25, 2009

Texture Optimization Class

Last Friday one of our artists, Taylor Eshelman, gave an excellent, in-depth class on texture mapping using 3DS Max and how to optimize it for a production pipeline. For those who are interested, here are the basic speaking points from his class (written by him):

1. Plan Ahead: Without a fairly clear idea of where you're going to want to wind up, you will waste a lot of time, and will probably wind up wasting vertices, pixels or both.

2. Reduce, Reuse, Recycle: We can and should recycle art assets when working in CG, not only because we can, but because it can reduce development time, asset generation and maintenance, and project data footprint. We should use the idea of "object oriented" texturing where possible.

3. Making the Most of Assets: A consistent philosophy of optimization will often mean the difference between high polish and "good enough", especially if you can squeeze in that last cool visual because your optimization strategy made room for it.

4. Vertex Count vs. Pixel Count and Tileability: Making the most out of assets will often mean finding ways to use the model, texture and vertex color (and maybe normals) together to produce effects that might otherwise be done independently, and more expensively. Tiling textures may get a lot more mileage with careful modeling. Every pixel and vertex needs a reason for existing.

5. Waste vs. Warp: Warping things this way can reduce the waste that comes from UV mapping anything more complex than a cube. That said, it's still best to minimize warp by "normalizing" the UV space for polygons, counterwarping the polygons into the UV interstitial spaces.

6. Decal vs. Wallpaper: Some UV layouts present the model as a series of "shells" that each have unique UV space. Contrary to that idea is the wallpaper method, where a texture is designed as a purely tiling bit of art, usable across any of the UV boundaries.

7. Detail vs. Budget: This is especially important if your texture will need to be used by more than one Level of Detail. Low resolution models often have different UV limitations, and the layout will change. Making textures that can be used by varied UV layouts will sacrifice some detail, but will extend usability, lowering processor, footprint and dev budgets.

8. Prerender vs. Pipeline: Even games can benefit from some prerendering, at least when it comes to baking lighting into vertex coloring. Any preprocessing that we can do will aid the game engine.

9. Schedule vs. Polish: Repeatable textures that get used in many different models (with clever cheats to disguise the reuse) means the asset management and art direction are often easier to work with, since things are centralized. (That's the object-oriented model again.)

The Golden Path: There isn't one! The concepts here are just guidelines that will inevitably need adjusting for each project. Even working for a consistent hardware platform doesn't ensure consistency, as the software engine you use may change over time. What I hope to give here is a toolset and principles rather than a blueprint that will inevitably be outmoded.

Tuesday, February 17, 2009

Web Comic Fun

We've seen a few web comics pop up lately that, in some form or another, pay homage to A Kingdom for Keflings. Here's the first:

This may not mean too much to you unless you've seen this video... It's probably not a direct reference. In fact, the people at Sequential Art may not even know what Keflings are, but we found it pretty funny :)

This comic, however, is a direct reference, and we love it! If you get the other reference (Gelflings!), you're even cooler.

Tuesday, February 10, 2009

Do Something (How to get hired by a video game company)


Sometimes I'll be interviewing somebody (let's say, a programmer) who says he wants to make video games more than anything else in his life. So I say "Great! What have you done with that passion? What have you done outside of school, in your spare time? Full game projects? Cool demos? Technology experiments?" And he says "oh, nothing, just my school projects". And I want to CRY!

If you want to be an artist, draw stuff, all the time, starting right now, and work at getting better. Take classes. Go to life-drawing sessions. Learn to draw the human figure. Stop drawing robots and anime characters.

If you want to be a programmer, write code, all the time, starting right now, and work at getting better. Go to school and take game-related classes. Work on some technology experiments and demos. Write a simple game on your own. Get an internship at a game company. Work your way up.

If you want to be a designer, learn to write. Write stuff, all the time, starting right now, and work at getting better. Write designs, write stories, write reviews of other games. Read books about design, and play other games as much as possible, including games that are not normally your cup of tea. Figure out why they're good or bad. Figure out why other people think they're good or bad. Pay attention to popular culture, and figure out what people like.  More than anything else, make some games! (pen and paper table-top game, card game, first-person shooter mod, flash game, anything to show an actual product, not just documentation).

Collect all these things you've created into a portfolio, and when you get a chance to interview at a game company, show it to them and say "This is what I want to do!" If they don't hire you, find out why, and fix it.

And if you really want to do this more than anything else, then be willing to work your way up. Get in the door with a smaller job and start proving yourself. That's how I started, and that's how most of the people here got started.

Do something.


Monday, February 09, 2009

Animation Class

We held the second of our art education classes last Friday. Brent, our art director, taught us the basics of animation and how to use the 3D Studio Max animation software. The class, which was optional and open to anyone, was attended by about half artists/animators, half other people (2 designers, one programmer and me). First Brent gave us an overview of the 12 basic principles of animation. Those principles come from The Illusion of Life, a book written by two of the artists who learned from and worked with Walt Disney. The book was written for hand animation, but the same rules still apply to computer animation. From the point of view of someone who knew nothing about animation, it was interesting to learn about the different animation rules and how much thought actually goes into drawing cartoons and making games.

Brent then opened up 3D Studio Max and gave us a brief overview of how to use the software. He showed us how to create a basic walk cycle, applying the principles he'd just taught to make an animated walk look normal. The video below is a walk cycle he made before the class as an example:

Overall, it was a very interesting and enlightening class. Thanks Brent!

Tuesday, February 03, 2009

Feelin' Lucky?

Well good, because two uber-cool websites are hosting contests giving away NinjaBee stuff right now. The first is hosted by and they're giving away a code for each of our old games--Outpost Kaloki X, Cloning Clyde and Band of Bugs. All you have to do is leave a comment in their forums with your gamertag and the number of Keflings you estimate you've kicked. Get more info on the contest here. The contest ends Feb. 7th at midnight, so enter now!

The second contest is hosted by and they're giving away the above picture, a signed copy of A Kingdom for Keflings concept art. All you have to do to win this is answer the question "If you had a Kingdom, what special laws would you pass?" on their site here. The winner will be picked on Valentine's Day (Feb. 14th) so get your answer in now!

Good luck to all and thanks to our friends at GameStooge and Xbox360Achievements for putting these contests together!

Monday, February 02, 2009

Art Class

In the past, we have held art classes to improve our artists' abilities and let other people in the company learn new skills. We hadn't done any for a while, so last Friday we started it up again with a figure drawing class taught by Jamin, who was our lead artist on A Kingdom for Keflings.

He brought in some materials to serve as a refresher course on the basics of figure drawing. He also showed us how to use a knitting needle to measure proportions.

Here's our lovely model, Shelly....

...and here are some drawings in progress: