BIM VR Take 1:

After a lot of research I ended up using a combination of Revit, 3DS Max and Unity (with Google VR for Unity SDK) to produce a VR model for Android / iOS / Windows / Linux platforms of a BIM model.

The exercise was quite frustrating at times, especially getting the camera / person to move automatically without the usual controls (using a modified C# script of the standard assets). Google Cardboard provides only one button on the headset, and most VR devices that makes use of smart-phones are the same. This presents quite a challenge in allowing the viewer to navigate a model with multiple levels, but I'm getting there. Currently, using the single button on the Cardboard headset allows the viewer to move in the directions he / she is looking, or to stop moving. I'm thinking of adding in-model menu items that will allow "elevation teleporting" or something of the sort, in order to get access to elevated areas of the model (especially when working with multiple story buildings).

I also need to work a bit on better building material application and maybe some door open/closing animations & triggers, but for now I feel quite happy with the initial result. You are welcome to test my sample model out for yourself on Android (updated: Added some materials to building):

Soon after all this research and effort, I started to look into Autodesk Stingray, and I must say, it looks very promising, and quite cheap (not as cheap as the free Unity I was using) at AU$ 105 per quarter or AU$340 per annum:

and the promo video:


I'm planning on doing a more photo-realistic model for the next exercise, and to incorporate a bit of trigger-animated objects, but in the end - what a lot of fun!


BIM VR Take 2:

Since my previous post on VR for BIM using Unity 3D with the Google VR SDK, quite a lot has happened in terms of my workflow development to produce these virtual models. I had to develop, modify and borrow a couple of C# & Java scripts (thanks to those who made contributions) to enable interactive model exploration, teleporting to predefined locations and jumping to other scenes in the project. This was not easy, but now that the workflow is in place, I can use it as a template for future projects of the same kind.

This time 'round I decided to use the Autodesk Infraworks 360 Model Builder tool to generate the ground data, roads, pathways, railways, water areas and surrounding buildings, which can be exported as FBX models afterwards. This proved efficient at first, but later I realised that vast resources are required to run any decent size terrain of this source on a mobile phone. So I had to split the export from Infraworks to export ground data and building separately. I also removed smaller buildings & irrelevant data from the Infraworks model to try and reduce the final size & complexity of the mesh that will ultimately be generated. I then processed these FBX models in 3DS MAX for further optimisation, and finally used the 3DS Max Game Exporter Extension to export the models (again as FBX):

The main model of the project, which is a Revit model, was also exported from Revit to 3DS MAX using FBX, simplified, optimised and again exported using the same 3DS Max Game Exporter Extension. I created another "simplified" version of the entire building using 3DS MAX and "Box" elements, wrapped with a texture of the building which as obtained by rendering each elevation of the building back in Revit.

The detailed Revit model:

Simplified "Box" model in 3DS MAX:

The result of the "Box" model in Unity:

The reason for the simplified "Box" model is to save resources when trying to navigate the model. I found that the detailed Revit (exported to FBX) was way to "heavy" to use in real-time.

Once I had all of the required geometry, I placed them into 2 separate scenes. The first scene would start where the viewer is placed outside of the proposed building in a street view, and can then walk towards the building entrance, and after reaching a certain area around the building, will then be "teleported" to another scene which hosts the detailed version of the Revit model, but only for 3 of the 18 floors:

Separate floors in Revit:

The second scene in Unity:

As you can see from the image above, only the first 2 floors, and then the topmost floors are in the second scene model. This is to keep resource requirements down, and since the viewer is now inside the building, he / she will never know the difference. I then placed collider objects in the model to transport / teleport the viewer from location to location:

The result is a reasonably responsive virtual environment, with realistic environmental / surrounding views both inside and towards the outside of the apartments. The compiled Android package was just under 100MB, and a serious processing powered phone was required to navigate the model with ease (Samsung Galaxy S6 was used with this model, in a Google Cardboard V2.0 headset).

There is definitely a benefit in doing this, even if it is just for learning & fun. Immediately after showing the previous "test" model around the office, I was asked to develop a VR model for an active project to impress our clients, and to demonstrate our capabilities. Online resources for Unity 5+ with Google VR SDK 0.8+ are still very limited (samples scripts for versions prior to Google VR SDK 0.8 will usually not work), but you'll find a couple of tutorials on YouTube and from the Unity sites.

This has truly been a rewarding experience, and I am definitely not done with this technology. From here I would like to move onto a better VR headset, for mobile phones at this stage, but definitely look at PC driven VR models and headsets for more resource hungry & realistic models.