3D Canvas Plus/Pro - unwrapping techniques

3D Canvas Plus 5.5c r3 and up
3D Canvas Pro 5.5c r3 and up

 

Overview

From 5.0 to 5.5c r2, the Canvas mapping tools was continuously improved. The result is that with version 5.5c r2 Canvas gets a quite complete set of tools for model mapping. This capability is specially useful for low-poly modeling, where the appearance of a model heavily depends on the quality of the texture, and therefore on the quality of the uv-map behind it.

In this tutorial we're going to see how to use the Canvas unwrap tool to get good uv-maps for low-poly models. Also, for the most demanding users, we'll show how to use Canvas together with an external mapper, so to achieve the best possible results. You can find this tutorial and other interesting game developing resources at www.theothersideworks.com. The site also contains links to very good and free mappers that can be used with Canvas.

I would like to thank Mel Ebbles melebbles@earthlink.net of the Canvas forum, for his many advices about how to use the Canvas uv-tools at their best. I'm not showing his techniques here, since they're no longer needed with the new Canvas uv-tools. But I learned a lot from him. Also, many thanks to Alex Grigny de Castro xelag@3dee.nl (XelaG of the Canvas forum) for his nice Object Cleaner plug-in that I use in this tutorial. Finally, as always, many thanks to Amabilis www.amabilis.com for the valuable information they provided to me to write this tutorial, and for providing the amazing 3D Canvas modeler at a very affordable cost to anyone. This tutorial would not be possible without those contributions.

Finally, this tutorial is quite advanced and it requires that the reader already got the basic concepts behind unwrapping in Canvas. Please see the Oriented Modeling and the Object Unwrapping tutorials if you didn't read them yet. You can find those tutorials both on the Amabilis site and on the Canvas Plus/Pro online help.

You can find in the tutorial folder some files that you can use as reference. They are reported below. All the models and textures included in this tutorial are made by me and they are free to use by anyone. You can always find the most recent release of Valkire (the model I use in this tutorial) on my site.

valkire.x The hierarchy model we start from.
valkire-cmap.x The paint map we use for unwrapping.
valkire-uv.x
valkire-uv.bmp
The model mapped using Canvas and its uv-map.
valkire.3ds
uvmap.tga
The model refined using an external mapper and its uv-map.
valkire.tga An example of painted texture for the refined map.

 

Planning the unwrapping job

The main goals to reach when designing a good map should be the followings:

  1. Low distortion. This allows the artist to have squared enough pixels to paint over. This is important because it allows to paint details having the same resolution in every direction, that is not possible if the pixels are stretched.
  2. High continuity. About continuity it must be said that it is not possible to achieve a total continuous map, because to create a map you have to unwrap a solid on a plane, so you have to cut its surface somewhere, where you cut the surface you create a discontinuity line, or texture seam.

    Nevertheless you should try to cut the surface as less as possible. This allows the artist to have a continuous map to paint over. This is important because this way the artist can paint details without having to break the brush strokes. Where the map has a seam, the artist is forced to break the brush stroke to continue it on another point, in a way that the seam is not visible on the texture. This could be a hard task depending on the complexity of the details that the artist is painting.

    When you have to decide between high continuity and low distortion, it is a good rule to give precedence to high continuity, until distortion gets too much high.
  3. Same scaling factor among the model parts: This allows to have the same pixel size on every part of the model, so the artist can paint on the model having always the same level of detail to work with.

    It must be said that this is not a requirement though. This happens when you have a model that requires a lot of details to be painted in some of its parts, and very few details to be painted on other parts. In this case you could decide to give different mapping scales to the two kind of parts. This way the map will be no longer general purpose though, and if later you decide to paint it in another way you will have to fit the map again.

Now we're going to see how to achieve the three goals above using the Canvas unwrap tool. We'll use as example the model reported in the picture below. It was the only voluntary model that I found, happy to be mapped and painted over and everything, so don't blame its simplicity ^_^.

the model we start from (our voluntary)

The first step that I like to do when planning a mapping job, is to paint the model with different colors, one for each surface that I'll go to unwrap, you can use the paint tool to do this. Since we'll use planar mapping to unwrap the model, each surface is chosen so that it is planar enough. This simple step alone achieves the low distortion goal. You can get the painted model from the valkire-cmap.x file included with the tutorial. Please note that I painted only one leg of the droid. This is because when you have symmetrical parts in a model, you can map only one part, then mirror the mapped part to substitute the symmetrical one, this saves a lot of mapping job and ensures that the map is done the same for each part having the same shape.

