UV-Mapping in ZModeler2

Concept.

UV-mapping is the process of applying a texture image onto mesh object. This can be considered as "skining", "stratching texture over the mesh", but the most precise description is "mapping", since underlying process involves mapping of the mesh (or parts of the mesh) onto texture, but not visa versa.

Mapping is how you assigning an image texture to a portion of a mesh. Therefore, when we make a texture we MUST map it to the mesh, and do it correctly, so that it looks good. Most of the time, textures are not just untouched photos of whatever it is that you're modeling. Instead, they are distorted, retouched, airbrushed, groups of pictures in one image. The beauty of mapping is that you can assign different parts of an image to different parts of a mesh. For example, you can have side, front, and back views of a car, all in different sections of the same image, and then you can assign, or map, the various parts of the car onto the corresponding parts of that image. In fact, one of the virtues of a good texture is that it makes the most use of the space on the canvas, and fits as many parts of the car on one image as is possible, all at the highest possible resolution.

Internally, when UV-mapping you assign each 3D vertex to a certain location on texture. This location is it's U,V coordinates and they are stored within the mesh vertices. This pair of U,V is a uv channel and in some cases mesh can use (or have to use) more than one uv channel. But one channel is the most common case.

Since UV's are stored on a vertex-basis in the mesh and don't bind to texture they were mapped, texture replacement is widly used by games and appears as variouse "skins" for the same mesh.

Mapping areas on the mesh.

When mapping certain areas of the mesh onto texture there could (and will) be a case when neighbour ares on the mesh are mapped to completely different locations on texture. For example, the line where hood goes along the wings (left or right). In this case the hood is mapped to one area of texture and wings are mapped to another area. But understanding the internal concept (that uv is assigned to the vertices) you will clearly figure out that mesh splitting is required. Been more precise, you need to slice the areas-boundary edge, so each vertex on the boundary duplicated: one for hood and one for wing. To understand what is acutally happens in this case I recommend to apply detach tool to the hood, move it away, uv-map it, uv-map side wings and then move the hood to it's original position. When this areas-boundary issue will be clear to you, detach tool will still be used, but you will not require to detach mesh into stand-alone object and/or move it away.

What is required.

First of all, the mesh is required. It doesn't matter whether this is a single object or several objects (e.g. car body split to parts: hood, doors, roof, windows etc.) I've made this shape quickly just as an example.

Second, you require a texture you are going map to. As an example, I'll take an incomplete texture from Dodge Viper GTS. As you can see, it is loaded into textures browser which you can find in View/Textures Browser.

Finally, you need a material that uses this texture. There could be several materials with the same texture or several materials with variouse textures for single mesh, it doesn matter. In this tutorial, I've created a material and assigned vipergts.bmp texture to it. The have been done in several steps. First of all, I opened Materials Editor in View\Materials Editor. Then, using New Material button (the leftmost under material-preview sphere) created material. Then I renamed it in the list of the right to body skin material. Then, I expanded Textures rollup and clicked on wide ... button. The textures browser appeared where viper gts was selected by me and Ok button was clicked. As a result I see what is on the image: a textured material with required texture on it.

1. Assigning textured material to an object/polygons.

The first step you need to do before UV-Mapping is assign material to an object. If you use only one material/texture per object, you can make it only once before starting uv-mapping. If you use multiple materials in your mesh, assigning (or at least) verifying which material is already assigned to certain polygons) should be made each time before mapping certain areas of the mesh. I'll show you bothe examples here.

Assign material to the whole object is quite simple. As you have noticed, there is a Assign to Selection button in Materials Editor. By pressing this button in materials editor, you force it to assign currently shown material to the geometry you have currently selected. For example, you can select several objects, open materials editor, pick desired material and press this button. The same can be done if you have object switched to polygons level and have certain polygons selected. Material will be assigned to these polygons only.

I personally (for historycal reasons) use another way of assigning materials :). I assign them in attributes or Properties box. Simply switch to objects level, right-click on the object and pick Properties... in pop-up menu.

A Selection Properties dialog box will appear where you can expand Mesh\Polygons and change material propery to desired material. Also notice that I've expanded Mesh\Vertices\Format branch. Here you should ensure that at least one uv-channel is available in mesh vertices. On the image below it shows 2 available uv-channels. The same way you can select polygons and use Properties in context menu to assign material.

