3D
Canvas Plus 5.5c r3 and up
3D Canvas Pro 5.5c r3 and up
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. |
The main goals to reach when designing a good map should be the followings:
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
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
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
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
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
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.
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