painting the model choosing planar enought surfaces

 

Mapping the head

After the painting job is done, we'll begin creating the map for the model. Choose the flat wrap option from the Material Palette, then right click and choose Tile by Unit, 0.25 tiles/unit. This will force the unwrap tool to maintain the aspect and the proportions of each part of the model that we'll go to unwrap. This step alone achieves the "same scaling factor among the model parts" goal.

Please note that the 0.25 scaling factor is global and it's the same for the whole model. You can use any scaling factor you want here, just choose it so that any surface gets enough space to be mapped on the uv-space (the texture area). I would suggest to use 0.25 or below. 0.25 is the scaling factor that I used in this tutorial.

selecting tile by unit to achieve a global scaling factor

Now choose the edit using face coordinates and the highlight selection showing operation direction options on the main tollbar. Then choose the face selection tool and ctrl-alt click on the top of the head, the selection will be highlighted with a checker showing a preview of the unwrapping. As you can see the distortion is limited enought, so this surface is good for planar mapping.

selecting the top of the head

Choose the unwrap tool from the Object Operations panel. On the unwrap window, use the scale down tool to reduce the size of the map, and move the map to the top left corner of the uv-space. In this tutorial I used the scale down tool six times. Please note that the shape of the map is not shrunk to fit the uv-space, it respects the original proportions of the head. This is due to the Tile by Unit option we chose before.

the top of the head and its uv-map

Now select the bottom of the head and choose the unwrap tool again. Scale the map down six times as before, and move the bottom map to lineup with the top map. You can use the zoom (bottom left of the uv-space) and ctrl-move controls to better align the maps. By aligning the maps we close the seams on the texture, that is, we achieve the continuity goal. When the artist will paint the head she/he will be able to paint seamless details between the top and the bottom of the head at least in its back part. Plus she/he will be able to paint the entire top of the head in a seamless way, so the continuity of this map is good enough.

Please note that the two maps have the same scale factor, that is, we scaled down the second map six times as we did with the first map, and we obtained the bottom of the head to perfectly fit the top part. This is always due to the Tile by Unit option.

merging the bottom and the top of the head achieves continuity

 

Mapping the right pod

Go on with the mapping job. Select each surface in the back of the right pod and map it as we did before. Remember to align each new part with the previous one. You can begin with the top part of the pod back, and place it near the top right side of the uv-space, then add the surface below it, and so on until you get to the bottom of the pod. Remember to scale each part down six times. Also, you will have to use the rotate tools to align the pod parts among them, you can use the zoom and ctrl-rotate for fine alignments. Below you can see a picture of what you should get. You can also use the valkire-uv.x and valkire-uv.bmp files as reference.

the right pod and its uv-map

Until now all the parts that we merged together fit perfectly to each other. We only had to position them on the uv-space. When you will get to mapping the front side of the pod, you will find your first not-fitting surface: the right side of the pod doesn't match the left side of the pod.

mapping the front side of the pod, the right side doesn't match the left side

This is a case where you have to choose between low distortion and good continuity. You could simply align the two surfaces, without changing their shape. This way you would get the lowest distortion, but a bad continuity. Since we want to be kind with the poor artist that will have to paint our map, we decide to give up to low distortion and to perfectly merge the two surfaces by moving the bottom right point of the map to fit the rest of the pod. You can move a map point by simply clicking and dragging on it.

adjusting the map to achieve a good continuity - step 1

You will have to do this operation with the bottom left side of the pod as well. Please note that when you have to choose between low distortion and good continuity, you should always check to don't increase the distortion too much. That is, the checker has to remain squared enought. If distortion increases too much, then you shouldn't change the surface shape to merge it, because this way the artist will have too much distorted pixels to deal with.

adjusting the map to achieve a good continuity - step 2

 

Assigning the texture template to the model

What we did with the steps above is to modify the map of the model, that is, the relation between the vertices on the model and the points in the uv-space. We created what is called a custom uv-map for the model. The map is assigned to the model geometry, so when you save the model its new map is saved with it. During the map creation process Canvas also built a texture template, those shown on the right of the unwrap window, this is simply a texture and is not assigned to the model until we instruct Canvas to do so.

Well, the mapping job is done. Now we have the checker all spread around to our braver voluntary model. We can admire for the last time the low distortion, the good continuity and the equal scale factor that we achieved, before assigning the texture template to the model, so that it becomes its texture.

the checker mapped on the model

