I decided to learn a bit more about modelling and texture mapping low poly 3D objects for games. My object of choice was a space ship and there are many skilled people out there who can do this ten times better than me, but at the same time I wanted to share my experience because you never know, someone might find it helpful =)

[caption id="attachment_313" align="alignright" width="620" caption="Figure 1: Render of final space ship"]Render of final space ship[/caption]

The space ship pictured above (Figure 1) is a render of my final object. It consists of 252 faces (polygons) and 249 vertices (intersecting points.) Additional detail is added by also creating a slightly higher detailed version (1900 faces and 2125 vertices) used to render a "normal map" which is effectively a bump map adding extra detail to the low polygon version. I'll explain how I did that as well.

Before getting started I'd also like to point out that this is not a full detailed click-by-click tutorial - it's rather a summary of how I went about modeling and texture mapping the object. It wasn't my intention to create a tutorial, it's just something I decided to do afterwards to document the major steps.

Starting with a box and using symmetry

I started by creating  a standard primitive Box object which I then converted to an Editable Poly. You can do this by right clicking on the box then selecting Convert To | Convert To Editable Poly.

To model the basic shape I changed selection method to "Polygon" so I could select the faces of the Editable Poly and then extrude and bevel them roughly shaping one side of a space ship. After some trial and error by repeatedly extruding faces and moving vertices I ended up with the basic shape of a space ship (Figure 2.)

[caption id="attachment_315" align="alignright" width="620" caption="Figure 2: Left side modeled by extruding faces / polygons of a primitive box"][/caption]

I realize that Figure 2 shows the result of many iterations of extruding and modifying the object but I don't have saved file from any previous version so I can't show the progress up until this point. If you are interested in a detailed tutorial - please leave a comment to this post and I'll make a detailed tutorial if there are enough requests =)

It's difficult to see what the shape will be by just looking at half a ship so I added the "Symmetry" modifier to mirror the X-axis of my ship. When you add the modifier you can move the gizmo to say where the mirror center should be and I modeled my ship so that the center of the ship is at the X-coordinate 0. Since the very center of my ship is at x = 0, I moved the symmetry gizmo to x = 0 which then displays the ship nicely (Figure 3) with both sides yet allowing you to work only on one side.

[caption id="attachment_318" align="alignright" width="620" caption="Figure 3: Symmetry modifier added to mirror X axis"][/caption]

[caption id="attachment_324" align="alignright" width="183" caption="Figure 4: Show End Result"][/caption]

When using the symmetry modifier it is important that you click "Show end result on/off toggle" (see Figure 4) on the Editable Poly to make sure the mirrored version of the ship is visible while modifying the Editable Poly. This is necessary since the symmetry modifier is above the Editable Poly in the modifier stack.

After some additional modeling, still only using extrude and bevel on faces, I ended up with a space ship shape that I was happy with (see Figure 5 below.)

[caption id="attachment_325" align="aligncenter" width="620" caption="Figure 5: Final Low Poly model"][/caption]

UVW Unwrapping and Texture Mapping

It's now time to paint the surfaces of the space ship (i.e. texture mapping) and that is done by first "unwrapping" the texture coordinates for the object. This is necessary so various surfaces of the space ship is represented by chunks of faces on a template image which can then be used as a reference to paint surfaces for the space ship, e.g. metal plates, dirt, stickers, and so forth.

The first thing I did was apply the "Unwrap UVW" modifier to my Editable Poly. Open the UV Editor by clicking the button "Open UV Editor...". The editor won't show anything useful to begin with, but click on the "Polygon" selector (see 1. in Figure 6) and then press Control + A to select all polygons.

[caption id="attachment_327" align="aligncenter" width="620" caption="Figure 6 - Unwrap UVW Editor"][/caption]

[caption id="attachment_328" align="alignright" width="300" caption="Figure 7: Flatten Mapping"][/caption]

