3D Modeling

Walk Cycle

Another piece from my iAnimate class. This is a basic walk cycle with Skyscraper. Isn't he dreamy! http://vimeo.com/27457091

We spent three weeks working on these cycles. I could have spent 3 months. This was the first time I'd worked with a full, human style character rig. There are easily 200 different controls. Getting them all to work together is quite an experience. It's so complicated!

Because there were so many controls to worry about, and because I had 3 weeks to work, I took a slightly different tact with this project. I would start with a clean slate, work out the basic block-in in about an hour, spend another hour or two trying to smooth things out: add details, fix hiccups, etc; then I would stop and walk away. Then the next day I'd look at what I had made, and start again on a blank slate. That way I could come at it each time with fresh eyes, and spend my time making the right choices the first time around rather than spending hours trying to iron mistakes out of a mess of keyframes. This walk, the one I turned in, was number 12.

Looking at it now there are a couple of things that make me cringe, but I'm pretty happy with the results.

Alas, poor Yorick

They say that when a great sculptor begins her work, she first communes with her medium. She caresses it; she bonds with it; they have sad, quiet little tea parties together, and finally they come to an understanding. The artist sees the beautiful sculpture that was hiding within the lump of clay or block of marble. All that's left to do is free it, the sculpture makes itself. Zbrush is my medium as of late, but things haven't been so rosy.


Zbrush speaks its own inscrutable language of clicks and duck calls. Zbrush does not like to be touched. Zbrush has a stainless, self-cleaning coating that prevents bonding. Zbrush does not like tea.

Thankfully my years of both artistic and computer training have prepared me for such an eventuality. Sometimes the best approach to connecting is less about mutual understanding and respect, and more akin to, well,  Stockholm Syndrome. Don't let them leave until you're friends for life.

Here's the latest, and I'm quite proud of it:

The skull is loosely based on this series of video tutorials I found on youtube. The big message I took away from them is that, despite all of Zbrush's claims to the contrary, having a good topology for your sculpture is super important. The tutorial author goes through a few techniques to deal with this from quick and dirty uniform re-meshing to constructing a Maya/Max style base mesh over your sketch sculpt right in Zbrush. Rather than go into the gory details I'll let you watch the videos.

If only more of life's little problems could be solved with hostages.

Cast Sculpting

This is a little practice sculpt I did in Z-brush of a plaster cast replica of the eye on Michelangelo's famous statue of David. I've been trying to get my head around Z-brush for almost a year now and I think I'm slowly starting to make progress but there are still a lot of simple things that I haven't found solutions to yet. One is making sharp details.

Incidentally, I chose this cast after reading an interesting post by James Gurney over on his blog about the tradition of drawing and painting plaster casts of famous, usually classical, statues. It turns out that this was a very common practice in any art school worth its salt. Unfortunately most of the schools destroyed their casts and stop the practice in the middle of last century as modern art theory began to pervade the schools and the faculty decided they didn't need to teach things like observational drawing and painting anymore. How sad.

I took a lot of art classes in college but we never did this sort of thing. I wish we had. Especially after I found out that The University of Kansas has one of the largest collections of classical plaster casts in the area.  They're on display during the school year at the Wilcox Classical Museum at Lippincott Hall. The museum isn't open during the summerbut as soon as they start up again this fall I think I'll have to make a field trip.

Slug Model in 3D

This week, 2 different approaches to building a 3D model. I'm still trying to find a comfortable way to approach the modeling process and build something up quickly. For a subject I went back to my slug friend from a few weeks ago. At work we use 3DS Max for all of our modeling activities, so I've been making an effort to get used to the program. Both 3DS Max and Maya (and Blender for that matter) are general modeling programs and have basically the same kind of interface. Modeling is basically done by manipulating vertices, edges, and faces. It's a very "engineering" like approach, and although there are some tools to help you build things up quickly --- mirroring, soft selections, and stock primitives to work from --- in the end it comes down to moving points around little by little.

Here's my rough model of the slug in Max:

Another approach to modeling are 3D sculpture programs like Mudbox and ZBrush. In these programs you use 3d tools to sculpt and mold a model like clay. This has several advantages: you can sculpt something quickly, you can generate a lot of detail, and it feels much more "artistic". However the final models are much more complex (they have many more faces, which means longer render times), and you don't have as much control over the structure which can make the final model difficult to animate later on.

Here is the same character modeled in ZBrush:

