Revit datasmith exporter wishlist

Thanks, send it to

pierrefelix.breton@epicgames.com

Thanks! I just hope it doesn’t prove too problematic :slight_smile:

While we are on the subject of requests, would it also be possible to capture an object’s Family as well, so that that information is available inside of Unreal? You capture it’s Type, (which is used to name the Static Mesh in the content browser that an instance is derived from), and it’s Category, (Which is mapped to a layer-per-category inside of Unreal), but not the Family itself. Your documentation team have made a quick and handy demonstration of accessing Datasmith metadata values at Using Datasmith Metadata in Unreal Engine | Unreal Engine 5.3 Documentation , but I can not find any object attribute or metadata field to interrogate to get that family name, (and thus, like the example, show the Family + Type information on click). This is without the various editior scripting you can apply to objects based on their family, etc.

You are right. It seems that those properties are available in a different code path in the api and had been forgotten while looping through the properties. I see most of the non empty properties in the datasmith attribute object, but family and type aren’t there. That should be easily fixed. Thanks for bringing to our attention.

https://www.screencast.com/t/OMH30YggQ

As i noticed recently there is something called InstancedStaticMeshComponent in UE and also Revit has a familytype system, seems like they have similarities. UE uses instanced mesh for performance increase so while importing from revit familytypes should come as InstancedStaticMeshComponent by default. This will allow whole scene to perform better. Inorder to execute this operation every same family type in revit will come UE as one InstancedStaticMeshComponent. Best example for this is doors, when importing doors to scene they are generally exact same door , only a few type but a same type will have a lot of clone in a big project.

This isn’t alway true though, sometimes dimensions of a family are driven by instance parameters. So then you will end up with the same type but different geometry and thus a different mesh.

while importing codes can detech if every familytype is clone or not so that clone items can be converted to InstancedStaticMeshComponent, it is obvious if meshes are not exact same they cant be instanced

I used QQ mailbox to send you the email, have you received?

yes thank you. We’re looking at it. For some reason, when open in an English version, it didn’t crash. So we’re looking at trying in other languages

importing whole scene sometimes necessary, if i changed alot of thing and changed families even names i have to import whole scene. In a big project adding one by one or upgrading meshes individualy is not a solution.
Datasmith import process is trying to find what changed and add it to scene but sometimes guesses true sometimes not, it like lottery, you can t know what will come from that import, as my experience i can say reimport works %70 successfull, so i dont delete old map and import , that will cause to lose all settings belong to that meshes, families likely can not be diagnosed by import process well, % 80 of families comes again on itself. right now i reimport whole scene and find double meshes and delete but this is not very practical, there should be somthing like link, when having a link from revit to 3dsmax fbx works perfectly it updates every mesh so well, so i expect similar import process or a better solution.Linking a file and override setting should be solution, if revit file has new family revision than older ones will be gone from source file so UE will understand that they gone it will remove them and import new mesh, if there is no change on previous meshes so it will not import them, if logic is solved problem will be fixed.

My 10 cents, some of these are repeats so +1 if they are, I like it overall and it’s great to see progress but…

  1. It would be good if we could choose a Revit co-ordinate system on export to help with alignment.

  2. It would be good if linked models exported along with their host for the same reason as 1).

  3. It would be good if multiple 3d views could be exported and imported in one hit. The reason for this is a lot of Revit users already use Dynamo to create views and organise a scene based on object parameters and I would argue that they would find it easier to do this on the Revit side of the export as opposed to using Python on the more limited data that makes it across to UE4. Working in this way tends to create lots of views which would be a chore to export manually.

  4. I’ve found almost every plug-in for Revit does this first time round but instance parameters are not always what the user wants. We’d need both instance and family parameters and on top of that category, family and type names of each element should be included. 9 times out of 10 a user will want to know that an object is a beam and it’s x size or similar so having this data accessed within all the other metadata rather than scattered around as object names and layers would be useful.

  5. I’d love to see some basic tutorials on Python scripting in editor, changing multiple materials, selecting objects by metadata, that sort of thing.

  6. With no sensible UVing options in Revit as soon as an object doesn’t lightmap well you hit a bit of a dead-end, forced into Max or Maya, with the upgrades to the poly tools in UE4 it would be useful to be able to slice objects up in UE4 and then let Datasmith have another stab at the lightmap. This would also help for 4D.

Agreed, some way to export the whole project (not what is in the current view), and be able to change the views in the datasmith asset would be pretty nice !
We work a lot with phasing, which is basically “4D”, and could be done a lot faster than importing another view (with a lot of duplicate assets…) and re-optimize the datasmith import.
I worked on something similar pre datasmith, with a custom Dynamobim script that exported importable data tables with the asset IDs visible in the current view. It worked well, but was a bit too much steps for our taste.

