This blog has moved. Visit Groundswell Games for the latest. Remember to update your bookmarks and RSS feeds.
Showing posts with label 3D modeling. Show all posts
Showing posts with label 3D modeling. Show all posts

Wednesday, May 28, 2008

A shortcut for modeling people

As a way to settle on my next project, I decided to do some character prototyping. It's something I haven't done in a while, and it seemed like a good time to try a more in-depth 3D modeling project.

The human form is, as you might imagine, a fairly complex thing to model. It's easier with a solid reference drawing, but I'm not a particularly skilled artist either. So, armed with a basic line drawing enough skills to be dangerous, I set out to figure a way to cut some corners.

After some digging for a free alternative to Poser, I stumbled on a relatively new, open-source product called MakeHuman, a free piece of software designed to help people create 3D models of the human form. Turns out it's not quite complete, but I think it's going to be pretty effective for my purposes.

Upon first opening the program, though, my first thought was, Wow, that's quite an androgynous figure. This might not work at all. The model had kind of a masculine face and a vaguely female body. It turns out, though, that MakeHuman takes an interesting approach to body shape. Rather than selecting "male" or "female" when you start, you get to adjust the values along several continua, including male/female, age, muscle mass, body shape, and weight. The default model happens to lie right in the middle of the male/female spectrum.

After tweaking parameters for an hour or so, I had a character that I thought looked decent, so I exported a model to fine-tune in Cheetah. I've been working the last few days to dress it and simplify the mesh.

The only hitch so far has been that MakeHuman outputs a fairly high-resolution model with about 12,000 polygons. I ultimately want one that has four or five thousand, which should provide plenty of detail. Though Cheetah doesn't have a method for polygon reduction, Blender has a good one, so I used that first to get things down to a reasonable level. Despite the extra step, I'm hoping to end up with a decent model that doesn't require building a human form (particularly the head and face) from scratch.

It remains to be seen whether MakeHuman provides a shortcut that's actually shorter, but so far it looks like it will be a huge help in modeling.

Thursday, May 22, 2008

Blender 2.46 released

This news is a few days old now, but Blender 2.46 was released on Tuesday. This new version adds an impressive list of features, including:
  • Better hair and fur simulation
  • An improved particle system
  • Cloth simulation
  • Render baking for effects like normal maps
  • Ambient occlusion
  • UV texture editing
I haven't used Blender much in my game development process so far, since Cheetah provides most of the features I need in a friendlier package, but this program continues to amaze me. In my opinion, Blender is one of the true success stories of the open-source movement. It is actively developed and delivers a host of professional-quality features in a cross-platform package, for free. To buy a program with the same capabilities would cost thousands of dollars.

And, by the way, it plays nicely with Unity. Blender is definitely my app of choice for advanced 3D modeling and animation effects.

Take a look at the official Blender gallery if you want to be amazed.

Tuesday, October 30, 2007

Modeling a tree (the easy way)

Like so many things in life, I have discovered after days of work that there is an easier way to do something. That's right, my irritatingly complex description of how to model a tree has been rendered obsolete in 48 short hours. Ok, it was obsolete when I started -- I just didn't do my homework before I set to modeling.

What's the easier method, you ask? It's called Arbaro. It's an open source tree generation program based on a paper by Jason Weber and Joseph Penn outlining an algorithm for computer-generated trees. It's platform-independent. It's free.

Here are some images of trees created with the same algorithm.

I downloaded Arbaro and played around with it for about 30 minutes. Parts of it that are less than intuitive, but some helpful diagrams and more-or-less hidden documentation provide a little guidance. Regardless, this is the kind of program that invites exploration, so I don't mind some healthy trial and error.

Besides generating 3D meshes for trees, it also creates automatic UV maps, which are required for texturing. The UV maps aren't perfect, but they're a good starting point.

Lest you think this is turning into a blog solely about trees, I would like to declare an end to this brief series on vegetation. Next up: rocks and stones. Just kidding. Maybe.

Sunday, October 28, 2007

Modeling a tree, and (r)ambling through the woods

After some fairly tedious work on my pine tree, I have something that doesn't look half bad.

Unity's restrictions for in-game trees require that each tree include a single mesh (for my non-gamer readers, a mesh is just a 3D object composed of triangles) using two textures: one for the bark and one for the foliage. Unfortunately, I didn't know how to place two textures on a single mesh in Cheetah (my 3D modeling program). It is possible, and pretty easy to set up, but it took some time to figure it out.