It feels much easier to add the little details that give something character in ZBrush, but the resulting models are kind of messy. In practice I think often pros would make a basic rough model in Maya or 3DS Max and then import that into ZBrush or Mudbox for details.

Robo Ada

So good news and good news and bad news. Which do you want first?

Good News: Ada is really coming along. See for yourself:

Check out that steely robot expression. You can really tell that it's all I can do to keep her from producing a race of clones, staging an insurrection, and annexing portions of my neighborhood as territory for her new polygon-based society. *wistful sigh*

But, that brings me to the bad news . . .

Bad News: Ada's charming face, though charming, is built all wrong and has to go.  You see, I've been reading all about these wonderful things called edge loops which are apparently really important for animation.

Take a look at Ada's face. See those edges that wrap across it horizontally? Those are her facial edge loops and ideally rather than cutting her head into adorable cylinders, they should instead follow the creases and muscle groups in a normal human face, something like this. That way when I go to pose her face into different expressions or mouth movements the rest of her face will pull and stretch like a real person's face would. *resigning sigh*

Not to worry however, for there is still some . . .

Good News: When I'm done our new polygon overlords will have trustworthy human-like faces rather than frozen masks of adorable malevolence.

Ada's First Ambient Occlusion Render

It's test render day! *hurray*

I'm nearly finished roughing out all of the details on my half-a-Ada and once they are finished I can sew her up, as it were, and start in on the non-symmetrical stuff that gives her character and style and panache and stick-to-it-ivness and good breath and an interest in puzzles and all that.

This also gave me a chance to play with some of the rendering features of Maya. For those who don't know, rendering is the process of turning the model into a 2D image, sort of like taking it's picture. In the modeling environment the model is very simple so that the computer can work with it quickly, but in a render we turn on all the bells and whistles like textures, materials, smoothing, lighting, shadows, et cetera.

Here's the render, the white side is the model and the green is just a direct mirroring to give you an idea of what things will look like (you can tell the seam needs some tweaking).

We're still not quite ready for all the fancy settings yet, but I turned on a few. First, subdivision surfaces. This algorithm takes the polygons I've defined explicitly and subdivides them, averaging the new in-between faces to make the model look a whole lot smoother with far less work from me. 3D animation uses this technique all the time, and in fact one of it's developers was Edwin Catmull, current president of Pixar and Disney Animation no less. It's not a fun algorithm to program, but luckily I don't have to because Maya has a checkbox ^____^

The second one is called Ambient Occlusion and it's what is giving the surface that posh diffused shadow look. The algorithm for this one is a bit complicated, but the basic result is that areas that are under, crowded, folded, creased or cramped show up dark while large smooth areas are lighter. This approximates the way diffuse light bounces off of non-reflective surfaces.

Hopefully up next, Ada Post-Op.

Ada, Half Off

I've just about roughed out my model, but in the process I had to do some major surgery. This seems to be a theme with these Ada projects . . .

In this case I cut my model in half down the center. Apparenlty this is a pretty common technique when modeling a character in 3D because you focus all your attention on one side and then just mirror it to the other side when you're done. When I started out I thought this sounded foolish and I would have no part of it, but, well, here we are.

Turns out not giving the model a cleave down the middle just makes for headache after headache, and better she have the headache than me (get it, because she cut in half, and her head . . . and it would hurt because . . . ahh, never mind).

Here's a few views of the carnage:

The Basics of UV Mapping in Maya 2011

In the process of learning Maya I've been frantically searching the Internet for some sort of basic tutorial on creating a UV map for a model in Maya, unfortunately with little success. With some help from colleagues I've managed to work out the basics, but I thought it might be nice to record what I've learned. Maybe it will help you. As an example I will be creating a UV map of this rock. Hopefully this is a good exemplar because it's simple, but not so simple that describing the process will be unhelpful. Here's my model:

01-initial model.jpg

