By Deus_ex - Former 3d Graphic Artist for USAF
Texturing, or skinning, models for real-time applications is performed by breaking the model into small parts and applying UV mapping to each part from a separate direction. When you construct a model – think ahead, build it in such a way that it will be easy to disassemble.
There are two methods for skinning: automatic skinning and manual skinning. Automatic skinning is performed by a script or a plugin. A common tool is the freeware script ChilliSkinner. But automatic tools don’t produce good results – they break the model into too many parts, and place them inside the texture in an inefficient manner and make it very hard to paint over the texture later. A tool like this is good mainly if you are going to paint straight over the model using a plugin such as DeepPaint.
More information on ChilliSkinner:
In this tutorial I’ll talk about the manual approach to skinning. There are several methods to do this, but I’m going to use my own method, which AFAIK is Max-specific.
This is the model I’m going to use as an example: a futuristic US space weapons platform.
Breaking the model apart
The model should be broken into separately texturable Objects – that means, breaking a single model into a collection of relatively flat parts. And I mean separate OBJECTS, not elements. Later you will apply a flat UVW modifier to each of these. This method doesn’t work very well on cylinders – I usually break cylindrical objects into 4 quarters.
Detaching to objects is performed by selecting a set of faces in sub object level and then clicking “Detach”, one of the first buttons in the Mesh Edit rollout. Make sure neither of the checkboxes (detach to element and detach as copy) are checked, and click OK. Continue until your model is broken up into a lot of separate objects
Some parts in a model appear more than once – for example,
the 4 engines of a 747. Some parts are symmetrical – they will receive the same
texture but they are a mirror image of each other – like the two sides of a
car. When you prepare a model for texturing, delete all the instances of such
parts but one, and then copy them again, but this time using an instanced copy.
An instanced copy is a linked copy, where every action that is applied to one
instance is transferred to the other instances. Instanced objects do not share
these properties: move, rotate, scale, and material. They do share changes to
the editable mesh, material ID’s and any modifier applied to them.
Here’s my model before texturing:
Here it is after I detached it to objects and deleted every repeating part. Out of three drive units (thing in back of model), only one remained. You can’t see it here but the main gun (the large barrel-like thing in the front) is already composed of 6 instanced segments.
Next, I cloned the drive unit and selected “instance” in the dialog box.
When dealing with parts that are mirror images do the same – mirror them and in the mirror dialog box select “instance”.
Arranging the parts
Game engines that use hardware acceleration require the texture to be in certain sizes: width and length should always be in powers of two – 32, 256, 512 pixels etc. It is also highly recommended that the textures be square. This affects the hardware’s ability to store textures efficiently in memory and affects performance. Sizes of 256x256 and 512x512 are the most common, although newer apps like Microsoft FS2002 use sizes of 1024x1024.
When you create a texture remember that you can always scale it down in a graphic app, so start with a larger texture if you can.
Now that you have all your model parts detached and identical parts instanced, switch to top view, go to the create panel, select the “shapes” tab and near your model draw a spline rectangle that is about the size of your model. Make this rectangle a perfect square by typing the same length and width values in the rectangle’s parameters rollout.
The idea is to arrange all the parts you’ve detached inside the rectangle, to make the template for your texture. However this would later mean going back to the original model, before we moved all the parts, and manually applying UVW coordinates to each part and fitting the part to its place inside the texture. This is a long, annoying task, but luckily there’s a shortcut – using instances again.
So here’s the trick: select all the parts of your model, but only one instance of each set of instanced parts. Now, clone all of them together as instances, by moving them to the side while holding the SHIFT button.
You should now have two broken-up models and one rectangle. Select the original parts of your model (in the image above, the ones on the right) and hide them. Now comes the hard part – you must take all the instanced parts and move, rotate and scale them so they fit inside the square. Rotate them so the side that will receive the UV mapping will be facing up. You can scale the parts as much as you want – it will not affect the original parts – as long as you remember to work at object level and not go into editable mesh.
Parts with more detail will receive more texture space by scaling them up, and vice versa. For example, the head of a character as opposed to the soles of its shoes.
If you have parts that are adjacent in the model try to place them adjacently in the texture so you can draw over them to create a continuous texture.
Use all the texture space, pack the shapes as closely as you can but keep some minimal space between them.
You can always mirror a part to fit it better – just remember it later when you paint the texture.
The resulting arranged texture template.
Applying UVW coordinates
After all the parts are arranged inside the square, select the square. Open the material editor, and create a wire material – check the “wire” checkbox at the top of the material properties. Give it 100% self illumination. Apply it to the rectangle. Now apply a UVWmap modifier.
Notice that by default, 3DS max will give the UVW map a size that is 0.1% larger than the size of the object – go down the stack and compare to the size of the rectangle. If you are a perfectionist like me you’ll correct it back to the exact size of the rectangle.
Select all of the parts inside the square but WITHOUT THE SQUARE ITSELF.
Again, apply a UVWmap modifier.
While all the parts are still selected go to the bottom of the UVW map parameters rollout, and click the “Acquire” button. Now select the square as the acquire target.
All of the parts just received the same UVW coordinates as the square. All of the parts on the original model, which were instanced to the arranges ones, also received these coordinates. You have just skinned your model! Now let’s go to texture creation.
Rendering a texture template
Switch to top view. Select the square. Click the drop-down menu near the render button and select “box selected” (the last one). Press the render button. In the dialog box that appears, type the texture size you want and render.
If you want to see polygon edges on your template, switch to a side or front view, select all the parts, and clone them once more – this time moving them up just a bit. After they are cloned group them and now apply the same wire material you gave the square. When rendering from the top view, you’ll see all the edges now have white lines.
You can now use the resulting bitmap as the diffuse bitmap in a material. It will look the same when you first apply it, but zoom in and you’ll see the edges are painted on. Compare it to the actual edges by pressing F4 while in shaded mode.
Using more than one texture
If your model uses more than one texture you simply draw as many squares as you have textures, and arrange the parts inside them.
Create a Multi/sub-object material. Have as many sub-materials as you have textures.
Such a material requires material ID’s assigned to objects with different sub-materials. So, before applying UVWmap modifiers to each set of objects inside a square, apply a “Material” modifier, and for each set give a different material ID – 1, 2, etc. so the Mat Id numbers fit the number of sub-materials in your Multi/sub-object material.
Unhide all objects. You will now have the arranged parts in the square and beside them your original model with all parts skinned. For the next stage it is best to save as a new file – you may want to go back and fix something later.
Delete the square and the parts inside. Select one object – make sure that it is not one that was mirrored. Collapse it to editable mesh. Click “attach List” in the editable mesh rollout. Select all and click attach. Now, go to the utilities panel, select the Reset X-form utility, and apply. Go back to the modify panel and collapse to editable mesh again. This will remove some scaling data that might mess up the resulting model in some graphic engines (such as Janes’ USAF).
Obviously if you have a model that has moving parts and will be comprised of several objects you will not do this – you’ll attach each set of parts separately.
A note about mirrored objects: when you apply a “reset X-form” to mirrored objects and then collapse, their normals will flip. To fix this apply a “normal” modifier and check the “flip” checkbox, and then collapse again.
Select the single resulting object. Go to vertex level. Select all the vertices. You need to weld them now but before that check that the weld value is not too large. The default value is 0.1. If your model uses meters or feet you’ll want to make this value smaller – around 0.01 or so. Otherwise it will weld more than you intended!
When your model is already collapsed and you found something you want to change, go to face or polygon level in the editable mesh, select the polygons you want to fix, and while still in sub-object level add a “unwrap UVW” modifier. Click “edit” and you’ll see the polygons as they’re arranged in texture space. You can now move them in texture space, and in the program window behind you’ll see them change in model-space.
Painting the texture
This is one aspect of skinning which mostly depends on your talent. Use pictures, drawings, anything you can lay your hand on. Personally, what I do is I draw views of the object I’m going to texture – for example, in an aircraft, I’ll draw the whole aircraft from the top, bottom and side, using renderings of the model as a basis for the drawing and adding basic colors, grit, and details on separate layers in Photoshop. If I find line drawings of the model – there are many websites with drawings of cars, airplanes and ships – I’ll use them too.