Making Of 'Next Gen Vehicle Creation'
This tutorial is intended to present a method of creating a next gen vehicle asset. Â The difficulty level is medium, so to better understand and use this tutorial, the reader needs to have a basic understanding of the processes involved in modelling and texturing an object in Maya. Â The asset presented here will be a generic vehicle with a low poly count that has diffuse, specular and normal map textures.Â The descriptions will therefore be general, but I will go into detail to explain the particularities of next gen asset creation every time it is needed.
To make the work easier, this tutorial has been split up into five different parts:
- High-Res Modelling
- Low-Res Modelling
- UV Layout
- Texture Baking
- Texture Creation
One important thing I have to mention beforehand is that saving the scene as often as possible is a very good idea, especially when working on a complex asset such as this one. Â Maya's incremental save feature is good, but saving one new scene for each major step of creation will ensure plenty of back-up scenes to go back to in case you need to.
Often, modelling a vehicle is easier when official blueprints are available, but there are situations when these are not available, and so the modelling process has to rely entirely on reference photographs. Â There are also cases when the entire documentation of a vehicle is reduced to a concept sketch. Â This is the case for this tutorial as the only reference I have is this perspective drawing of a concept car I drew. Â To make things easier, I also sketched a simple side view to help me get a better idea of the proportions of the vehicle. Â I will modify some of the shapes of the vehicle as I model it to improve its shape, as it is usually acceptable to do some modifications to the initial concept.
The first step of the process is also the most important, as the high-res model defines the general shape and proportions of the vehicle and will have a major impact on the entire asset creation pipeline. Â Usually, modelling the entire car in high-res is not required, but for this tutorial I will model everything that is visible in the final model.
A good starting point is the wheel placement. The resulting "frame" will give you a good starting point for defining
the car's proportions.
Even though the car has not even been started yet, the wheels will help define the car's front, rear width and wheelbase, as well as wheel dimensions.
I start by placing a single polygon at the right-front corner of the car and matching it to the side drawing. Then I
extrude another polygon from one of its edges. After each extrusion, I check the newly created vertices and move them in both the side and perspective view to make sure they are in the right place. This procedure can be extended to the entire car, but I only use it for the general shape. For the details I usually use polygon primitives as a base. There is another way to build the mesh by using the so called "box-modelling", but my personal experience has taught me that the multiple extrusion method is a bit faster and easier to grasp.
Continuing the side of the car, I add the details by cutting the geometry using the Split Polygon Tool. Â I try to keep the polygons evenly spaced to make the mesh as optimal as possible.
After defining the cut in the side view, I move to the perspective view to adjust the vertices.
After that, I return to the side view and do some more adjusting.
It is vital that the artist checks the polygons he just created as often as possible, and from as many angles as possible. Checking will probably take more time for each new part/polygon than actually creating it, but this is necessary to ensure the quality of the work.
By extruding, cutting and moving vertices around, this is how the side looks:
The basic shape can be obtained by extruding the border edges of this geometry. Â Notice I haven't extruded the bottom part as it is not necessary to have that area high-res.
Next is the front air intake, the smaller front side intakes and the basic shape of the headlight:
I then cut the shape of the glass roof from the main body geometry. Â I will use the extracted faces as a base for the roof. To get a better view of the entire car I duplicate the side as an instance and scale it by -1 on the X-axis.
For the security arch of the glass roof, make a copy of the glass roof and then cut a shape using the Split Polygon Tool, which will then be extruded to get the desired shape.
The basic shape might be done now, but the silhouette is not, as the car looks "square" when viewed from the front, back and top views. This is because there is no direct reference for these orthographic views.
This problem can be corrected by using a latticemodifier on the body to modify its general shape. This method is good when the result is "square" and will add a new dynamic look to an otherwise dull-looking model. The command can be found under Create Deformers > Lattice. I used these settings but the different parameters can be changed to better suit each vehicle:
As the basic shape of the car is ready, I will save a separate scene with this geometry to later use as a base for the low-res model.
With the final shape improved, I can then move to modelling the medium size details, like intakes and outlets. Â Here is, for example, how I added one of the frontal intakes:
As you may already know, the modelling process should be done by using 4-sided polygons, generally called quads, to avoid any artefacts when applying Smooth on the mesh. Triangles are to be avoided; in turn it is preferable to use polygons with more than 4 sides if absolutely necessary. Usually, a 5-sided polygon doesn't affect the smoothed shape too much, but checking if it does affect the mesh will determine if it is OK to use it or not. Here is an example of such a case (the selected polygons are five sided). The second image shows that area with one level of smooth applied. As you can see, the five-sided polygons do not affect the topology too much, so they are acceptable in this situation.
The wheel will use a polygon cylinder primitive as a base. Â This cylinder will have about 4 times as many divisions as the number of spokes the wheel has. Â My wheel has 5 spokes so the cylinder will have 20 divisions.
I only keep a "slice" of this cylinder and instantiate it to reconstruct the wheel. Â This way I can work on one segment and visualise the entire wheel at the same time.
To make the wheel look more realistic I separate the tyre from the rim. Â Adding a "lip" to the rim will also help differentiate the two pieces.
Being a sports car, the rear wheel will have a "deep-dish", accomplished by simply moving the centre of the rim inwards. Small details like this go a long way to making the car look believable!
There is no interior modelled for the high-res wheel as this area will be barely visible on the final car and therefore will not require any special details on the normal map. Â This is often the case with high-res models that are going to be used only for baking maps as there are some areas that need not be modelled because they will not influence the final low-res model.
One thing to be careful about are the geometry intersections. Â These are to be avoided because they tend to cause problems. To minimise problems, some of the topology might have to be rearranged to make the separate pieces match at a vertex level. This way, the smoothed meshes will intersect without causing rendering problems.
Before applying smooth, some of the edges of the model have to be "strengthened" by adding some parallel cuts to them. Â This can be done by using either the Split Polygon Tool, or Select Ringand Split Edge Ring.
For the wheel cut-out, a small extrusion will make the area more believable as most cars have this detail.
One thing to be aware of is that, for the seams between parts to look good, the topologies have to be similar and the meshes should have matching vertices on the borders. Â This will ensure the objects will have identical borders even when smoothed.
Going further into detail, the headlight can be modelled from separate pieces to keep the process simple. Â The interior and glass have both been constructed from the geometry already done for the exterior of the car. Â The only parts made from scratch were the cylinders inside.
The brake disk is one element that doesn't require too much detail as it will not be too visible on the final model. Modelling the big details is enough, as smaller ones, like slots, holes, grids and rivets can be done with textures. To further optimise it, I only modelled the details that face the exterior of the wheel, leaving the interior face flat.
The best way to start the interior is to use the exterior as a base. Â By extruding the borders of the exterior inwards, the interior can be created very easily. Â The next couple of pages contain some screenshots describing the way the interior was built. Â There are not many descriptions as most of the images are pretty easy to follow.
Cockpit & Door
For the door I used two already-modelled pieces of geometry as a base:
- The door thickness is made using a part of the cockpit (selected in the image)
- The exterior of the door was already created when I did the exterior of the car; I just have to combine it with the thickness
- The interior of the door is the only part that has to be built from scratch
The base is a simple torus primitive. Â The interior is made from a simple plane modelled to the desired shape and then extruded.
And finally, some screenshots of the finished interior
As you can see, the level of detail is basic, as the interior will not need too much normal mapping detail, apart from the general shape. Â Adding small details is done in a much quicker way by using textures.
In the following part, we will deal with the in-game geometry and the challenges of keeping the model as low on polygons as possible!
At first sight, the processing power of a next gen console might seem enough to render huge amounts of polygons and allow the high-res model just created to be rendered in full detail, in real-time. The problem is, however, that a vehicle is just a part of the scene rendered by the game engine. 20,000 polygons might seem low, but if you consider that some racing games can have many cars on the screen at the same time, that adds up to a lot of polygons being rendered! That is why games require different models with different detail levels to be created for each vehicle.
The first mesh used is usually called "in-game", and it is the model players see in the actual game. This one has around 10,000 polygons for racing games and much less than that for games that contain more complex scenes, like the Grand Theft Auto type games. This model is optimised to be viewed from a medium distance so that certain parts of the car have little to no detail, to save on polygons. The underside is usually flat and there are no suspension parts, unless the car is an open-wheeler and the interior has less geometry detail than the exterior. The geometry I will build for this tutorial's subject car is pretty simple as shape goes, so I will set the poly count limit to about 7,000 polygons, including wheels and interior.
For the low-resolution model, the modelling rules are stricter that in the case of the low-res model, because the optimisation of the mesh plays a more important role. Real-time rendering is done using triangles, the only geometrical shape that a video card can "understand". All other more complex 3d shapes are converted to triangles when rendered, or exported to a game's rendering engine. This automatic conversion can cause problems if the source polygon has more than 4 sides, because it might tessellate in an incorrect/inefficient mode. This is why only quads are to be used. There are areas where quads probably won't do, so triangles can be used to fill in these areas.
As mentioned at the beginning of this tutorial, saving a different scene with a basic high-res mode of the exterior is used as a base for the low-res model. Â Still, it seems I forgot to save a good intermediary mesh for the wheel so I will have to build it by using the full detailed mesh. Â This might also be the case, in some situations, when the artist is required to build a low-res model using an already-finished high-resolution mesh.
The first thing to do is to eliminate all of the close parallel cuts in the geometry that were used to strengthen the high-res model. Â A simple way to do this is to use Edit Mesh > Merge Vertices on the entire wheel mesh. Â The Distance value can be tweaked to make sure that only the very close vertices are merged.
The next step is to reduce the unnecessary polygons by deleting the edges that do not influence the shape too much.
The high-res wheel didn't have an interior, but the low-res still requires one that will be visible in the game. Â As the car has a very small ground clearance, the back of the wheel will be barely visible, so just basic geometry there is enough.
Setting up the Normals in Maya
The way the object is illuminated is defined by normals, which are a vectorial attribute assigned to each vertex. This vector defines the direction in which the light is reflected off that vertex. To make it easier to setup vertex normals without having to define them one by one, Maya uses an attribute applied to each edge called Hard Edge (Normals > Harden Edge) or Soft Edge(Normals > Soften Edge). In short, if one edge is "hard", the geometry will look like it is broken on that edge. Contrary, if the edge is "soft", the mesh will have a continuous aspect on that edge. This is done by splitting one vertex into a couple of vertices with different normals for each one to create the "broken" appearance of the geometry. The lighting for a soft-edged area is calculated by averaging the values of the normals of adjacent vertices.
Modelling for games will almost always mean that the normals have to be adjusted for the model to look its best. The problem comes when there is a normal map involved - a normal map that requires as few hard edges as possible (I will talk more about this necessity in the 4th chapter).
The first thing to do before setting up the normals is using the Normals > Unlock Normalsoption to unlock the normals and allow them for proper editing.
The starting point is the mesh with all of its edges set to soft. This is done because there will be fewer hard edges than soft edges, so it makes sense to set them all as soft and then just change a few to hard, as necessary.
As you can see, the wheel doesn't look that good with all the edges set to soft. Â The strange shadows visible on the mesh will have an adverse effect on the quality of final lighting with normal maps. Â Here are some simple rules that I use when setting up normals:
a. All border edges count as hard edges (not a rule, but a fact to be remembered)
b. For curved continuous surfaces, set the edges as soft (2 and 3 in the image)
c. For angles that have a concave shape, use hard edge (4)
d. For angles that are close to 90o use either soft edge if the edge is facing the camera (5), or hard edge if it is not visible (6)
The last rule is good for objects that do not rotate in the scene. Â As always, these rules can be broken as long as the final result is good!
Using the above rules, here is how the wheel looks. Â The continuous edges are hard and the dotted line ones are soft. Â This view mode can be activated by Shift & right-clicking on the object and selecting Soften/Harden Edge > Toggle Soft Edge Display.
I recommend setting up the normals before optimising the geometry. Â This way you can take shading into account when the polygon reduction is done. Â As the hard/soft edge setting in reversible, it is easier to change edges from hard to soft, or vice-versa, to reduce the entire mesh with all the edges set to hard only, to realise that once the normals are set, some areas require extra polygons.
Next, some images that show the way the normals are set on the car's body:
If the high-res geometry has intersections, it is preferable that the in-game version has none. Partially occluded polygons will most likely lead to artefacts in the game's engine. Topology has to be redone in certain areas, and fully occluded faces can be deleted to avoid rendering artefacts.
Now comes the polygon reduction part. Â In the following images are basic descriptions of the most common polygon reduction methods, and some areas where they can be applied.
1. Select Edge Ring and Collapse
2. Select Edge Loop and Delete Edge
The borders of the low-res model are very important. Â They have to match the high-res geometry very closely so that baking the textures will not result in "blank spots" on the normal maps because of improper overlap. Â The white wireframe object in the next image is the high-res model without smooth. Â The green wireframe object is the low-res. Â As you can see, the two shapes might not be identical, but the borders are very close to each other.
Moving on to the wheel wells, the quickest way to make them is to select the border of the wheel well and to extrude it in.
After filling in the wheel wells, the rest of the underside can be constructed using as few polygons as possible.
Speeding up things a little, here are some of the other parts reduced to low-res.
The final low-res model will look like this. Â Note that each different colour represents a different material that will ultimately have a different texture. Â The final poly count is 7,116 - just a bit over the initial estimate!
The vehicle in this tutorial will have the following textures:
Window: Â Â Â Â Â Â Â Â 256 x 256 with alpha
Interior: Â Â Â Â Â Â Â Â Â Â 512 x 512
Wheel: Â Â Â Â Â Â Â Â Â Â Â 512 x 512
Exterior: Â Â Â Â Â Â Â Â Â 1024 x 1024
The entire UV process will be done using a chequered texture applied to the object as a colour map. Â This is done to make sure all the UVs are proportional to each other, if each individual UV shell is aligned properly, and to make sure there are no distortions.
The main tool used for making organic UVs in Maya is Polygon > Unfold. Â Here are the basics on working with Unfold in four easy steps:
- Start off by applying a simple UV modifier on the entire geometry - something quick and simple like Create UVs > Planar Mapping. Â Settings are not important, the goal being to obtain only one UV shell for each geometry piece.
- Using Polygon > Cut UV Edges (in the UV Texture Editor menu), cut the UV shell into more shells to avoid UV overlapping.
- Apply Unfold to each UV shell, one by one. Â The basic settings can be observed in the next image. Â Note that I ticked the "rescale" option to make sure the UVs will have the same scale. Â The results should cause as little distortion as possible when the object is viewed in 3d with the chequered texture applied.
4. Each UV shell has an attribute called winding order. Â This defines the order in which the UVs are displayed, either in a clock-wise or counter-clock-wise manner. Â To view this attribute, use this button in the UV Editor:
Once the button is pressed, each shell will be collared differently, according to the winding order. Â Some shells will be blue (normal winding order); some will be red (flipped UVs). Â This display mode is additive, so overlapping UVs will have a more pronounced colour, making them easier to spot. Â As this winding order has a big impact on how the normal map is generated, keeping all UV shells blue will help a lot when baking this map. Â This feature has been introduced in Maya 8.5, along with a couple of other improvements that make baking and using normal maps a lot easier than before.
5. After all the UVs shells are correct, the next step is to scale and arrange them in the 0-1 UV space. Â The way they are arranged has to be as compact as possible to minimise the unused texture space. Â I start the compacting with the biggest shells and arrange them starting from one corner of the 0-1 space.
The Window UV:
As I mentioned earlier, the first step is applying Planar Mapping on the geometry. Â If the resulted UV doesn't have the same symmetry axis as the mesh itself, there are chances the unfolded UVs will look incorrect, like this:
One solution is to start the UV process by using a more suitable way to do the initial UV. Â By applying Planar Mapping from the top view, the UV will have the same symmetry axis as the geometry. Â After Unfold, the result will probably be better, like in the following images:
This type of error caused by Unfold can be corrected by cutting the UV shell along its symmetry axis, applying Unfold to each resulting half and then recombining the two shells by using Move and Sew.
The Wheel UV:
The easiest and most logical way to do the UVs for the tyre tread is to use Cylindrical Mapping. Â To save texture space, the thread UV was cut in half and overlapped. Â I could have used the entire width of the 0-1 space to make the tire texture tileable, but in this case it is more important to keep the sides of the tyre and the tread at the same resolution, so I overlapped them instead. Â I did the same for the interior of the rim; only the UV was cut in four pieces and overlapped, as that area is not visible too much in the scene. Â The same goes for the inner part of the brake disc, which was overlapped with the exterior to save texture space.
Interior and Exterior UV's:
The next images show the way the interior (1st image) and exterior (2nd image) UVs are laid. Â Some things are worth mentioning:
1. Most of the shells are overlapped to save texture space. Â Do this as often as possible, especially for areas that do not contain asymmetrical details, such as text decals.
2. Some of the shells are not overlapped as they will require unique detail on the texture. Â For example, the front of the vehicle is not mirrored to allow the addition of a logo in the texture.
3.Parts that are less visible on the car, like the underside, use less space on the UV as they do not require too much detail on the texture.
4. Even though the rear of the car will be the one most visible while playing the game, the seam resulted from the mirroring of UVs is small.
I recommend that the UVs be cut on hard edges, because any seams that will appear there in the texture will be easier to hide because of the sharp transition in lighting between the faces.
1. The Normal Map:
In games, the normal map is used to add details to low-poly geometry. Â The information can be extracted from a high-resolution mesh and then applied to the in-game model to improve its aspect. The major advantage of this technique is that it can vastly improve the look of a low-res asset without having a big impact on rendering performance.
Here is how it all works.
As mentioned in the low-res portion of this tutorial, lighting an object in a real-time 3d environment is done using normals, which are a vertex attribute. Â The major disadvantage of this technique is that the shading quality is proportional with the number of polygons.
Building a next gen object is almost synonym with using normal maps. Â Instead of relying of mathematical procedures to determine the way light is reflected off a surface, the "per pixel" lighting method uses a normal map to define the normal's direction in every point of its geometry. Â The major advantage is that the normals can be calculated from a high-res version of the asset. Â Each pixel in the normal map will define the normal of that point in 3d space, as follows: the three colour channels R (red), G (green) and B (blue) will determine the X (red), Y (green) and Z (blue) values of the normal. Â There are two types of normal maps used in games:
A. Object (World) Space Normal Map. Can be easily identified by the fact that it looks like a rainbow. Each colour channel defines the absolute coordinates of the normal in world space. This type of map is used for static, non-deformable objects and it is usually avoided as it is hard to change in Photoshop after it is generated.
B. Tangent Space Normal Map. Can be easily recognised by being predominantly blue. Each pixel defines the deviation of the normal from the value calculated with the "per vertex" method, by using a local co-ordinate system (X, Y, Z will instead be U, V, N). This is the most used type of normal maps in games as it is easy to edit in Photoshop and it can be applied to deformable meshes.
A good idea is to save a new scene before starting to prepare the scene for baking. Â This will ensure that all the settings used for baking are saved separately in this new scene and are easy to go back to in case of anything needing a re-bake.
All the meshes should be recombined by following these rules:
- The low-res geometry will be separated in such a way that every object has only one material. Â For example, the door geometry will be separate from the door window, even if in the final scene they will probably be merged together. Â Naming these meshes should be done by using a simple to follow naming convention like this: body_low, glass_low, interior_low.
- As mentioned before, intersections must be avoided by separating objects because they can cause artefacts in the baked textures. Â For example, if the interior has intersections, I will separate it into different objects that will intersect each other but will not contain intersections themselves. Â Naming should be something like interior_low 1, interior_low 2.
- The high-res geometry will be recombined in a similar way to the low-res geometry. Â Each previously created low-res geometry should have a corresponding high-res counterpart, named something like: body_high, glass_high, interior_high, etc.
These naming rules will help speed up baking by making each high-res/low-res pair easier to select. And don't forget to apply Smooth on the high-res meshes before baking!
Texture baking in Maya can be done by using the Transfer Maps utility found under Lighting/Shading > Transfer Maps.
The "target meshes" section is for the low-res meshes and the "source meshes" section is for the high-res versions. The settings in the next image are a good starting point for baking. The settings that usually need tweaking are "Search envelope" and "Max search depth":
For each pair of meshes, a normal map will be generated. Â If there is more than one normal map for one particular material, these baked normal maps can be recombined in Photoshop by using the Overlay blend mode.
The combined textures can be loaded on the bump channel of a Phong material. Â The "Use as" drop-down box in the bump2d node has to be set to "Tangent Space Normals" for the normal map to be correctly displayed when high quality rendering is enabled (Renderer > High Quality Rendering in the viewport menu)
This is how the mesh looks with normal vertex based shading.
This is how the mesh looks with normal maps applied in High Quality Rendering.
1. The Ambient Occlusion Map:
This is a bit easier to explain.Â Basically, the ambient occlusion (AO) map contains the amount of "visibility" stored for each pixel. Â The more occluded that point is in 3d space, in relation to its surroundings, the darker the pixel will be on the AO texture. Â I will not go into detail about how this is calculated; I will stick to showing how it is generated and used. Â Because occlusion is influenced by all the objects in the scene, this map does not require the low and high-res models to be separated to minimise the number of intersections.
Texture generation is similar in steps to the generation of normal maps. Â The next image presents some of the settings used. One thing to mention is that, for the AO baking, the "Max Search Depth" setting is ignored. Â This is replaced by "Occlusion Max Distance", which usually requires a value larger than 50 to give proper results.
The value for "Occlusion rays" is directly proportional to the quality of the final texture and the rendering time. Â For a test render, a value of 16 will be enough, but to obtain a smooth texture I use a much higher value, usually a power of 2 (64, 128). Â Be careful: high values in this field will cause the rendering time to increase dramatically!
The resulting image is a greyscale that can be put on top of the painted colour texture using Multiply.Â This will add depth to the diffuse texture, making it look more realistic.
Usually, ambient occlusion maps take more time to bake than normal maps, so some patience is required. Â Do a lot of test renders with low "Occlusion Rays" values to make sure all the details show up on the map before doing a full resolution render, which can take more than half an hour to complete!
Now that these textures have been baked, you are ready to move on to the next and final chapter of this tutorial, texturing.
1. The Diffuse Map:
The last part of this tutorial will present a simple way to create the textures for this vehicle. Â I will use, as an example, the exterior texture of this asset to show an easy and effective way to create textures in layers.
Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â
One important thing that I always keep in mind when texturing is that, a lot of the time, the texture has to be corrected or changed during the creation process. If I just paint all the details on one layer in Photoshop, later on a simple colour change can be impossible to perform without redoing most of the texture. That is why the texture should be done in layers, by keeping similar types of details grouped together for easy editing.
The base is a layer set which contains one layer for each material/colour on the texture. Â Naming these layers in a comprehensive way is a good idea and will make things easier.
In the next layer set up we have the big details in the texture. Â I used simple shapes and some layer styles to draw the grills. Â The headlight lenses are taken from a photograph; desaturated and pasted as a layer set to Overlay.
After adding the big details, it is time to add some subtle material variation. Â As this vehicle is new and clean, I only add one layer with a metallic texture set to overlay. Â To keep everything subtle, the layer opacity is lowered. Â Also, there is a mask to hide the metallic texture for areas that do not require it. Â Masking is a good method of hiding detail and it is preferable to deleting as it can be reversed.
The texture still looks flat and lacks depth. Â To add some variation to the huge areas of blue car paint, I add a new layer of a lighter colour, and by using its mask I blend it with the original one like so:
The texture is getting better but it is not done yet. Â Adding further detail can be achieved by using the ambient occlusion map baked earlier. Adding it on top of the colour texture, with the layer set to Multiply,will add a lot of detail to the texture, making it fit for use.
This is how the texture looks after adding the AO map.
2. The Specular Map:
A specular map defines the intensity of the specular highlight, effectively describing how reflective a texture is. Creating this texture is fairly simple and involves using the color texture as a base and modifying it. This is yet another reason to keep the color texture in layers.
Every type of material reflects light differently, so each area will have to be adjusted to reflect this. Very shiny materials like glass or chrome will have a very light color on the specular texture, usually white. On the other hand, matte materials will be defined by dark colors on the specular map. Pure black is to be avoided as having an area without any specular highlight will make it look very flat in the game's engine because there will be no highlight to show off the normal map detail. These are the two extremes; the rest of the materials will have their specular color somewhere in between. There are no "standard" values, so the artist has to create this texture by trial and error. Unless specified by design or technical documents, the absolute value of the specular color is not as important as the general contrast of the map. One trick used to enhance the look of metallic textures is to change its specular to a color that complementary to the diffuse map. So here, a reddish specular on a blue color texture will give a nice metallic effect. Another good idea is to enhance the contrast of the small surface details on the specular map to make the specular easier to read. This is the case of the next image, even thought the noise in the texture might not be visible due to the screenshot's resolution.
2. The Normal Map:
The normal map base is the texture generated in the last chapter.Â On top of this I will add the details that have been added in the colour texture. To extract a normal map from the diffuse texture, there are two free programs that do the job well.Â The first one is nVidia Normal Map Filter which is part of the nVidia Photoshop Plug-ins http://developer.nvidia.com/object/photoshop_dds_plugins.html.Â This plug-in uses a height map to generate the normal map. A height map is easy to create by using the colour texture as a base. Each pixel will have a greyscale value that represents its elevation. The lighter it is, the more elevated/extruded it is. This value is a local one in the sense that each pixel has its elevation defined in relation to its neighbours. A flat white height map will result in a flat normal map as there is no variation in elevation. Basically, the process of converting a diffuse texture to height map means desaturating the original layer and modifying it to better reflect the elevation of that area.
This is the height map created for the exterior of the car:
Next are some hints about how to use the Normal Map Filter in Photoshop. Â The settings explained here refer to the next image.
1. "Invert Y" is necessary so that the normal map will be correctly displayed in Maya using the default settings.
2. The recommended methods of generation are "Average RGB" or "Colorspace".
3. Experiment with the Scale value to obtain the desired depth for the resulting normal map.
This filter has its limitations in the fact that the resulting normal map lacks depth, because there is almost no information saved on the depth (blue) channel of the normal map.
When added depth is necessary, or the source image is not a height map but a fully lit colour texture, like a picture, the program to use is Crazy Bump http://www.crazybump.com/
As an example, this is how the tyre normal map was created. The base image is this one:
I used Crazy Bump 8.6 Beta which has separate buttons for opening height maps, pictures or normal maps as sources. Â In this case I used "Open photograph from file". Â Just as the Normal Map Filter, this program requires some experimentation to better understand how it works. Â To make it easier, these are the settings used to generate the tire texture:
The resulting normal map from these programs can be added on top of the normal maps previously generated by using Overlay. More than that, Crazy Bump can also generate an ambient occlusion map, so that can be used also to enhance the colour texture. This isn't the case here as the source picture has enough detail to be added to the texture as is.
Finally, here are some screenshots of the final work done in Maya using High Quality Rendering.
I hope this tutorial was enjoyable to read and that the information in it is useful for you. Â The pipeline described here is a very good indication of what is required for a 3d artist to accomplish while working for a Next Gen game, and hopefully this will help answer some of the questions people ask when trying to find out more about how in-game cars are made.
About the Author:
Valentin Nadolu is Lead Vehicle Artist at AMC Studio since 2006. Â He is a physics engineering student at the Faculty of Electronics, part of the University Politehnica of Bucharest. Â He and his team have done vehicle work for such games as Test Drive Unlimited, Mercenaries 2, Saboteur and a yet unannounced Blackrock Studios (a part of Disney's Interactive Studios) title.