The first step is to apply a material to the object. It doesn't matter what, so I'll use a basic Lambert. We (by which I mean me, and you if you're similarly following along) select the model and under the rendering tab, click the lambert icon (the dull sphere).

02-apply material.jpg

Next we'll add a stock texture so we can see the UV mapping as we work. I'll use a checkerboard pattern. To apply the texture, in the Attribute Editor click the small checkerboard icon next to the color property of the Lambert material you just created. In the box that pops up, select the check pattern. To see the applied texture in the editor window, press 6 on the keyboard to show textures.

03-apply texture.jpg

The initial mapping is, well, awful. You can see where the checkerboard is stretched and contorted. Ideally the checkerboard should cover the object evenly. The UV mapping we're creating will correct this. To get started, open the UV texture editor window:

04-uv texture editor menu.jpg

In the window you'll see the default UV mapping. We'll be replacing this with our mapping.

05-default UV's.jpg

We'll be using a number of planner mappings to piece things together. A planner mapping is just what it sounds like, the vertices of the model are flattened against a plane and become the UV's of the map.

06-planer mapping menu.jpg

When you choose the menu item for planner mapping, open the options box so you can adjust some settings. Set "Projection From" to "Camera". This will use whatever angle the camera is looking as the plane that is projected (hence the name ^_^ ). You'll also want to choose "Keep image width/height ratio". If you don't then the UV arrangement will be distorted to fill the UV plane rather than maintain their relative distances.

07-planer mappting settings.jpg

Hit the project button and the result will be something like this:

08-planer mapping result.jpg

Notice how the checkerboard looks all neat and tidy now? That's what we're looking for.

Before we move on, there is a very important setting we need to adjust. This was one of the things that I didn't find in other tutorials. In the Channel Box, find the settings for the planner projection you just made and edit the Projection Width and Height properties to some easy to remember number, it doesn't matter what. I use "100". You'll notice when you do this that the scale of your UV's in the UV editor will change, which is fine.

09-planer mapping size.jpg

We do this because we're going to be making a number of planner projections. When Maya makes a projection it does all it can to maximize it's size within the UV plane. This means that each time the UV's you get are at a different scale. If you then went and tried to texture this object with a repeating pattern then some parts would magnify the pattern and some would shrink it.

If instead we set these values to some common number each time we make a projection then they will all have the same scale.

Now we're going to start dividing things up. For some reason, (and you may have already noticed this) when you don't have any UV's selected Maya likes to show nothing in the UV editor, which can make finding the points to adjust very difficult. You can make this easer by turning on UV shading in the tool palette of the UV Texture Editor.

10-shaded uv's.jpg

This setting will also help you see if you have overlapping areas (which are to be avoided). You might also want to toggle the texture image on or off, or dim it if it's getting in the way. You can do that with the other set of highlighted controls in the same window.

OK, well if you start moving your model around you'll notice that from the projection direction the mapping looks pretty good, but along the edges things get stretched out and distorted. To address this, we're going to make several more planner projections from different angles to get a good mapping all the way around. However, before we do that, we want to keep the mapping we have in the areas where it's working.

To do this, in the modeling view select the faces you were looking at when we did the planner mapping. As you do, you'll see them highlighted in the UV Texture Editor as well. We're going to separate them from the others. When you have them all selected, in the UV Texture Editor click the "Separate Selected UV's" button. You can then move this grouping off to the side somewhere.

11-move uv away.jpg

Time for another projection. Move the model so you can see it from another angle where the mapping is poor, then select the faces you want to remap. Then, just as last time, perform a planner projection. Don't forget to adjust the width and height properties of the projection to whatever number you are using.

12-next angle.jpg

When you do this you'll see another set of UV's show up in your UV Texture Editor. You'll also notice that the corresponding UV's in what's left of that original projection have been removed. That's because you've replaced them. This is a good way to make sure as you progress that you have a mapping for every face on the model.

Move the new projected part off to the side somewhere and continue on making projections until you've got the model covered. For this model I ended up with 4 pieces.

The next thing you'll notices is that where the surface of the model has been cut into different UV pieces the checkerboard pattern is discontinuous. You can think of this mapping process as taking the peal off of a piece of fruit and then pinning it down to a piece of paper. You have to cut the peal so that it can lie flat without overlapping. When you stretch the peal back over the fruit, it leaves seams where it was cut.

For most models it's unavoidable to have some seams like this, so the goal is to place them in places where they will be less obtrusive. Here, because I'm making a rock, I can make my seams fall along the edges of the rock where the surface texture would naturally be discontinuous. You can also work to hide the seams when you create the images that will form your textures. The point is, put some forethought into where your seams should be.

There are also times when it's advantageous to make 2 projections of an area, but then to stitch them back together in the UV Texture Editor to remove a seam. Here for example I have 2 projections that I would like to join together.

13-full mapping.jpg

By highlighting the associated faces on the model I can find the corresponding edges of my projections. Next I'll position them as close to each other as possible, and then move the individual UV's so that they are nearly coincident.

14-align for sewing.jpg

As you move the individual UV's, watch the model. You'll see the texture swim along the surface. As you move them, do your best to maintain a regular pattern.

Once the UV points are nearly on top of each other, select the two UV's and click the sew button in the toolbar to combine them.

15-sew uv's.jpg

You may also find that along some of the faces that were not quite parallel to your projections the texture has been slightly stretched or distorted. You could perform another projection and then try and sew the pieces together, bit sometimes for small areas it's easier to just adjust the UV's by hand.

Here for example the top face looks a but stretched out, so I'll move the corresponding UV point in the UV Texture Editor.

16-problem area.jpg

Much better. Here's my finished mapping:

18-finished mapping.jpg

Next we need to fit these pieces into the upper right quadrant of the UV plane. We want the pieces to be as large as possible so they are easy to paint, so we're going to rearrange them to be in a roughly square area.

If this were a character model or some other complex object with some areas of low detail and others of high detail, we might scale areas like the face or hands to be much larger, and the other areas smaller to make painting in all that detail easier. In this case however we want the projections to keep their relative sizes so that a rocky texture of a single scale can be applied to the whole thing.

You can translate the pieces and spin them all you want, but don't scale them individually or they will get out of proportion.

When you have them arranged, select all of the UV's and shrink them so they fit into the upper right quadrant.

19-scaled map.jpg

Hey guess what. You"re done! At this point you can export your mapping to Photoshop or whatever image editor you prefer and apply whatever colors or images you're object requires.

I hope this has been helpful. I should point out that I just learned how to do this myself, so some of what I've described above my not be the best approach (or even completely wrong). At the very least, it may be much faster to use some of the other projection methods rather than sticking with planner projections. For this object for example, because of it's roughly columnar shape, a cylindrical projection might have been a better starting point. No matter the projection you use, the basic techniques and principles are the same.

Good luck!

Ada in 3D

Progress on my clay maquette of Ada continues, but we creative types need a little variety in our schedules. As I mentioned previously, I am assiduously studying computer modeling in Maya. In my last update I was working on a crab model, as you may remember. I still have that fellow around here somewhere, but he's mostly modeled out and ready for rigging and animation while I still need some more complex modeling practice.

Well Ada to the rescue!

I've just started in on this one, so I don't have much done yet, but it's starting to take shape.

Just like the clay model I started out with a front and side view of Ada to guide my construction. The nice thing about the computer is that I can just stick the pictures on two intersecting planes and then build Ada right over top. That way I know everything lines up and is exactly the right size. Aren't computers grand? (No, I don't think so either, but this bit is nice.)