To assign the texture template to the model use the update material plug-in (menu->tools->use plugin->UpdateMaterial) on each part of the model. This will assign the texture template without changing the custom uv-map that we built for the model. Now the artist will have to paint on the template so to give to the model a cool look. When you get the painted texture you can assign it to the model always using the update material plug-in. Please note that you have to use this plug-in to assign the texture to the model, any other method will overwrite our custom uv-map with the standard maps currently selected in the Material Palette panel, since this is the default Canvas behavior.

using the material update plugin to assign the texture template

 

Welding the map

As a final professional touch to our map, we're going to see how it's possible to automatically weld near uv-points in Canvas. This is only possible in Canvas Pro, since we'll use a script for this and the Plus version doesn't support scripts.

We took a good care in aligning and merging the surfaces on the uv-map, but Canvas doesn't provide a weld tool to make two uv-points being the same, so the points we aligned aren't effectively the same. This produces more vertices than needed on the model, and may cause seams in the texture as well. So how to weld points that are near enough but not the same ?

The solution comes from a very nice script by Alex Grigny de Castro (XelaG of the Canvas forum), the Object Cleaner script. Download this script from the Canvas site and place it in the Canvas Scripts folder.

This script is originally designed to optimize a geometry, that is, it "cleans" the vertices that are exactly the same in the geometry, this is useful when importing/exporting models.

Now select the right pod of the droid and apply the script to it by using the Tools->Run Script->Object Cleaner menu. A message appears reporting the welded points.

the Object Cleaner script by Alex Grigny de Castro (XelaG)

A copy of the original object (before the welding process) is created by the script and positioned away from the object. So the welded object is the one that doesn't move.

the welded object is those in the original position, not the displaced one

To verify that the uv-points in the right pod are effectively welded you can use the UV-Remap tool. In the UV-Remap window you can drag around that point in the right pod that we aligned last to get better continuity. We aligned that point with the left side of the pod. Now the aligned uv-points are exactly the same, and when you move one of them, all the other move with it. If you didn't get it yet, try to make the same without using the Cleaner script, and you will see the difference.

you can verify the welding with the uv-remap tool

 

Final notes

Well, we got the end. The map we achieved with Canvas is very good, it has good continuity, low distortion, equal scaling and even welded points. This actually means that Canvas uv-features are on the professional side. What else anyone could wish ? Well, indeed our nice map has some few limitations and in this last section we'll see how it's possible to use an external mapper as a Canvas helper to improve them.

I will not show how to use any specific mapper though, since this is a Canvas tutorial. I will only show what a mapper could do and how to import in Canvas a refined map. Well, the main limitations with our Canvas map are the following.

  1. We mapped only one pod of the model to save some mapping job. If we mirror the pod geometry to get the other pod then the new pod will have the same custom uv-map. That is, when the artist paints on the texture template she/he paints on both the pods. This may be a desired effect or not, depending on the model design.
  2. Canvas doesn't allow to easily move around a surface once you unwrap it, so you can't change the position of your map parts in a easy way.

For the mapper to be able to be a Canvas helper, you have to check that it provides a move point operator. Plus select, move, rotate and mirror surfaces operators.

Using a helper mapper you can use the mirror tool to build a separate map for the left pod by just mirroring the right pod map. Using the select and rotate tools you can reposition the map parts as many times as you want until you find a disposition you like. Finally, using the move point tool and the checker you can adjust a little bit more those uv-points in the map that we had to move to achieve continuity, so to limit distortion furthermore. The picture below shows the Canvas map refined by an external mapper.

the Canvas map refined by an external mapper

Once you got a nice refined texture, you can export your model in 3ds or X format, and the new texture template in bmp format. As always, the model geometry contains the uv-map, and the texture template is not assigned to the model until we do so in a modeler.

To assign the new texture template to the refined model, import the model in Canvas, then use the update material plugin to assign the texture template to the model. You can find the refined model in the valkire.3ds file and its template in the uvmap.tga file. I also included a texture for the refined model that you can assign always using the update material plugin. You can find it in the valkire.tga file. The picture below shows the refined model with the tga texture applied in Canvas.

You will notice that the model shows transparent in Canvas. I find it useful to show this. This is because my tga texture doesn't include any alpha channel, so Canvas assumes that is it 50% transparent. If you get this problem with any of your tga textures you can fix it by adding a 100% opaque alpha channel to the tga texture using a paint program.

using the material update plugin to assign an external map

 

As always, comments and suggestions are very welcome ! alex@theothersideworks.com