After assignin material in my case the whole car turned green: That's because there is no mapping assigned and all vertices uses upper-left texture pixel as a mapping. I always paint a small square (8x8 pixels) in upper-left corner of texture to any bright color, so I can see non-mapped areas of the mesh. The same I recommend to you. Also, if your texture has an alpha channel for transparency, the underlying alpha color should be white in this square, or you will get invisible (fully transparent) mesh after assigning textured material.

2. The first assignment.

I'll show you the basic mapping assignment here. We will uv-map the whole car using single "assignemnt" of mapping. By the world "assignment" I mean that UV-mapping will be generated for the whole car and these generated mapping will be edited as a single area of mapping. I'll map the whole car to car's top texture (which occupies upper area of texture).

Since mapping is vertex-based, I switch object to vertices level and select all vertices with Select\All tool (I used Shft-A hotkey for it). mesh got a dark red tint in the views. To force ZModeler work with selected vertices, SELECTED MODE have to be switched. Press according button in status bar so it turnes red. at the same moment vertices normals will appear on the mesh. Now you we are ready to the main UV-assignment step.

2. The Surface\Mapping\Edit UV tool.

This tool can be applied to selected vertices and allows to generate, restore or remove UV-mapping for vertices. Generate means that it creates new mapping and allows editing of it. Restore means that it uses current mapping and allows editing of it. Remove measn what is supposed to mean: it removices mapping by resetting all UV to 0,0 (initial state).

