2.8 is unusable with imported CAD files (~1mil polys, custom normals)

Anyone else working with converted CAD files here?

We import via Max and export as FBX to Blender, and end up with around a million polygons. The quirk with CAD conversions is that all faces get custom split normals.

Not sure that’s the issue, but whenever we try to move, say just around 60k faces at the same time, Blender 2.8 slows down to an unusable sub 1fps crawl.

I can replicate this 100% on two different machines (one with a 1080 xeon, and the other with a 1080ti i7, both 32gb ram). Anyone else?

No cad file but i was able to load a 4 millions model and i was able to move it around without too much of an issue but in Blender 2.79 it was sluggish ishhh!

To work with cad files, these have to be cleaned:

Cad files by nature, have always duplicated faces, and custom normals (cad geometry uses normal data for internal purposes, particularly ACIS data, this is reflected on any exported file). (Specially autodesk generated files), first is to clean them, since nvidia cards seems to have problems with any double face geometry anyways.

In 2.7 use this script:

import bpy

C = bpy.context
scene = C.scene

C.tool_settings.mesh_select_mode = (True, False, False)

for ob in C.selected_objects:
    if ob.type == 'MESH':
        scene.objects.active = ob #set active object
        bpy.ops.object.mode_set(mode='EDIT') #switch to edit mode
        bpy.ops.mesh.select_all(action='SELECT')
        bpy.ops.mesh.remove_doubles() #remove doubles
        bpy.ops.mesh.tris_convert_to_quads() #tris to quads
        bpy.ops.mesh.customdata_custom_splitnormals_clear() #remove custom normals
        bpy.ops.object.mode_set(mode='OBJECT') #switch to object mode

You will need Blender 2.79 to make it work (for now, i don’t care about 2.8, so i don’t experiment with it), import your cad file in 2.79, paste the script in the text editor, select all the geometry (in the 3d view, press “A”) and press the run script button. Depending on how big is your scene, you will need to wait some time (half an hour to one hour).

Save your file and open in 2.8x, should be workable. (at least, in 2.79 sure cleaned geometry is).

We know all about that, we’ve been doing this for years.

But I just double checked now. Performance is actually worse in 2.8 compared to 2.7.

2.7 manages about 1-2fps when moving 75k faces, which is (and feels) twice as good as 2.8 currently.

2.7 manages only about 20fps when rotating the model, though, while 2.8 does smooth 60.

EDIT: Whoops, I just checked, the file in question I was testing with just now comes from the site Hum3d.com and not CAD in this instance! So this is now doubly terrible!

report the problem on developer.blender.org and provide a file.

It may be related to a subdivision issue that’s already being discussed there, it seems.

Also, I just tested it in Max, and it also actually chugs on the same model and selection. About 5-10fps.

Seems if you have 700k tris in a mesh, and select 60k of them to translate, it takes some effort…

Not using custom normals in my models from our proprietary CAD-like software yields slightly better framerates in 2.8 in a blend with 23,000 objects and 1.699 million polygons.

edit: Oh yeah: Maya totally chokes on models like this, if you can even import them in a reasonable amount of time, you pretty much can’t navigate them.

I think the best approach to big CAD data is first, in the CAD application divide your models in layers. I usually deal with models with 2-3+ millions of faces and no big problems in my side. Testing with 2.8 neither have big problems.

Once divided in layers, export from CAD. If you have 2018 and earlier, you can do with fbxexport, 2019 and newer removed the export to fbx ability (autodesk wants to close that door to other apps), then import in Blender. Make sure objects are imported with layers as objects.

Your models should be far more manageable.

If you can, post the model and we can see what we can do. (or PM if you can’t share in public).

Be sure to not have many objects. I had a scene with 45000+ objects and 80 million polys, not fun. But when joined to about 20 objects it works much smoother. But avoid edit mode. If you need to modify the cad model, do it in cad. Blenders edit mode must be the slowest in the whole 3d industry. I come from Lightwave and I thought that was slow and then realised that its twice as fast as Blender.

I do this a lot (import from CAD and clean up). I highly recommend doing limited dissolve before you remove doubles. Reduces faces by 50-80% in my experience. So I always run this little script - taken from some helpful user (batFinger: https://blender.stackexchange.com/questions/69081/limited-dissolved-over-thousands-of-objects)

import bpy
import bmesh
from math import radians

context = bpy.context

distance = 0.0 # remove doubles tolerance.
if True: #def execute(self, context):

    meshes = [o.data for o in context.selected_objects
                      if o.type == 'MESH']

    bm = bmesh.new()

    for m in meshes:
        bm.from_mesh(m)
        bmesh.ops.dissolve_limit(bm, angle_limit=radians(1.7), verts=bm.verts, edges=bm.edges)
        bm.to_mesh(m)
        m.update()
        bm.clear()

    bm.free()

I don’t understand how you can possibly do this, at least not with machine parts that need to be exact.

Any manipulation of the topology instantly destroys the custom normals, and I’ve found no polygon modeling package that can smooth them out. No amount of weighted normals tweaking has been able to get me back to how it looks directly after import.