As for 1/2, the team said a few days ago they will work on implementing linked files in the export (hopefully this will not be too much work, as it is quite an important part of Revit projects and its a pita to manually replace individual imports :stuck_out_tongue: )

Regarding 6, some kind of voxelization, or mesh splitting internally would be very useful indeed, some meshes we have like very long beams, walls and the likes, come out with a stretched UV and wasted UVmap space… Surely this kind of sample isn’t really good for lightmass :smiley:

https://i.imgur.com/AABBbaf.png

It would be nice if we could choose which parameters to export. With the IFC exporter for instance you can create a schedule for this and then only export the parameters that are in that schedule. In the same way it would be nice to have the possibility to create a schedule with ‘Unreal’ in its name and let the exporter export only the parameters that are in that schedule. That way the user can have control over the parameters to export. Otherwise you will end up with so much metadata of which you will maybe only use small percentage of.

You will have to forgive me here, but I don’t see why sending over all the data about a given object as a default, (Category, Instance and Family), would be a bad thing? All that data is indeed attached to the object, as it is applicable, and given that it is set up as a key-value pair, very swift to actually query by Unreal. This way if something has changed, you don’t have to worry about making sure it is captured during export. Given that we are responsible for setting up the widgets and code to determine what is actually displayed to someone using a built Unreal model, we can choose what data is actually displayed, so there should be little problem of showing unwanted information.

That, and if it should suddenly change later on that you have to show some information that you had not originally intended to show, it’s far easier to fix :wink:

You might be right there, as IFC exports are often sent to third parties to work with and with UE4 this is not so often the case. The need for a streamlined set of parameters is not that big in that regard. I do think it would be a nice option to have though: to be able to filter out only the parameters you want. Things in Revit can get really messy (users can add and name parameters to there liking) and there might actually be parameters with nearly identical names, so it can get hard to figure out which one to use. On top of that there can be calculated family parameters that are basically of no interest and only serve to drive geometry in a family.
So just saying it would be nice to have it as an option.

Hi!

The revit plugin has been updated. It should fix most instabilities around crashes, random missing objects.

We have started to support revit links, but we still have some problems with objects that may have random transforms that we are investigating.

We also started to work on the following improvements (no formal delivery date announced here), but you’ll get an idea of what we are working on:

  • Objects from linked models are incorrectly positioned
  • Category, FamillyType and FamillyName as Datasmith Metadata
  • Name Objects in Outliner with Category.Family.Type nomenclature
  • Hierarchy created from Levels and Linked models adjustments
  • Top Rails have no parents
  • Categorize Metata by Instance and Type
  • Revit element instance guids as Actor tags
  • Some assets are duplicated when they should be instantiated
  • Camera Exported with the wrong caption
  • Improve the tessellation of Revit geometry
  • UVs are inverted on Y axis
  • Create a Batch Exporter for Automated Tests
  • Export Calculated Elements as MetaData
  • Export Project Base Point as Actor with Metadata
  • Export Site Location as Actor with Metadata
  • Place Pivot on Starting Points for Walls and Railings
  • Straighten Lightmap UVs for Revit geometry
  • Suffix View name to Datasmith suggested filename
  • Support Origin as Pivot Location for Families
  • Levels symbols export with 3d geometry
  • Allow exporting multiple views in a batch
  • Export Schedules to Unreal as Unreal Datatables
  • Export Photometric Light Shape
  • Export Photometric Light Distribution
  • Export Photometric Light Intensity & Color

That is fantastic news; doubly so with that list of extra things that are being worked on!

The next phase of improvements will be posted in approximately 2 or 3 weeks from now. We aim to deliver small incremental updates regularly.

That list looks very promising. Thanks for the update and keeping us up to date on possible upcoming features.

I have tried the rac_basic_sample_project revit data (revit sample data) , and found that collision of static mesh doesn’t work as is, and it keeps falling if I hit Play to test. I checked each mesh, and it seems all of static mesh from Revit has collision mesh already, but I needed to create collision explicitly in UE4 again in order to keep the camera on a floor when hitting Play.
Is this by design? or am I doing something wrong?

Ah, I see, I used Datasmith -> Multi User Viewer and Product Viewer.
Those project’s Project Settings -> Physics -> Simulation -> Default Shape Complexity is set to “Simple And Complex” by default.
But in order to make collision works properly for Revit data, I needed to switch to “Use Complex Collision as Simple”.