SolidWorks to Unreal Studio to VR/AR Advice and Features

I’m working on an project on the side to visualize some complex CNC machine models in Unreal Studio in VR. I have a HTC Vive and Pimax 5K+. The model I’m working with currently has approximately 4 million polygons, but could be higher. The models are created in SolidWorks. They include lots of aluminium extrusion, lots of beveled edges, parts with holes in them, all manner of screws and fasteners of various kinds and levels of simplicity. Anyway, you get it, perhaps your typical complex SolidWorks model with a hierarchy, lots of unique and duplicate parts.

I’m not the SolidWorks guy, but he was kind enough to export various model formats for me to experiment importing with. For example, a step file, various sldasm, and slprt files. Also a fbx, glb, and gltf formats. I had the greatest success with the STEP model import, but I’d love to see some time saving features there too.

The FBX was important to me because I have polygon reduction tool called polygon cruncher. It’s not the greatest and a little awkward but does a decent job. However, this turns out to be a dead end, since even if I use it or don’t use it, the fbx import into Unreal Studio doesn’t appear to do any duplicate mesh or material collapsing at all and ends up trying to compile thousands of shaders.

The STEP file was a different story and pulled into Unreal Studio without mesh or material duplication. Naturally the materials were all just colors, but I can live with replacing those as long as they are maintained upon reimporting changes. However, naturally the biggest thing is that there is no polygon reduction by default, so I would have to do all this manually on every mesh in my model, and there are lots of them.

Ideally I’d like to see more automated intelligent options. For example, a) automatic polygon reduction and re-tessellation or re-topology of meshes to remove inefficiencies and be better prepared for LOD generation, b) automatic removal or hidden visibility of 100% occluded meshes, c) automatic lod generation, d) ability to close holes on meshes at automatic lod distances and bake holes as materials instead.

I feel lots of these things are perhaps already possible and I’m just missing them because I’ve been out of the Unreal Engine workflow for far too long.

This is kind of minor too but the Product Viewer should really have a dedicated Product Viewer VR template. It looks like the current template uses deferred and temporal AA and likely lots of other not so ideal VR defaults. Its nice that you can switch easily and view in both modes, but having an additional dedicated template that was created to optimize for VR would be great.

I also tinkered with Twin motion and I have to say that I felt the performance in there was better than in Unreal Studio, but didn’t appear there was anyway to export or bridge back into Unreal Studio or Unreal Engine at all. I could actually have stayed with Twin Motion perhaps but the scale was way off in VR. Perhaps there is an option to rescale the whole model somewhere or specify it on import that I missed?

Really all this is a just a starting point. I’d like to end up making a product configurator for trade shows or as crazy as it sounds on a web page. I’d also like to be able to run this on various other VR devices and make an AR viewer for an iPad or tablet. However, I’m at the very beginning and all this depends on achieving huge performance gains on a complex model like this, while at the same time supporting SolidWorks model changes as they happen periodically.

I’d love to hear from other people who are going through the same kind of project from SolidWorks, what tools and workflow you are using, and how you are handling your complex model.

Generally though, I’d love to get some advice or hope that this post is read by people at Unreal, and more of these intelligent import features can be added to future versions.

Thanks for listening my friends.

All the best.

You should be able to import from Solidworks to UE4 directly using Datasmith.

https://docs.unrealengine.com/en-US/Studio/Datasmith/SupportedSoftwareAndFileTypes/index.html

I haven’t used SolidWorks in years (it was far before I started with Unreal), So I can’t share my experiences with you on it, but I’d recommend starting a trial of SolidWorks using the link below:

Info on Datasmith here: https://docs.unrealengine.com/en-US/Studio/Datasmith/index.html

Thanks Danny. Sorry I should have mentioned above that when I said I pulled the STEP file into Unreal Studio, it was using the Datasmith import. This is the reason it got imported so well in my mind because clearly they have put in a lot of effort to more intelligently import meshes and materials. I would like them to go further with some of the features mentioned above, but I was curious what other people had experienced and what their workflow was. Thanks for replying man. All the best

