Modeling Quality Control

Vray Rendering Engine

Primatte Keyer

Red Scarlet-X

Keylight Keyer


train_wireframeIf you’ve ever downloaded a 3D mesh for use in your project, you’re well aware that the quality of models can range from Production-Ready to Near-Useless. As there’s multiple techniques of building geometry, there’s also countless ways to introduce trouble and inefficiency that will make life difficult for the other artists down the pipeline.

In Visual Effects, one of the foundations of a shot is a quality polygonal model – but what exactly qualifies as professional quality? When handing off your asset to a texture artist or a rigger, you don’t want to have it bounced back. Fear not – I’ve compiled my Quality Assurance Gauntlet cheat sheet so you always maintain that reputation of delivering solid and reliable work.

Essential Quality:

World Scale
Make sure every element created is to the correct world scale – most studio pipelines use centimeters. A six-foot human should be 183cm high. While re-scaling a mesh is fairly easy and quick, why then is this so important?ArgusScaleFirst off, lighting. An entire scene that can fit in a shoebox will be completely blown out with standard illumination values added and will drive your lighter crazy. Another reason: A lookdev artist who added displacement maps to a shader has to dial in specific height and vector values. Scaling a character will not change the shader assigned, so new lookdev values will have to be created again. If a character or prop is already rigged and the rig has no scale control, disaster strikes. Always working in world scale is Modeling 101.

Topology Resolution/Edge Loops
Having the right amount of polygon resolution comes with experience, but knowing where your model is going goes a long way. By this I mean, what is the texture artist, rigger and animator going to need to do HeavyTopowith your asset. Break up very large faces keeps your UVs edges from swimming around when you subdivide. Massive differences in polygon sizes will exhibit problems if you’re surfacing Uniform Face Size vs World Space with ptex.

On the other side of the coin, having far too many edge loops will hinder rigging and slow animation down (every vertex in your painted weights must be recalculated for every movement). Naturally your renders will slow down as well, file sizes and load times increase, and subdividing a overly-heavy polygon can quickly freeze or crash your system. You’re looking for a good balance of a uncomplicated, unfaceted model with excellent deformation potential.

All Quads
AllQuadsPolygon faces should always have no more and no less than four sides, making it a quad. Responsible edge loops and starting with primitive planes and cubes is a great foundation. Some 3D programs, such as Cinema 4D, encourage the Knife tool which slices poly faces and immediately creates triangles and n-gons (any face with more than four sides). Why is this so important to avoid? First, Perfectly crisp mesh edges are unrealistic – subdividing meshes at render time is a great way to avoid faceted edges, create bevels to catch light, and avoid that low-poly look. Quad modeling allows for predictable edge-loop creation, clean deformation, pinch-less subdivision, and better overall rigging envelopes.

Efficient UVs
Nothing drives a texture artist crazier than dealing with haphazard, random and or just plain bad UV layouts. I see a lot of studio pipelines where the UV creation is done in the modeling department, which is not ideal but usually necessary. After modeling, the asset branches off into simultaneous surfacing and rigging, and you never want to UV a mesh after rigging or your UVs will swim across the surface. GoodUVsThe key to solid UVs is the balance between a human-readable island and a lack of significant stretching or distortion. Always keep UVs in the 0-1 space unless you are using tile offsets (for example with Mari). All UV islands on the same plate should be scaled relative to each other as well. Maya’s auto-UV tool has come a long way. It used to create shattered, human-unreadable texture maps, but it’s a good choice in a pinch or in a hurry.

If you plan on painting with a 3D paint program (Mari, BodyPaint, etc), stitching islands together is not as important as when you’re texturing in Photoshop. Another option is going UV-less of course: using Ptex (more on this later), but that workflow comes with it’s own pros and cons.

Stay efficient with UV islands by using up the entire 0-1 bitmap real estate so your textures maintain maximum resolution without getting unnecessarily too large. Big textures (above 4K+) all have to be preloaded into RAM at render time, slowing your frame down and possibly freezing your bucket.

Overlapping UV Faces
Although a very common technique in video game development, up until recently this was a sure-fire way to crash Mari. Utilize the Shade UV feature in Maya to quickly view which UV faces are flipped or overlapping others. If you plan on using a displacement map in your shader, overlapped UVs faces will have an inverted effect on the other side of the mesh and yield unexpected results. In an aesthetic sense, overlapped UVs keep the model from having realistic, symmetrical details on each side, such as dirt, grunge, wear or details. If you plan on generating normal maps from your textures, you’ll want each UV face to have it’s own unshared space.

