Modeling Cars in Polygons

Last Updated: 16 September 2016

By Ali Ismail

Sections

- Class A Surfacing

- Reflection Artifacts

- Solutions

- Replication Test

- Polygon Modeling Process

- Render

Introduction

This tutorial examines the creation of polygonal meshes with high quality curvature to produce better reflections. Artists who have experience in modeling complex polygon hard surfaces such as cars but are looking to have a better grasp on the subject will benefit more of this tutorial. Hopefully it will also give you an understanding of the challenges involved in creating a car model and why many prefer to use NURBS to accomplish this task. By using the example of a car body, you can apply the same principles to any reflective object whether it is 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, you should note that the level of quality this tutorial deals with relates to rendering an object with continuous reflection streaks across it. If all what you are after is an object 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.

One 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 (Making of Mercedes S600 (PDF 7.0MB)). I felt that a follow up is 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.

This tutorial is mostly about the theory, to see a video recording of how I modeled it, you can skip to this 3D Car Modeling Video Tutorial.

Class A Surfacing

Perhaps, the biggest defining characteristic of a car body is the fact that it is 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 similar to Autodesk Alias or Rhinoceros 3D, you are bound to run into terms like tolerance and continuity. All the industrial technical details put aside what we are interested in for creating a car for rendering, is continuity that refers to how continuous a reflection is across a surface.

continuity examples

Position continuity (G0): the surfaces are aligned and have no gaps in-between.

Tangential continuity (G1): There are no sharp edges in-between the surfaces.

Curvature continuity (G2): the surfaces are blended together with the highlights appearing 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.

To learn more about NURBS, I have a basic introduction into NURBS article which you can check or you can start exploring on your own using the term "class A surfacing" in any search engine. Below are few more links you can go through.

Alias workbench | Alias Automotive tutorials and NURBS fundamentals.

Autodesk Alias help files| Autodesk help files and basics.

Rhinoceros NURBS | NURBS definition.

NURBS basics |Theory.

Learning Alias | Interesting articles and courses about automotive modeling.

Fridolin Beisert | Basic Alias tutorials.

Vladimir Panchenko | Great resource for high-end Alias Class A surfacing tutorials.

Back to Polygons

continuity in polygons
Continuity Replicas
Continuity Examples

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.