Hello,
thank you for sharing your experience.

Usually we recommend going with the native CAD file as you can control their tessellation parameters when importing inside Unreal.
But some clients are happy to use 3rd party softwares to do their data prep and then just import fbx inside UE.

Polygon reduction: if you import native CAD file you can tune tessellation parameters to limit number of triangles generated. Then you can use LOD system and force Unreal to only use low resolution models. Keep in mind that 4 millions of triangles is not an issue for modern realtime engine, you might want to optimize the scene first: number of actors and materials.

Batching: through python or blueprint you can batch your data preparation. You could trigger LOD generation, merge of actors, proxyLoD, material switching, scene organisation, spawning actors, defeaturing, jacketing.
https://docs.unrealengine.com/en-US/…ion/index.html

If you want to simplify geometry you can use the defeaturing (https://docs.unrealengine.com/en-US/…ing/index.html) tool and to remove hidden geometry you can use jacketing tool (https://docs.unrealengine.com/en-US/…ing/index.html). Booth tool can be scripted with python/blueprint

The proxyLoD tool do mesh simplification and baking of material inside textures. It is not as clean and detailed as if you did it in 3dsMax (different purpose) but it can be enough for your use case https://www.unrealengine.com/en-US/t…proxy-lod-tool

Twinmotion is a packaged unreal application, this is why it is both faster and more limited than the editor. There is no bridge yet from Twinmotion to Unreal.

Our workflow now is CAD to Rhino to Max to Unreal.

The reason is that Rhino has proven to be the ultimate mesh generation and error checking tool for two major reasons: You can visualize the backfacing surfaces easily with a color (tools - options - view - display modes - shaded - backface settings) and then flip them if necessary and join them, and then on export, you get near real-time mesh previews with settings that neither Datasmith or Max currently has (minimum edge length and triangle aspect ratio, for example).

Rhino also proved to have surprisingly robust surface thickening if you need that (Solidworks may or may not work better, but if one fails, you can use the other).

Rhino sadly has quite a bad UI when it comes to handling large assemblies (ie, almost no UI) but for small to medium complex assemblies where surface quality is important, that’s now our main tool.

Thank you for all the advice. I’m only able to work on this on and off, so I hope you don’t mind me updating this thread with more questions.

I’ve started playing around with the LOD settings for things like fasteners (screw, bolts etc) with a view to establishing some kind of LOD standard that I can apply.

Most of the fasteners even at the furthest visible distance still need to retain somewhat of a circular head shape, but as you can imagine the LOD reduction tends to screw up the top most edge. Ideally at some point I’d simply like to replace an LOD or have an LOD that kicks in at a certain distance that is essentially a billboard of the head shape (ie. circle, hexagon) and where its still has the correct orientation to the surface it is on and not the camera.

Being a noob here. Would I have to create some kind of blueprint that checks how far away it is from the camera and then swap out the static mesh or is there something built in that could do this? What would be be the best approach here and how would I set that up?

I know the proxyLOD tool was also mentioned above and I will look into that, but is that the tool for the job? If so, how would I make the switch or is it automatic?

I’m probably going overkill here trying to squeeze down to a minimum amount of polygons, but this is for VR so I’m trying to do that from the start with some kind of workflow.

There will end up only being certain parts of the model that need to move if that makes a difference, but its important that all components look highly detailed close up.

Thanks again.

I was thinking I may not have been clear about what I was hoping for. Let’s say I have 4 LODs configured the way I want them, but instead of using the 4th LOD, I’d like to have it be a billboard or perhaps an “imposter” oriented correctly. Is this sort of thing built in?

Alternatively, let’s say I want to the 4th LOD to be my own static mesh that I know retains the shape I want at the furthest distance, would unreal do this swap for me as part of the LOD switching or would have to have my own blueprint that hooks into the LOD switching somehow and when I see the 4th LOD being triggered, I simply do some kind of static mesh switch. I guess I’d also need to switch back to the original mesh too at the correct LOD as I got closer. Is this sort of thing built in? If not, are there any examples or add-ons that do this?

Thanks for all the advice.