Our current workflow

Maybe this is helpful to others or to the Unreal Studio team?

Feel free to comment with any improvements, suggestions, best practices, or different experiences you might have!

(Note: I don’t claim this is a good or correct or model workflow - just claiming its our current one)

  1. we are using Revit but only for the very basic floorplan - not even using the windows, just the “hole in the wall” window etc.
  2. exporting to fbx and manually cleaning the mesh and adding details in Max and/or Blender
  3. assembling the scene in Max, materials are just base color textures
  4. using Datasmith to export meshes and basic materials to Unreal (no lights or cameras)
  5. In Unreal we take convert the exported materials to be instances of our base materials and swap out/delete the imported vray materials.
  6. Next we add the SunPosition plugin and set that up.
  7. We add lights and assign ies profiles,
  8. We go around and add all our interaction components to the imported mesh actors (ie paint change, light switches, doors, etc) and set their mobility based on their interaction type.
  9. Do build and test (aka goto step 2)

Some notes:

  • Overall we are very happy with this Unreal Studio tools, features, etc. and especially the current licensing terms.

  • We are mostly coming from a game development background rather than an architecture background and have C++ developers (myself included) and 3D modelers on staff

  • Unreal Studio is allowing us to grow into a new business area and we look forward to giving back to the community. As we develop our platform we will be releasing various models, code snippets, tutorials, etc under the CC0 (public domain) license.

  • Doing Revit->Unreal seems mostly useful if you either have a very large library of Revit meshes or your needs are very typical/generic. For our use its much easier to convey the basic floorplan using a Revit model and details using photos or artwork and then do the details in a mesh modeling program.

  • If the Revit->Unreal meshes are similar to the Revit->FBX meshes expect non-optimal geometry. Not totally insane, but definately not great.

  • When we import from Revit->Max/Blender we basically have to replace everything unless the revit model had all walls broken up by room due to our repainting feature expecting each room or each wall to be a separate mesh.

  • having a Revit import of the basic floorplan is a huge help with ensuring correct dimensions and ensuring things like window sil height are included. With just a 2d floorplan details like this are often missed, but with a Revit 3d floorplan we can ensure this info has been recorded.

  • Revit LT, I think, is probably enough features for what we are doing. I don’t know if it supports the datasmith plugin but I do think it supports FBX export so could be used in our current Revit->Max/Blender->UE4 workflow

  • If we use Blender we have to export from Blender to FBX, import that into Max and then use Datasmith from there.

  • I would LOVE a Cycles or Eevee (Blender rendering engines) material to UE4 material converter.

  • If you are going for super nice (and efficient) materials it seems better to use a Substance->UE4 worflow rather than a Substance->vray->UE4 workflow - espeically if you make heavy use of material instances and dynamic material instances (like we do). Better just to set a basic texture in Max so the person doing the UE4 import knows which materials go where, but swap them out in UE4.

  • I look forward to improvements in the sun positioning plugin! <3

  • We will be soon looking into if the python scripting can automate some of this process - for example swapping vray imported materials with ue4 materials based on their name and setting up our interaction components based on the names of imported meshes.

  • We have not figured out a good workflow for modifying specific already imported meshes in Max and reimporting. Because we modify almost everything after import there is a sense that reimporting the Datasmith file will overwrite our changes on everything so we are doing a new datamsith export with only the changed meshes, importing that into a different folder, then manually swapping out the meshes for the new imported ones.

  • I noticed today that Instanced meshes from Max say (Instanced) in UE4 - is this accurate and its actually an instanced mesh in UE4? If so that is very very cool.

Great post. I’m still very new to Unreal Studio/Datasmith, but wanted to comment:

Material Swap
Here’s a handy Python script that will allow you to easily swap the base material that’s been imported with a material of your own creation. NOTE: Swapping occurs only at a base level and NOT at the instance level. Eventually I would assume that Unreal Studio will have something built-in that can do all of this, but as of right now this is one of the only options. Swapping for a Substance Material is also a big unknown - other than a manual swap, of course.

https://forums.unrealengine.com/development-discussion/python-scripting/1562733-replace-material-python-script

Can you elaborate on your interaction components? Haven’t dived into that too deeply yet, but would appreciate any resource material/tutorials you’ve come across.

Tnx!

> Can you elaborate on your interaction components?

The big thing we are doing vs. some of the archviz platforms in the UE Marketplace is using ActorComponents for our functionality instead of Actors. This means after a Datasmith import we can just add the correct component to an object (ie adding the Lightswitch component to a lightswitch object in the scene) rather than having to add our Actor and reparent the imported mesh or similar things.

Basically we have ActorComponent base class written in C++ It handles dynamically changing materials (including scaling and rotating) and contains lists of recommended materials, the material that should be applied at application launch, and other material related options (since these materials are dynamically created/modified at runtime). It also has methods for handling highlighting objects in the scene, intended to be called by subclasses. These material things are optional though - it is perfectly happy to leave a build-time material applied if a runtime override has not been set.

From there we subclass this in Blueprints, there is a basic Blueprints subclass that adds virtual methods/events for mouse/keyboard/etc. input events.

Then we subclass this into things like “Lightswitch” which just takes an array of Lights, overrides BeginUserInteraction and toggles all the attached lights. (and then AnimatedLightSwitch that also moves the mesh to match the light state)

So far we have only coded some very common object interactions, like lightswitches, fans, changing radio stations but we are looking to the Zen Garden demo for inspiration for future interactions. Beyond that we also allow setting arbitrary materials on a lot of things and even modifying the materials parameters at runtime via UI and allow painting certain surfaces (like drywall) based on major paint brand colors (which we are hoping fingers crossed to get certified as accurate).

I have experience in making level editors and sandbox games though - so for me I approach making this platform in a similar way. Of course unlike my last level editor I don’t plan to integrate a Lua interpreter into this one haha

EDIT: that little python snippet helps a lot! I’m glad to know the python in UE is up to this sort of thing, I definately can’t wait to see what is possible with it!