# Modeling cars using polygons

## Ali Ismail runs through the theory and basics of polygon-modeling cars in3ds Max and Maya

This tutorial examines the creation of polygonal meshes with high quality curvature to produce better reflections. It's geared towards artists who have experience in modeling complex polygon hard surfaces such as cars but are looking to have a better grasp on the subject. Using the example of a car body, the same principles can be applied to any reflective object whether it's a boat, a futuristic concept train or a sophisticated water faucet.

While this is a car modeling tutorial it will not go into any details of the basic process of creating the mesh, specific tools or matching the reference proportions which I feel are better suited for a general modeling or hard surface modeling tutorial. One other important thing to be noted is that the level of quality that this tutorial deals with relates to rendering an object with continuous reflection streaks across it. If all you need is something reflecting an HDR sky environment and you don't mind some reflection distortions that the untrained eye won't catch then this is not for you.

A big reason for creating this tutorial was another tutorial that I have created many years ago when I was starting out my way in 3D graphics and has still been circulating to this day (Making of Mercedes S600). I felt that a follow up was necessary to go into the depths of understanding the intricacies of automotive modeling and laying out the basic principles which distinguishes it from any other type of 3D modeling.

## Class A Surfacing

Perhaps the biggest defining characteristic of a car body is the fact that it's reflective! Highly reflective surfaces clearly expose your model curvature, unlike matte objects. Imagine a dent or bump on a mirror versus on a dusty wooden cabinet. For all intents and purposes of this tutorial you could define a class A surface as a surface which reflects really nicely.

if you go into car or industrial modeling for actual manufacturing where you will be using a NURBS modeling software such as Autodesk Alias or Rhino3D, you are bound to run into terms like tolerance and continuity, but all the industrial technical details put aside what we are interested in for creating a car for rendering is continuity; which refers to how continuous a reflection is across a surface.

Some of the continuity elements

## In the image above…

Position continuity (G0): the surfaces are aligned and have no gaps in-between.
Tangential continuity (G1): they have a rounded fillet between them with a specified radius minimum.
Curvature continuity (G2): blended together and the highlights moving on them would appear as if its on a single surface.
Rate of curvature change (G3): its even more blended but the difference is very small and hardly noticeable.
G4-G5-ad infinitum: are not used but theoretically speaking you can add as many as you want. For the mathematically inclined just think of differentials and integrals and rate of change (velocity) or the rate of the rate of change (acceleration) or the rate of the rate of the rate of change (accelerating acceleration).