Download the scene here 3ds Max 2010 | OBJ (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 match a NURBS surface with a Catmull-Clark subdivided mesh because the two are using very different algorithms. Please note that we didn't test a complicated surface. We can conclude from all the above mentioned information 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 modeled in polygons will be familiar with this.

Car Reflection Distortions

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 a 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 then if you are doing an animation where you wanted the highlights to sweep across the car body. there is no getting round it. Unless you do very time consuming rotos in composite and basically painting the reflections for an animation length. All can be avoided if you had 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:

Reflection Distortions

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 which have "clean" topology and yet show similar waviness or jaggedness in the reflections.

- Download the HDRI or cubemap used in this tutorial from our Gumroad page or here: FlowCheck.HDR 4.92 MB | FlowCheck.DDS 192 KB (right click and save target as).

You can easily create a similar map using HDR Light Studio and if you are interested in real-time engines or cubemaps you can check this tutorial to know how to convert an HDRI to a cubemap CGTextures tutorial.

Tool tip:

3ds Max: At the time of writing this tutorial, I couldn't get a decent reflection in real-time inside 3ds Max viewport using the standard material, with an HDRI map in the material environment. (in Views menu under Show Materials in Viewport As select Realistic Materials with Maps, and you will see reflection maps in the viewport).

-You can try using Mental Ray as renderer, and it's not even straight forward! This Youtube video 3DS Max - Shadows and Reflection in Viewport By 3DTutorials.net demonstrates it in action.

-Or if you are like me, and you don't like to work with a viewport background showing at all time, you can use a directX shader, set the diffuse color to black, specular power to 0, and use the FlowCheck.DDS map in the reflection slot. (You can also use a shell material to view the directX shader inside the viewport and a standard material for rendering)

There used to be a great plugin by Laurens Corijn and Robbert-Jan Brems, called Xoliul Shader, which made viewing some real-time shaders inside 3ds Max easier. Now unfortunately for us it is not available. If it's ever back Online please E-mail me and I will add the link again.

Maya: Tick hardware texturing under the shading menu, use an environment ball in the reflected color slot with an HDRI map in the file slot. View textures inside the viewport and you are done. 

Root Cause

If you take a cube, subdivide it enough, and you will get something close to a sphere. (Catmull-Clark subdivision)

Subdivided Cube

Below you can see an example of how curvature changes when you create a cut in a mesh (or a vertex into an edge) and subdivide it. It's quite natural for it to behave in this fashion. But this of course, explains why creating an extra loop or cut can change curvature or distort it and why it can be very difficult to model a polygon mesh with good reflections.

Curvature in Subdivision

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 molds for the car body panels can trace the surface as good as it's physically possible, thus producing a flawless mold that metal sheets can be pressed onto resulting 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.

let's hope that later on, it would become common to see integration of a new type of subdiv surfaces, which can be used for manufacturing, with proper modeling tools for measurement, blends and fillets combined with some smart tricks that can solve these issues.

Solutions

How far you will go to reduce this effect is up to you, it's important to keep your final goal in mind. You will 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? can you fix reflection 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 and insist on using polygons!

As you will find out by the end of this tutorial, if what you are after is a true class A surface car body; then you better stick with a high-end NURBS modeling tool. this does not mean that with little practice you couldn't create a polygon mesh that reflects nicely. That polygon mesh, could come in handy, especially when what you need is modeling a car for a video game with high polygon count.

Before moving into any complicated objects like a car, its better to make sure we could create simple ones first and 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.

-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.

-Try to evenly space edge loops or to use any curve tools available for vertices or 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.

-Try to evenly space edge loops or to use any curve tools available for vertices or 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.

-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 makes drastic changes to the curvature, to minimize artifacts and as a measure of damage control, making the trims or cuts after subdivision will reduce the artifacts. In fact, once you realize this, you are a step closer to modeling and thinking in NURBS. In NURBS, trims are an integral part of the process. This effect, can be typically seen in the door handle area of a car, where polygon cuts and all fine detailing have been made on the low poly mesh. I have seen many artists, who subdivide the car doors one or two levels higher than the rest of the mesh then create the trims, just to make sure they have important reflections on the side of the car running smoothly.

-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 makes drastic changes to the curvature, to minimize artifacts and as a measure of damage control, making the trims or cuts after subdivision will reduce the artifacts.

In fact, once you realize this, you are a step closer to modeling and thinking in NURBS. In NURBS, trims are an integral part of the process.

This effect, can be typically seen in the door handle area of a car, where polygon cuts and all fine detailing have been made on the low poly mesh. I have seen many artists, who subdivide the car doors one or two levels higher than the rest of the mesh then create the trims, just to make sure they have important reflections on the side of the car running smoothly.

No Support Loops 

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

A general method to speed up the modeling process, that I use not only for cars or hard-surfaces, but also for modeling anything really, is to to use fewer edge loops as possible in the start and try to get the support loops for free by using hard edges. 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 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. http://www.mariussilaghi.com/

Tool tip:

3ds Max: Set smoothing groups to define your surface then add a MeshSmooth/TurboSmooth with Smoothing Groups ticked Or if using OpenSubdiv adjust the edges 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 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 Maya Catmull-Clark as Subdivision type and make sure the Hard edges check box is ticked under preserve tab.

No Support Loops Opensubdiv

Blending Surfaces

It all looks good in theory: use few vertices, good spacing and trim after finishing the mesh, but when you start modeling a car you will find it's not as easy to apply.

Cars have complex surfaces, where curvature is done with great care, surfaces are trimmed at an early stage and blended seamlessly with other 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 while Its easy to create simple surfaces on their own that reflect properly, we are almost always forced to have complex ones that could cause distortions.

Blending Surfaces

Replication Test

I created a simple NURBS object in Alias Automotive, which could represent a wheel arch area in a car and imported it back in max. You can see below my attempt to replicate it in polygons.

Replicating NURBS in Polygons
Replicas Wireframes

My attempt to match it precisely was not successful, not only that, but you can see how I was unable to create smooth reflections of the same quality as NURBS.

In answer to Craig Kitzmann, who wondered if it would help to create a surface in NURBS then retopologize it in polygons. The response seems to be in the negative. If you do create it in NURBS, you would really have to justify any retopolgy process, you can simply import the wire file, or convert it to any format into your prefered 3D tool and render it from there directly. And If you need a simple mesh for real-time use; then the NURBS one wouldn't help either and you better save your effort and do it all inside a polygon modeling software.

These polygon methods, can still be very helpful in creating concepts and design ideas, if you are experienced in handling polygons, you can create basic shapes quickly and test them out.

Process

The simple wish to improve polygon meshes curvature, to produce better reflections have 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, even if you use a NURBS tool to create your model, its not going to be always straight forward to create continuous reflections, especially if you are aiming at a class A surface quality, for cars; certain areas like wheel arches and pillars require some practice. Sometimes achieving a G2 continuity with a tight tolerance could feel like winning a lottery!

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 representable reflective surface, mainly in the bigger parts such as car side panels, roof and bonnet and avoid distortions which are easy to fix.

The model I am presenting here could have been better created. Maybe without few edge loops here or there, and there are few areas which I could have made a better topology at or perhaps made some trims at a higher subdivision to avoid reflection artifacts. That said, 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 its 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.

Base Mesh

-Subdivide and Do a Flow Check

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

Subdivided Mesh

-Finalize

Choose the subdivision level you feel the trims won't cause a considerable distortion at (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 stat adding trims there is no going back to the original base and you can't modify or change anything.

Final Mesh Wire
Final Mesh Door Handle
Final Mesh

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.

Artifacts

I did get so many requests on how to model the car that I actually went ahead and recorded the process for you, to view it please check this post: Car Modeling in Polygons Video Recording.

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.

Car Reference

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.

Before Photoshop

Before Photoshop

After Photoshop

After Photoshop

To render any car, it would help to study car photography and color grading, to view how I composite renders in general and how I color graded this car, please check my "Improving your 3D Renders" tutorial.

And here also 2 snapshots of my render scene

Again the recorded process of modeling this car can be found over here: "Car modeling in Polygons Video Recording"

Other than 3DTotal and CGFeedback forums which are great for checking finished works and in progress ones you can search for web forums specialized in car modeling. Two websites which I highly recommend would be SMCars.net especially the advanced WIP section which has some threads that are a treasure trove for 3D car modelers, and the 3D tutorials section at CarBodyDesign.com.

Thank you for reading this tutorial and I hope part of the information here was of any help. Apologies if this article turned out to be quite the mammoth it is now, based on feedback I just kept adding to it bit by bit over time and it grew! if you find anything that can be improved upon please do drop me an E-mail.

Please feel free to join in the discussion at the Youtube video comments section over here