Here's a few different views of what I've got to this point:

Attacked by Hacker Crustaceans, in 3D!

One of my goals this summer has been to buckle down and finally learn some 3D modeling techniques that don't require include statements and callback functions. I started out working with Blender, an open source 3D modeling package, after seeing a demonstration by Roger Wickes. Blender has some impressive features and an impressive learning curve to match. It's capabilities are impressive. If you haven't seen it check out Big Buck Bunny, an animated 3D short put together by Blender volunteers.

Blender is great, but as my job hunt continues I've found that a number of employers would really like to see some experience with one or more of the popular commercial packages. I've shied away from these in the past because they are all so darned expensive, but it turns out that Autodesk (who for some reason seems to own just about all of them), has a student program in which you can get free licenses for extended periods. Hurray!

I've spent the last few weeks learning Maya, which it turns out is not that hard, at least for basic modeling. I've been through a few tutorials, but I decided a few days ago to try and make something for myself, so I started on a model of the hacker crab I designed for the corporate training materials. Here's what I've got so far:

Here you can see the wireframe of the model. The model itself is in blue. The orange and yellow objects are bones which rig the character like a puppet so that I can articulate his arms and legs for animation.

If I turn the surfaces on you can get a better look at the model. In this form he's a little blocky, but that's ok. Maya uses a system called subdivision surfaces that round over blocky geometry like this to make a smooth model algorithmically. This means that the model itself contains fewer polygons, and so is easier to store and manipulate. Pretty clever huh? You can thank (among others) Edwin Catmull, computer scientist and current head of Disney Animation via Pixar.

Here's what my crab looks like with all the bells and whistles turned on. It's still pretty primitive, but not bad for a first attempt I think. And I didn't even have to write a makefile.