To learn more about NURBS and Class A surfacing I recommend reading Autodesk Alias help files or some of these resources below. (if any of the links don't work just use these keywords in any search engine and you are bound to get good results. The wikis are not bad either.)

Alias workbench
Autodesk Alias help files
Rhinoceros NURBS
NURBS extreme basics
Learning Alias
Fridolin Beisert

## Back to polygons

Taking the surfaces back into any polygon modeling software we can attempt to replicate the same curvature using very simple geometry and applying a typical Catmull-Clark subdivision and get somewhat close to the original.

You can download the scene here (right click and save target as)

Now just because we can get an approximation with polygons does not mean that we are creating an accurate reflection continuity. If you try it yourself, or open the scene above, you would see how difficult it is to exactly match a NURBS surface with a Catmull-Clark subdivided mesh because the two are using very different algorithms (please also note that we didn't test a complicated surface).

If there is anything to come up with from all the previous information, it is that reflections are important and moving a vertex or a loop even in small amounts could affect the result in great proportions.

## The Horror!

Below are close-ups of a car render. Anyone who had experience in rendering cars will be familiar with this.

Close ups of a car render

So you have a nice mesh with good looking edge loops and you wanted to make a high resolution render in an indoor environment. To your dismay you are faced with the dilemma of wavy and jagged reflections. You could try to decrease its effect by moving the reflection boxes closer to the mesh making it almost a diffuse texture but if you are doing an animation where you want the highlights to sweep across the car body there is no getting round it unless you're doing very time-consuming rotos in composite and basically painting the reflections for an animation length. But - all can be avoided if you have a good model to start with.

Some of the artifacts above might be due to slightly misplaced vertices but for the most part the cause is much more subtle. Please observe this effect:

The artifacts made by a simple cut or poke

So as you can see a pole, a simple cut or even an edge loop could cause considerable artifacts in reflections, below are some examples of car bodies that have clean topology and yet show similar waviness or jaggedness in the reflections.

A similar effect on car reflections

This is what happens when we start hitting polygon modeling limitations, the effect cannot be avoided completely using polygons but it can be mitigated to some extent. Models designed in NURBS with class A surfacing techniques show perfect reflections and the machines creating the car panels molds can trace the surface as good as it's physically possible, thus producing a flawless mold that the metal sheets can be pressed onto. This results in a surface that is accurate enough to give continuous reflections. CAD data also have exact tolerances for all the screws and tight-fitting mechanical hardware.

On the other hand if you wanted to give the machine a polygon mesh you would have to increase the subdivision iterations to an unimaginably higher level. Maybe in the future we could see some smart hybrid method utilizing a new polygon subdivision algorithm, but it's yet to be invented.

Download the HDRI or cubemap used in this tutorial here and here (right click and Save Target as). You can easily create a similar one using HDR Light Studio and if you are interested in real-time engines or cubemaps you can check any of these two tutorials to know how to convert an HDRI to a cubemap

CGTextures tutorial
Xoliul tutorial

## Tool tip

To view reflection maps interactively in the 3ds Max viewport, in the Views menu under Show Materials in Viewport As, select Realistic Materials with Maps. If you want to explore real-time capabilities further in 3ds Max you can check the Xoliul Shader by Laurens Corijn and Robbert-Jan Brems.

## Solutions

How far you go to reduce this effect is up to you, but it's important to always keep your final goal in mind. Only you can decide whether you want a reflection as good as possible or if you want to have a cleaner mesh. Are you creating this for a still image? How many images will you be creating? Can you fix reflections flaws in Photoshop or are you doing an animation? Or do you just enjoy modeling cars and have an obsessive drive to make the perfect car?

Before moving into any complicated objects like a car, it's better to make sure we can create simple ones first and then review some practices.

## Use as few vertices as possible

Getting by the least amount of vertices makes it possible to easily create flowing reflections and to later edit the surface. Even though I tried to place the vertices of the surface on the right as well as I could I was unable to get the same quality of reflection as the one on the left with very few vertices.

Less is more with vertices

## Space edge loops evenly

Try to evenly space edge loops or to use any curve tools available for vertices to make the change in edge loops density gradual. Proper edge spacing and positioning the vertices to follow a curve could greatly improve reflections. In 3ds Max you can use the loop tools to do so.

Evenly spaced edge loops improve reflections

## Make trims after subdivision

Make any trims or cuts across any surface only after you have finalized the surface and have sufficient subdivisions. Any trims made on the low poly surface make drastic changes to the curvature. So to minimize the artifacts and as a measure of damage control, making the trims or cuts after subdivision will reduce the artifacts. This effect can be typically seen in the door handle area of a car when the polygon cuts and all the fine detailing has been made on the low poly mesh.

Effects of making the trims before and after subdivision

## No support loops

For the final mesh, I am going to use an example at the end of this tutorial I did add support loops but only at the very end. The workflow I'm suggesting here is a method to add to your toolkit and not the be-all and end-all of hard-surface modeling.

Not only is it time-consuming to add support edge loops manually but it would be much harder to modify the base mesh and focus on the curvature of the surface. OpenSubdiv makes it easy to control our creases but even without it we can still preserve our hard edges using hard edge/crease/smoothing groups and preserving the hard edges when doing a standard Catmull-Clark subdivision. This enables us to shape the basic forms with minimum effort.

Note: Long before the Autodesk OpenSubdiv hype we had a plug-in by Marius Silaghi called TurboSmooth Pro, which does basically the same thing. Please view his website to check this plug-in and other interesting and useful plug-ins.

## Tool tip

3ds Max: Set smoothing groups to define your surface then add MeshSmooth/TurboSmooth with Smoothing Groups ticked. Or if using OpenSubdiv, adjust the edge's Crease values manually in the Editable Poly Edit Edges Tab. I have noticed some bugs in 3ds Max where sometimes you see a strange subdivision artifact if using smoothing groups. Always double-check your mesh and look at the resulting wire-frame, and if you notice anything wrong you can fix by deleting the surface and rebuilding the polygons again or as a safe measure by exporting into an OBJ and
importing again.

Maya: Either use the Crease tool from the Mesh Tools menu and apply OpenSubdiv Subdivision type or select your edges and from the Normals menu select Harden Edge then Select Smooth Options and use the Maya Catmull-Clark as Subdivision type and make sure the Hard edges check box is ticked under the Preserve tab.

Some of the different smoothing methods

## Blending Surfaces

I am not suggesting that you start creating your mesh in separate surfaces instead of aiming to the poly-mesh you see suitable but it helps to understand that while it's easy to create simple surfaces on their own that reflect properly we are almost always forced to have complex ones that could cause distortions.

Deliberately distorting the mesh for a certain effect

## Process

The simple wish to improve polygon meshes curvature to produce better reflections has led us through the rabbit hole of learning about NURBS and different subdivision methods. A car/boat/airplane body is very complex with many surfaces intersecting and blending. Please note that even if you use a NURBS tool to create your model it's not going to be always straightforward to create continuous reflections - especially if you are aiming at a class A surface quality. There are certain practices that can be learned to create areas like the wheel arches and pillars.

In no shape or form am I pretending that we could create G2 or G3 continuities in polygons but what I am attempting is to create a representative reflective surface, especially on the bigger parts such as car side panels, roof and bonnet, and avoid distortions that are easy to fix.

The model I am presenting here could have been better created. Maybe without a few edge loops here or there, and there are few areas where I could have made a better topology at or perhaps made some trims at a higher subdivision to avoid reflection artifacts. There is also one spot which I am going to show at the end of the tutorial where a simple vertex movement could have saved me post-work, but all in all I am very happy with the improvements I made over my previous car models.

## Create a base mesh

This is by far the most important step, it's where you make it or break it. The topology looks simple but it's well thought-out. The mesh created at this stage would look very similar to what you see used in games with a low poly count. If I added few more loops I could even get away with a high quality model without using any subdivisions, only carefully using smoothing groups/hard edges.

The low poly base mesh for the body of the car

## Subdividing and checking the flow

Add your subdivisions while preserving hard edges or experiment with crease values for OpenSubdiv. Continually do reflection tests and keep going back to the base mesh until you are absolutely certain that the mesh quality is at the level you are looking for.

Subdivisions and checking the reflection

## Finalize

Choose the subdivision level that you feel won't cause a considerable distortion on the trims (here below you can see the wire-frames of the one I chose) and start adding trims, details and support loops. Please beware that once you start adding trims there is no going back to the original base and you can't modify or change anything.

Adding the trims, details and checking the reflections

## Achilles' heel

Just to point out the few problem areas I have in this mesh that you could detect directly from the flow check reflection map. These might seem trivial and unimportant but as you will observe in the final image they could have a considerable effect. Of course it depends on the reflection/light box placement and camera angle but if you happen to have a reflection stripe going through an artifact area its going to show.

Some of the reflections going through an artifact

## Reference

This is the reference image I used for rendering this car. Almost all indoor studio car photos are heavily manipulated nowadays so you can't be completely sure of the reflections you see on the car. Yet they can serve as a good guideline.

The reference image used to create the car

## Render

You see here that in my final render around the wheel arch where you previously saw a tiny artifact the effect is noticeable and I had to Photoshop it out. For an animation I would either have to fix it in comp or redo that panel mesh at the base level.

Comparing the reflections in the final render

You can view the final high resolution render here. Other than 3dtotal and CGFeedback forums which are great for checking finished works and in progress ones, you can search for web forums specializing in car modeling. One website which I highly recommend would be SMCars.net and especially the advanced WIP section section which has some threads that are a treasure trove for 3D car modelers.

Thank you for reading this tutorial and I hope part of the information here was of any help. If you find anything that can be improved upon please do drop me an email.