Sneak Peek: Datasmith Python/Blueprint workflow

If you’re interested in the future of dataprep workflows with Unreal Engine, you might want to check this article out:

Well if no one else is, i’m partying hard.

Glad to hear. I think you have to want to get technical to appreciate what this will do for you. The fact that it will also be Blueprints for the visually-inclined, is a bonus (and hopefully less of a learning curve).


We have a working CAD - VR workflow right now which goes from Solidworks/Alias/Catia to 3D Studio Max/Keyshot to Unity and it’s rather quick but with a few shortcomings.

I just tried Unreal to see how it fares, and it was quite frankly a disaster:

  1. STEP/FBX internal object hierarchy tree not preserved, rather all objects come in flat, making for example, a 4000 part assembly file unworkable because they all lost their relative positions.
  2. Different objects using the same material names were not merged, and Unreal Engine began compiling 70 000 (!) shaders after import was done.
  3. The import itself was way to slow, literally 10x slower than Unity.

In order to push the state of the art forward, I would hope that Datasmith would perform the following tasks:

  1. Automatically detect identical objects and create instances from them (this would be great for nuts and bolts, for example).
  2. Preserve custom normals through all tesselation and surface repair operations (something very few, if any, programs today can do).
  3. Automatically unify normal directions across an entire object (especially troublesome when files come from Catia).
  4. Automatically stitch all surfaces on the leaf level of the hierarchy into one (multi material) object and create UV maps for texturing/light baking.

And note that 3D Studio Max is very bad a optimizing the STEP object hierarchy tree, choosing to split more surfaces into separate objects than what Keyshot or SAP 3D Visual Author does, so there’s room for Datasmith to be more intelligent there as well. Oh, and merging all surfaces into a single object isn’t an option, because we need to toggle things like car doors or foldable table positions on boats on and off (alternatively, being able to easily define a rotation axis for things like that would be really nice… it’s currently a bit of a hassle in Unity so we rarely use it).

Catia just got native VR support, but Alias and Solidworks still lack it, so we actually both use VR to visualize products for customers, but also internally in our design process, so a solution that speeds this up would be greatly appreciated (and not cost an arm and a leg which VRED does).

Thanks for the feedback eobet, this is exactly what we want to know about, where are the short-comings in our workflow because our single-minded goal is to make it the best. We need to work with you to get these issues resolved. While we are getting great feedback from the majority of the CAD import users (recent survey) who told us they are twice as productive without it, I’d rather do a deep dive with you and your issues to figure out improvements.


  • Why are you using STEP/FBX? If you have Solidworks, Catia we read those directly. STEP goes through Datasmith, FBX does not. The FBX importer is the same one in the game engine, so you benefit from nothing we’re doing.
  • If you’re using STEP, where did it come from? Not all STEP files are created equally. Perhaps there is something in your STEP file we need to get and see what is happening.
  • We don’t automatically merge same material names, because we’re not sure that is what you want in all cases. It’s a good question of whether this should be an option or you should just use the upcoming Python/Blueprint tools to do it exactly the way you want.
  • I think the normal workflow tools will release in v0.18, which will also be the Python release (mid-Jan). That will give you the combination of Python and dataprep tools to build your own solutions.
  • We need to get [USER=“888033”]Thomas Convard[/USER] and @pfbreton to look at your feedback.

Again, thanks for the feedback and I hope you can work with us to improve things for everyone.

The reason is that I began my Unreal testing before I found out about Datasmith, using the same converted files I import into Unity. I now signed up for the Datasmith beta, so if I get in, I’ll test again using that.

I tried with a STEP file originating from Catia in this case, but as I mentioned, we work with Alias and Solidworks too, so I’m interested in testing all three (seen no mention of Alias .wire files yet, though I guess people who can normally afford Alias usually also can afford VRED as well).

We normally use Keyshot for renders, and it has options for merging materials, but most importantly even if you do that, you later have the option to assign unique materials to each part (which without knowing Unreal details is either a trivial thing, or perhaps a tricky thing, if the object has been merged into a multi-material one…)

I thought you were posting on the beta forum, and that you had Datasmith, which is why I was surprised by your comments. We are about to do a bulk invite to 4,000 people to the beta as we’ve figured out how to do bulk invites (it used to be manual invites).

I’ve been trying out importing Revit models into Unreal Engine (through FBX/3ds max → datasmith). Now I want to do some batch editing on the materials that were imported and I thought Python would come in handy here. The thing is that the examples in the above article no longer seem to work and I can’t seem to find a reference guide for this anywhere. Looking at the C++ API reference doesn’t really help either as all the methods and variables seem to be different…
Is there any guide/tutorial or reference to get me up and running with python in combination with Datasmith?

Let us know if that helps!

I did find that article and using the python ‘help’ command is really great. For Revit coding though I can consult which is really easy to read. Ik was hoping there would be something for UnrealEngine’s python counterpart like this.
Right now I have copy pasted ‘dir(unreal)’ into a text file and I’m using the ‘help’ command on members that sound interesting and might be of help and work my way up from there. I was hoping there’s an easier way that I have yet to find.