Hi everyone !
This post could belong to the Archviz and VR section aswell, but is also about rendering optimization in general.
So, we have been trying to solve an issue since a few months already, but could not really find a suitable solution. Lots of text incoming, you’ve been warned ! (I made the important bits in bold for visibility)
To put it simply, we are working on a UE4 based solution to review large BIM projects made with Autodesk Revit in Virtual Reality.
Our projects are fully interactable (ie doors, stationary lights, object Metadata, etc.) with a fully dynamic Day and Night cycle.
The common workflow would be to export an FBX file from Revit, modify it accordingly in 3dsMax by merging the meshes for better performance and Unwrapping them, and finally import the resulting meshes in UE4.
The problem is, we can’t merge our meshes, since each Revit/StaticMesh object must be distinguishable from the others (and is linked to a database) : when you have more than 10.000 of these items, performance is a huge problem for VR !
And since each object is unique, we can’t use instancing nor mesh batching or merging methods.
We tried to tweak the HZBOcclusion Culling used by default, but it seems that the engine can’t really handle well that much objects dynamically.
Another method I tried is to Precompute Visibility of the scene and use that for scene culling, but although the performance si better, it is still nowhere enough usable in VR.
Now our workflow for lighting might not be the best for performance (Static baked Skylight with AO for ambient lighting + Movable Directional Light for the sun + Stationary for interactable lights and Static for the rest) but the results are visually convincing and being able to change the time on the fly is a no brainer for demonstrations.
Anyways, in a few lines that’s where we are right now. Things we have in mind that remain to explore are LODs (but the meshes aren’t really polycount heavy, there’s just a lot of them), sublevels (might require too much work for each project), creating merged chunks of the project in 3ds max and use them for distant rendering instead of individual objects (might not work well with culling) and faking individual objects by using only their colliders (closer to the common archviz workflow, sounds like a good idea but light baking and lightmap UVs are going to be monstruous).
We also had some very interesting results in performance by using the Nvidia’s VRworks branch of UE4 (but we moved to UE4.15, and their branch is 4.14 and has not been updated yet).
What are your thoughts on this matter ?
Antoine aka LegendreVR
EDIT : The hardware we currently use is a GTX1080, a E5-1650v4 Xeon @ 3.60Ghz and 32Go of memory.