CAD conversion pitfalls

When editing imported CAD data, there are several things to be aware of. CAD data uses explicit (custom) normals. Smoothing groups are not used at all. It is important that all implicit normals are maintained when editing the mesh, otherwise you are likely to get nasty shading errors.

There are three ways to check for shading errors:

-Check the normals.
-Check the shading look.
-Check for any back facing triangles using Views->xView->Face Orientation (shown in green).

The only way to view explicit normals is to add an “Edit Normals” modifier to the top of the stack, then adjust the Display Length (length of the vectors). The explicit normals are shown in green. Blue lines are unspecified normals which are calculated using averaging and you do not want to see those in a CAD model.

Unfortunately 3ds Max is very buggy maintaining explicit normals and not very helpful displaying any resulting shading errors. The main problems are:

-The way the default viewport shading works makes incorrect normals not very apparent.
-Some operations dump the explicit normals and replace it with unspecified normals.
-Some operations maintain the explicit normals but rotate them in some random direction.
-Some operations create double triangles (back facing and forward facing), which go undetected unless you view the vertex/triangle count.
-Importing an Inventor model as a body object will create flipped faces on mirrored features and in some cases even removes faces completely.
-Flipped triangles go undetected unless you use xView.

I wrote a script called CADtoSP (CAD to Substance Painter) which fixes all of these issues. It is still in Beta but will be released in the near future for free. Send me an email if you want to receive a preview. Until that time, here are some things to keep in mind.

Some surfaces appear to be watertight but are actually separate surfaces. To fix this, you need to weld the vertices of all objects. This is done in order to reduce vertex count and to make sure the derived projection cage is correct, in order to prevent texture baking errors. There are several ways to merge vertices, but all of them destroy explicit normals, except this method:

-Convert the object to an Editable_Mesh.
-Add a ProOptimizer modifier with the following settings:
*Keep Normals = on
*Protect Normals = on
*Merge Vertices = on
*Threshold = 0.0
-Press Calculate on the ProOptimizer modifier.
-Collapse the stack. Note that this is important because if there are a lot of objects and you do the above steps in a script loop, PropOptimizer WILL fail without warning.

If Inventor objects (and possibly other CAD files) are imported into 3ds Max as a body object, some mirrored features will have back facing triangles. The only reliable way to fix flipped faces is to re-import the Inventor model as a mesh instead of a body object. But this will trigger another bug in 3ds Max. The wireframe can’t be made visible. To work around this, add a ProOptimizer modifier to the object and configure the settings as above. Then press Calculate and the wireframe will be visible if enabled.

When the CAD file is exported to an FBX file, all objects will have a transform which is not set at zero. Unity imports this correctly, but unfortunately Substance Painter do not and it is unlikely they will fix this. A workaround is to use a script called “reset_Xform_on_selected.ms”, available here:
http://www.hard-light.net/forums/index.php?topic=73720.0

In order to reduce draw calls, static objects need to be fused into a single object wherever practical. There are several ways to do this, but all of them destroy explicit normals, except this method:

-Execute the script “reset_Xform_on_selected.ms” on each which is to be fused. This prevents the explicit normals from pointing in the wrong direction after the mesh is fused.
-Convert all objects which need to be fused to an Editable_Poly. This prevents the explicit normals to be converted into unspecified normals.
-Select the first object which need to be fused.
-On the Editable Poly modifier, on the Edit Geometry rollout, select the little icon next to the Attach button (Attach List). Or click on the Attach button and then click on a second object you want to attach.

Imported Inventor files contain materials which are incompatible with the FBX file format, and possibly other export file formats. This results in the loss of all materials. In order to fix this, you need to convert all materials to a standard material.

Edit:
If you detach a surface, the normals will point the wrong direction after you fuse the new object with another object. In order to prevent this from happening, you need to add an Edit Normals modifier to the detached object and make the normals explicit,  then collapse the stack. Now you can fuse the detached object with another object.

Due to a bug in 3ds Max, sometimes the mesh is not stitched water tight at some   location. Adjust the mesh resolution slider to a higher resolution, or re-import the model as a mesh instead of a body object.

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s