Here’s a quick dump of everything I’ve sussed out doing the same task;
I use Navisworks Manage to convert the CAD files, because it can import many formats (eg IFC), and then export an FBX file.
The resulting FBX files can be imported directly into UE4, but the results will not be good. This is because Navisworks exports all currently visible objects to a single file. If your project is too big, it will probably crash during the export. Even if it succeeds, the exported file could contain thousands of parts, which poses a problem for UE4;
- If you import the file as “combined mesh”, your performance will tank because the mesh is so huge and nothing can be culled.
- If you import the file as separate meshes, your performance will tank because there are too many meshes for it to handle.
So to fix, you need to group the parts up into manageable chunks, which you can then import as single meshes.
You can do this in Navisworks by only having small sections visible as you export. Unfortunately, there is no automatic method to do this, but you can write your own .NET plugin to do the work for you.
Alternatively, you can bring the files into 3dsmax and sort the parts out there. You can merge groups of meshes into individual meshes, and then import 1 file containing those large meshes, OR you can export many files containing many parts, and import those files as combined meshes. Maxscript can make these tasks easy, but 3dsmax will bog down if you bring in too many files.
The end result needs to be hundreds of meshes, each containing 10’s of parts.
There is yet another problem though. When using simple renderer in Navisworks (ie plain colors), the FBX file has 1 “material” per part, even if the “material” is the same color. So this also destroys UE4 performance, because if you make 1 large mesh consisting of 20 parts, the mesh will then have 20 materials, and this is a problem. So you need to sort these materials out too. You can write a maxscript do this.
Another thing to consider is UV maps. An FBX exported whilst using the simple renderer does not have UV maps, which means a lot of textures you download/try will not work. You can generate these UV maps in 3dsmax. Or, you can use the advanced renderer in Navisworks, and add actual materials to all your parts. I’ve not used this method in production, but it seems if you add a textured material to a part in Navisworks, it will then generate UV maps, and export them. Who knows what the quality of those UV maps will be though?!
Alternatively, you can just make materials in UE4 that do not rely upon UV maps.
Further to this, if you intend to use static/baked lighting, then your parts must have UV maps, because UE4 uses the imported material/texture UV map to generate a UV map for lighting. So if you don’t import a UV map, it won’t be able to generate a lightmap, and you will get a lot of errors and no shadows. You can of course switch to dynamic lighting, but this might decrease your performance too much for VR.
Another thing to consider is the actor pivot, and the actor location. Using the regular FBX importer, you can have the actor import to the correct location in world, but the pivot of every mesh will likely be at 0,0,0, which sometimes isn’t useful. To import the pivot, you need to use the scene importer, but this has it’s own pro’s/con’s.
Another thing to consider is mesh instancing. AFAIK Navisworks does nothing to handle this, so you need to do it manually in 3dsmax or similar.
That’s all I can think of from the top of my head. There are many hurdles to overcome, but it is possible. There is also the Datasmith plugin you could checkout (I have not). Good luck!