Create the foliage
Armed with the requisite knowledge of Cheetah's features, I set out in earnest to fill in my tree. The process I settled on ended up being fractal-ish in a way, which seems a fitting way to create a tree:

  • First, I created a small group of six polygons that would act as a small branch and a group of pine needles.
  • Then I duplicated this small branch 10 or 12 times along the bottom-most big branch on the tree. I scaled and rotated each copy so the foliage would feel random.
  • Rather than repeat this process for each of the 20 or so branches, I just did it for the first three. This gave me three distinct sets of small branches (anybody confused yet?).
  • Then I used those three branch sets to fill out the rest of the large branches, copying each set several times and moving/scaling it into position.
Remove (some of) the foliage
Another one of Unity's guidelines for trees is to keep each one below 2,000 polygons. Alas, after my foliage frenzy, I was about 1K over the limit. Time to optimize. My first inclination was to remove some of the small branches that didn't add much to the density of the foliage and wouldn't be very visible from a distance. This activity, sad as it was to remove the pretty pine needles, didn't get me far enough. How could I remove more polygons without thinning out my lush tree?

Finally it occurred to me that the branches near the top of my tree would never be seen up close. What's more, the branch sets up there had been shrunk down to the point that the polygons wouldn't be visible even if you were up close.

The solution, while probably obvious to you (if you've made it this far), seems poetic somehow. At the very top of the tree, the sets of branches aren't much bigger than a single branch at the bottom of the tree, so I just removed four of the branch sets at the top and replaced them with single branches. The difference is nearly indistinguishable, and I eliminated several hundred polygons. Final polygon count: 1,970. Yeah, I'm kind of awesome.

Thursday, October 25, 2007

First the trees, then the forest

I started working yesterday on my first serious tree. I've tried modeling trees before and found them to be quite tricky. Something about the thousands of tiny branches makes them a pain.

Nevertheless, nice trees are yet another a requirement for convincing game worlds, and the first area of my game is going to feature several lovely copses. Unity has some nice tools for creating the forest (there's literally a "make forest" button), but before you can have a forest, you need some trees.

After some brief research I went with a pine tree. One of those tall ones shaped like a cone. For one thing, it will fit well with the atmosphere of the game world. For another, it's shaped like a cone. How hard could it be?

The modeling process went something like this:

  • I started with a cone and manipulated it around until it looked like a decent pine tree trunk.
  • Then I created some smaller cones to use as branches and distributed them along the length of the trunk, making them smaller as I got higher on the tree.
  • Then I was ready to texture the trunk and primary branches. I found a nice, free pine bark texture here and loaded it into the GIMP, the open source graphics editing program. One "make seamless" filter, some rubber stamping, and about 20 minutes later, I had a passable, tiling bark texture. Very exciting.
Unfortunately, this is where it got hard. Foliage, it turns out, is even more detailed a thing than branches. Following Unity's advice for creating trees, I tried to create a simple group of polygons that could serve as small branches and needles. The idea is to duplicate these polygons, tilt them, and scale them until they fill out the entire tree.

As you can see from the picture, I barely got started. First I had to find a suitable texture (the one I found could still use work). Then I had to figure out how to work with alpha channels in GIMP and transfer them to Unity, which is a little tricky (I'm still not sure I could do it again).

Despite the complications, I feel that progress is being made. If I'm happy with the result, maybe I'll post a more detailed tutorial about modeling a cone-shaped pine tree.

Thursday, October 4, 2007

The joy of texturing

As I mentioned in my last post, creating art assets is likely to be the most time consuming aspect of this project. Visuals are, however, quite important, as a fellow blogger points out. While I'm just starting the process of modeling objects, I would like to take a moment to discuss texturing. The reason is simple. Yesterday I turned the crate I had so expertly modeled into a living, textured game object, and I am pleased.

This is premature, of course, since we have yet to come up with a texturing method (more on that in a moment) or even a color scheme for the first area of our game world. Nevertheless, in an effort to see what might be involved in creating a vibrant wooden object, I set out to texture my crate.

Now, there are really two main approaches to texturing:

  • Painting -- this is what the real artists do. Start with a base color in your favorite graphics program and gradually paint in details like highlights, shadows, texture (like wood grain or knots). If you're curious, check out this tutorial on painting, yes, a crate. Painting can yield fantastic results because the possibilities for stylized textures are endless. Case in point, World of Warcraft.
  • Photo-based texturing -- It would be unfair to say this method is any less artistic than painting, but the desired effect is different. Photo texturing aims, as you might guess, at realism. Using this method, you would start with a photograph of your desired texture (a piece of wood or, better yet, the side of a crate) and manipulate it until it fits your desired style. My favorite example here is the Myst series.
Which method did I use? Well, neither. My 3D modeling program has a very nice procedural wood shader (which means it creates a texture from a program instead of an image file). So, instead of finding a crate to photograph or trying my off-hand at painting from scratch, I created a flat plane in Cheetah, added a wood shader, customized it by fiddling with some numbers, rendered it, and then used that rendered image as the starting point for my texture.

The result is certainly not going to change the world, but I was amazed how a couple hours of work could turn a drab gray cube into a crate just realistic enough not to be noticed -- and for a crate in a video game, there is no greater accomplishment.

Tuesday, October 2, 2007

The trouble with modeling

Having made faster-than-I-ever-dreamed progress on gameplay programming, the time has come to turn the bulk of my attention to modeling (that's 3D modeling--my career with Calvin Klein never really took off).

For the sake of completeness, here's a quick list of all the basic gameplay that's currently working:

  • Basic movement
  • Camera controls (complete with collision detection!)
  • Battle mechanics (attacking, casting spells, applying status effects)
  • Character, enemy, and weapon stats (attacks actually cause damage)
  • Enemy death
  • Basic enemy movement and AI (lots more work to be done here)
My brother, who has more experience with 3D modeling than me, will be handling the bulk of the character modeling and animation, while I will probably focus on inanimate objects (for example, this crate I modeled yesterday). The reason for this switch is simple: while there is plenty more programming to do, a story-based RPG like ours isn't worth much without a world in which the story can take place. It will also help me hold your interest, dear reader, if I can balance my dry ramblings with a few pretty pictures.

Speaking of dry ramblings, I feel compelled to point out that the creation of art assets will likely prove to be the hardest part of this project. Not only must every object in the world be designed and modeled, it must be textured, animated (if necessary), and placed. We're going to attempt a master spreadsheet containing the status of every object in our little world, and I'm genuinely frightened to see how big it will get.

This is the part of game development that separates the big studios from the little guys. Success in modeling depends as much on the number of people as the depth of talent. Our approach will be to take it one building, rock, or tree at a time until we have a world for you to play in.

Two unrelated notes
  • My favorite band has cast a surprise announcement on the recording industry: they are selling their latest album on their own web site, with no record deal, and, this is big, for as much as or as little you care to pay. Seriously.
  • Secondly, I have one song left to clear on hard in Guitar Hero II--yes, Free Bird. I must beat it before GHIII comes out. I have no choice.

Monday, September 17, 2007

Man on fire

My brother has been working for a while on a better model for us to use while testing animations. Upon importing this model into Unity, my brother insisted that I make it catch fire. Five minutes later, this is what we had. Any demonic overtones are purely coincidental.

<div align="left" style="width:400px;padding:5px;border:2px solid #808080; font-family: Verdana, Arial, Helvetica;">The browser does not have Unity Web Player installed.<a href="http://otee.dk/getunityplayer.html">Get Unity Web Player</a></div>

Sunday, September 16, 2007

Building a world

I've given plenty of props to Unity so far, but even a great engine is only as good as the content you feed it. To create content for a game, you obviously need tools for 3D modeling, animation, texturing, and music/sound editing. Thankfully, there are quite a few options out there even for people operating with a limited budget.

For 3D, I had been leaning toward Blender, since it's free and includes an impressive list of features. It also has a big time learning curve and an unconventional interface.

I recently picked up a copy of Cheetah3D, however, which is very reasonably priced and offers nearly every feature I need: first-class modeling tools, skeletal animation, UV mapping, 3D texture painting, and, in the most recent beta, light mapping. The user interface is a snap to learn as well, and objects created in Cheetah can be imported seamlessly into Unity.

I'm getting to the point now where I will need to begin churning out content and building the game world. Efficiency is paramount for a small shop, so tools like Unity and Cheetah can make a daunting task much more manageable.

My next post will talk about some design decisions required to set up a real-time battle system.