When you have all the polygon selected (so they are highlighted in red) - go to Mapping | Flatten Mapping and set Face Angle Threshold to 60 and click OK. (Values between 45 and 60 degrees usually work where 45 will create more separate surfaces and and 60 will create fewer sets with larger chunks of polygons.)

This splits up all the faces into chunks (Figure 7) which are then distributed within a texture map square. Even though 3DS Max did a fairly good job at this we can't start painting on these just yet because there are some overlapping faces and they are not quite grouped the way we want them. We'll get back to that in a minute.

Checker Material

[caption id="attachment_331" align="alignright" width="290" caption="Figure 8: Checker Material"][/caption]

To make it easier to see what's going on I created a checker material in the 3DS Max material editor. In short, I did this by changing the Diffuse map of a material to "Checker" and setting the tiling values for U and V to 25 (see 1. in Figure 8) originally the value is 1 which would only create 4 squares in the checker material.)

Also click to "Show Shaded Material in Viewport" (see 2. in Figure 8.) This enables you to see how the texture map is applied to the object in the viewport rather than having to render the scene every time.

Finally, don't forget to assign the material to your Editable Poly (see 3. in Figure 8.) Once I applied the checker material onto my space ship it looked like as seen in Figure 9.

[caption id="attachment_332" align="aligncenter" width="620" caption="Figure 9: Checker Material on Space Ship"][/caption]

The great thing about the checker material is that you'll be able to see where texture will be stretched or compressed too much. You can see that the squares on the front of the wing are larger than on other parts of the space ship so this is something I had to address. Just by doing the Flatten Mapping 3DS Max has already performed a great job to split up the surfaces and as you can see the checker pattern flows quite nicely around the entire spaceship.

Break and Stitch the UV Map