Duplicate, Co-Planar, Coincident Faces
CoPlanarYou may notice a small flickering in your render or during a playblast. You usually spot this quickly in Maya if you see what appears to be thin black stripes on a polygon face. Odds are you have a co-planar or co-incidental face. These poly faces share the exact same space in the world and represent the same surface- like two dimes smashed into each other. This usually arises from bad poly extrusion practices, or importing a mesh from another program.
Keep in mind this is only an issue if the normal vector of each face is pointed in the same direction. Upon rendering, you’ll also see this show up as a solid black face in your anmbient occlusion pass.

Interior and Hidden Faces
In the CG world, if the camera cannot see it, it shouldn’t exist. Not only does this go for set dressing and props, but individual sub-object faces as well. While it’s true that a rendering engine will only render the specific light or camera rays, interior and hidden faces inside a mesh slow down production. They still have to be dealt with during UV unfolding. If you’re using a Ptex workflow and flooding procedural textures, you’re wasting a ton of projection calculation time on faces you’ll never see.
The only time I model and texture faces that will never be shown is when I want an accurate bounce light solution on nearby objects, especially with reflective and emissive shaders.

Unmerged, Isolated Vertices
IsoVertsI can’t think of a single good reason you would want vertices directly on top of each other and not be merged into one. If you’re looking for a crisp edge (like the cylinder primitive in Cinema 4D), adding an additional edge loop has far more advantages (see Topology Resolution/Edge Loops above). Doubled up verts slow rigging calculations and hinder further edge loop construction around an object – it’s just messy an inefficient.

Isolated vertices usually appear during the deletion of edges when using the keyboard Delete key (bad practice). An isolated vertice is one that is not directly connected to any edge or face – basically a floating point in space. Though not as critical as unmerged verts, isolated verts may hinder proper center alignment of axis or objects.

Rigging-Friendly Topology
This is most important for performance-based animation in character models – solid resolution in elbows, knees, shoulders and especially faces. The vast majority of the time, viewers will be looking at a character’s face- it needs to be constructed with a huge potential of easily emotive expressions. RiggingFriendlyThis includes muscle edge loops in character faces, and more model resolution on bending joints. Polygon flow lines should adhere to the actual muscle construction under the skin. With a lack of edge resolution in highly motivated areas (mouth and eyes), you’ll end up with stretched faces and subsequently stretched textures.

Although tris are preferably avoidable, if you absolutely have to have a few, make them in less conspicuous areas like the scalp (hidden under hair) or behind ears (see All Quads above). The faces should all be fairly uniform aspect ratio- no very long faces. If you start your face with a scupting program (zSpheres or Dynamesh in zBrush), make sure you retopologize before exporting the mesh to your animation program.

Meaningful Naming Convention
CamelCaseDuring a furious session of speed modeling, it’s easy to never stop for a little Outliner cleanup. Getting in the practice of solid naming for objects, materials and textures pays dividends in the long run. Undoubtedly, you or a colleague may have to open this file after some time passes to find nothing makes sense and wasted time ensues hunting elements down. Basically, pay now or pay later.

Very large scenes benefit greatly from utilization of Display Layers and Hypergraph Shader Bins.

For object and material names, using CamelCase is a great habit to be in. CamelCase is the practice of writing phrases with no spaces and every new word is capitalized. Programmers commonly never capitalize the first letter – such as largeBrickWall. If you stay consistent with programming standards, writing Python tools and communicating between departments is a breeze.

Frozen and Centered
It’s a simple, quick process that save a lot of time down the road. Before exporting or publishing your asset to the pipeline, make sure the model is centered at World Origin and any transforms are zero’d out. Exceptions to this would include exact pre-placement in an external scene or reference objects in a camera track. Freezing your transforms is crucial so you’re not dealing with any double translations in animation and can quickly get your rig back to the default neutral pose quickly.


Advanced Quality:

Poles and Extraordinary Vertices
One of the most common subdivision schemes used in production today is Catmull–Clark. The valence of a vertex is the predetermined ideal number of edges coming out of it based on the subdivision scheme selection- and for quad/box polygonal modeling using Catmull-Clark, the valence is four.


If you have a vertex with more than four edges emitting from it, you have an extraordinary vertice, also called a star vert. The problem arises from the surface evaluation of the subdivision scheme. Upon subdivision application, a control net is placed on the original mesh surface and the new resolution, as well as additional vert points and locations, are determined by the specific scheme.

Extraordinary vertices cause trouble during the calculation phase of the new limit surface – in a nutshell, inaccurate (albeit minutely) subdivision result. If you’re interested in getting to the core of what’s going on there, check out the famous 1978 article by the masters Ed Catmull and Jim Clark: Recursively Generated B-Spline Surfaces on Arbitrary Topological Meshes. It’s a hoot!