You can either pick this tool in commands bar, or use it from context menu. I will use it from context menu by right-clicking in Top view. An options box will appear for Edit UV tool. Here it is: All default options fit our needs in this case, but to make things more clear I'll explaing which options here your should pay attention to. They are:

  • Create/Edit UV means that you are generating/editing UV
  • New mapping creation mode: From Viewport XY means that mesh layout in current viewport will be used to generate mapping. I've clicked in top view when applying the tool and expect mapping to be generated the way the mesh lays in the top view.
  • Already mapped vertices behaviour: Keep Old Mapping means that vertices that were previously mapped will keep their mapping and new mapping will not be generated for them. I rarely use this option, and prefer Generate New instead of this one, but in our case (the first mapping of the mesh) it doesn't matter.

    You can click OK button to see a noticeable changes in 3D view. Deselect all vertices (Shift-D hotkey), switch to objects level and switch selected mode OFF by pushing the button. Of cause this generated mapping is not what we need and it requires editing. Edit UV has done it's job already and the next step is to open UVMapper.

    3. The UVMapper view.

    The UVMapper is a specific kind of view where you can edit UVMapping for the mesh. This viewport works with the mesh which was generated by Edit UV tool. This mesh is a Mapping-object and it is bind to original mesh mapping. When you edit this mapping object, an UV-mapping on original object changes.

    Change any viewport (right for example) to UVMapper (by clicking on a viewport label and selecting desired viewport in context menu):

    Guess what? There is nothing in UVMapper viewport. This is quite normal and you have to choose what you are going to modify in this viewport before anything will appear. First of all you need to select which material/texture mapping you are about to modify. Click on a Material button and select desired material in a pop-up list:

    From this moment texture should appear in UVMapper. In most of cases the mesh will appear too, but if it doesn't, click on an Objects button and place a checkmark near desired object(s). Then press Esc to hide the list:

    On the image below two viewports are shown: UVMapper and a Top view. Notice that mesh in UVMapper looks the same way it looks in Top view (where I've applied the Edit UV tool). You can pick a Modify\Move tool and move the mesh in UVMapper. At the same time you can look into 3D view to see what's changes when you move mapping-object. Don't be afraid to scale/rotate this mesh - it will no way distort your original mesh, only uv-mapping is affected.

    To achieve what's on the image above I've rotated the mesh, scaled it , then switched it to vertices level, selected half of vertices and mirrored them. Finally, I adjusted certain vertices positions, using Modify\Move tool in Selected mode and moving groups of vertices that I selected with Quadr tool. Using hotkeys for these tools will improve your mapping performace.

    You can change UVMapper back to original view when you've done mapping. Note that when you hide/close the last UVMapper viewport, a mapping-object is removed. If you wish to return to UVMapping again, you can use Edit UV tool to Restore mapping.

    "Split and uv-map" aproach. "Area" mapping.

    As it was stated before, you will need to map car parts to certain ares on texture. In my case I'll show how to map front of the car to front texture. First of all, you should remember the vertex-mapping concept: some vertices (those that near the hood and some other) are already mapped and this mapping should not be distorted, but other vertices in front part need new mapping to be generated.

    Switch to polygons level and select the polygons you want to map. I selected those that will be mapped to a front-view texture. I temporary switched texture off, to show which polygons are in a question:

    You need to separate these polygons from the rest of the mesh, so they use their own vertices and don't share these vertices (and their mapping). This can be done with a single apply of Modify\Submesh\Detach tool. Locate it in commands bar and expand it's options box: Set the options like one the image. They are:

  • To New Object: OFF. We don't need to detach to a new object.
  • Keep Original: OFF. This will not leave original polygons. Otherwise, you'll get a duplicate polygons.
  • Enable Drag: OFF. We don't need to drag/move detached polygons, they need to stay where they are.

    Make sure SELECTED MODE is ON and click once in the view. Nothing (visually) will happen, but these polygons are now separated from the rest of the body. Keep selected mode ON and switch from polygons to vertices level (by pressing '1' hotkey). You should see vertices selected and these vertices shows that the area you've detached is now separate from the result of object: Once vertices are separated, you can apply Edit UV tool in Front view to selected vertices, but make sure to select Generate New option in Edit UV options box:

    Then, exactly like you did with the whole body, the front area is mapped:

    Conclusion.

    As a conclusion, I'll quote here some mapping tips from Ryan's Ravisol tutorial.

    To a point, the mechanics of mapping a mesh can be taught. However, the art of clever, precise mapping is something that comes with time. Some practices can help you speed this learning process up.

  • Base to Pivot Using pivot helper, dragging it here and there and using it as a point of Scale\Rotate will allows you to scale any group of verts down to a specific area of the texture. So, you start by lining up the texture around the area you want to map it to, then you find a good reference point to scale it to, like one corner of the area, or perhaps the center, if you can find that. Then, using Scale, you can scale the object down into the area.
  • Map at High Zoom Another good technique to use is to zoom way in when mapping. This allows you to control down to the pixel where your verts are mapped. You must use high zoom in mapping to ensure accuracy. If you don't, you may wind up with little lines around the edges of your mapped areas where they overlap to the next area.
  • Understand Stretching/Compressing A big part of mapping is actually stretching or compressing the texture into the mesh. Because you probably distorted the shading contours of the texture when you made it, you need to counteract that effect in order to get good shading on the car. Basically put, when a small area of texture is mapped to a large area of the mesh, it's stretched, and when a large area of texture is mapped to a small area of mesh, it's compressed. Common sense tells us that compression looks better than stretching, and this is true. Stretched textures tend to look pixelated, and should be avoided. However, a combination of both techniques is essential. I think that one misconception that a lot of modelers have is that your mapping object has to look exactly like the actual object. This is not true, because changes made to the mapping object do not affect the shape of the real object. So, if you have to disproportionately scale your mapping object to fit your texture, don't be afraid to do so.
  • Tile Textures When working with track textures, tiling should be your friend. Instead of using 2048x2048 textures to represent grass in a track or scene, you can use one 256x256 texture and tile it. If a texture can be repeated as a pattern with little or no obvious lines or repetition, then it can be tiled. Tiling is easy in Z-Modeler. You just have to scale it larger and larger until you have tiled it as much as you like it. However, a word of caution. This only works when the texture is the only one in the image! You cannot use this technique with an image that contains more than one texture.
  • Mirror/Rotate You can use the Mirror and Rotate commands in Z-Modeler's mapping window to move the verts as well, so make good use of them. If you see that some text is mirrored, don't flip the texture, mirror the mapping object. However, a word of caution, make sure you line it back up well, and mind the modification axes you have active when you mirror. You don't want it to end up upside down as well. Rotation is another good way to move verts around. Often the orientation of the texture is different from the mesh. Therefore you have to rotate it to make it fit.
  • Avoid Messy Mapping Finally, avoid messy mapping. Try and keep the mapping objects lined up with each other whenever they are adjacent. Try to also avoid mapping a whole mass of polys to a certain area with no regard for their shape, because this can cause shading difficulties. It will also make it easier when you go to tweak the mapping later.