When painting texture maps it is much simpler to have certain faces grouped together. A good example of this is the air intake of the engine (why a space ship have air intakes I don't know - but mine does anyway =). As you can see in Figure 10 I selected the polygons that form the inside of the air intake. I made the selection on the actual 3D object while having the UV Editor open because most of the time you won't be able to identify which polygons it is in the UV Editor. This is also why this needs to be performed - how would you know where to paint certain things if you don't know what part of the ship it is?

As I selected the polygons I then clicked Break (see 2. in Figure 10.) In this particular case it isn't actually necessary because all the polygons are already detached but often you'll find that the polygons you want are attached to other parts of the object. Make a habit of breaking the polygons before you stitch them together.

[caption id="attachment_335" align="aligncenter" width="620" caption="Figure 10: Break Polygons"][/caption]

Once detached, I moved one of the polygons to the side. Change the selection to Edge (see 1. in Figure 11) and select one of the edges of the polygon. When you select the edge, look among the other polygons and see if there is a blue edge on another polygon that you previously detached. If yes (as seen in figure 11 showing the blue edge on a polygon in the top right corner) these need to be stitched together by clicking on the blue stitch button (see 3. in Figure 11)

[caption id="attachment_336" align="aligncenter" width="620" caption="Figure 11: Stitch UV"][/caption]

Repeat the stitching process until you've stitched all the faces (in my case I stiched all the faces in the air intake. It was easy for me to figure out when I had stitched all the polygons together as you can see when I selected the bottom edge (see 1. in Figure 12) the top edge (see 2. in Figure 12) turned blue.

[caption id="attachment_337" align="aligncenter" width="620" caption="Figure 12: Stitch Complete"][/caption]

This is a slow and painful process and I performed it on both air intakes, the insides of the jet exhausts, the fins, the wings, and the cockpit.

When I was finally done, I rearranged all the polygons into the allocated square space representing the texture map. It's important to minimize the amount of unused space as you want to make sure the highest possible resolution is used for each part of the texture. There are 3rd Party helping tools, such as "Unfold 3D" and "UV Packer", that will simplify the packing process.

[caption id="attachment_339" align="alignright" width="300" caption="Figure 13: UVW Template"][/caption]

You should also go to the Display menu in the UV Editor and enable "Show Edge Distortion" every now and then. If you see any red or yellow lines it means that the edge is much shorter in the UV coordinates compared to the actual edge on your 3D object. Eliminate these red and yellow lines by moving the vertices until the lines turn green. If you don't do this, you may end up having distorted textures.

When done click the Tools menu in the UV Editor and select "Render UVW Template...".  I ended up with a template as seen in Figure 13.

At this point I knew what each group of polygons were located on the space ship.

Adding details to the low poly object using a normal map

There is a trick to make a low polygon object look like it's made out of many more polygons than it actually is. This is done by making a high detailed version of the object and then rendering it to a "normal" texture map which is then applied as a bump map to the low poly object.

To do this, I duplicated my space ship into a new object that I named "HighPoly". I hid my low poly space ship not to get confused as they still occupied the same space. I then continued the process of extruding, beveling, and chamfering parts of the ship to add details. Figure 13 shows what I ended up with.

[caption id="attachment_340" align="aligncenter" width="620" caption="Figure 14: High Poly Space Ship"][/caption]

Note: My "High Poly" space ship is still only 1900 polygons (compared to 252 polygons on my low poly version.) You can go absolutely crazy here with tens or hundreds of thousands of polygons - it won't affect the performance in the game and you can add a lot of details this way.

Once I was happy with my detailed version of the ship it was time to "Render To Texture" to create the normal map. I found a good YouTube tutorial for this so check it out and follow the steps to render your high poly version into a normal bump map:

[caption id="attachment_343" align="alignright" width="300" caption="Figure 15: Normal Map"][/caption]

The Normal Map I ended up with can be seen in Figure 15. I use a texture size of 1024x1024 pixels for all my texture maps. We'll apply this normal map to the low poly object in a minute.

Painting Diffuse and Specular Texture Maps

[caption id="attachment_345" align="alignright" width="300" caption="Figure 16: Diffuse Map"][/caption]

In Photoshop I loaded the UVW Template previously created (See Figure 13 earlier in this post.) I found some free textures (on CGTextures and Deviantart) that I used as a base for the Diffuse map (the actual texture of the space ship) and Specular map (shininess of the surfaces on the space ship.)

On the diffuse map (see Figure 16) I used grey metal textures as a base and I then added some shading, dirt, scratches, rivets, armor plate edges, text, and paint a simple paint job. The diffuse map is where you generally paint everything that you want to appear on your object.

[caption id="attachment_347" align="alignright" width="300" caption="Figure 17: Specular Map"][/caption]

I then also created a specular map (see Figure 17.) The purpose of the specular map is to describe how shiny certain areas of the space ship should be. Black is no shininess at all and white is as shiny as it can be. You can of course have shades of grey in between.

I used scratched metal surfaces covering most parts of the ship. The engines I made less shiny and also the cockpit as it reflected too much light for my liking (making it pure white with its flat surfaces.) I also made the rivets more shiny to make them standout somewhat.

[caption id="attachment_348" align="alignright" width="323" caption="Figure 18: Material"][/caption]

Creating the material

Now we have the diffuse map (Figure 16), the specular map (Figure 17), and the normal map (Figure 15.) Time to create the material. In the Material Editor I simply loaded the three images into the diffuse color, specular level, and bump slots as seen in Figure 18. I raised the Bump value from the original 30 to a value of 100.

Just to clarify - the material is assigned to the Low Poly object. The High Poly object can be hidden or deleted.

Final Render

This is what the final rendering of the object looks like:

Render of final space ship...and the specular shininess can best be previewed in this video clip:

The music in the video is available for licensing on my Imphenzia Soundtrack page. If you are here because you are making a space related game - you may also want to look at my site www.spacebox4096.com for space images with extremely high resolution to use as environment maps.

I hope you find some use out of this post - I'd be very happy if you drop a comment if this helped you out in any way =)

Thanks to the members of Maxforums.org for helping me with some useful tips, feedback, and links to tutorials.