CAVE VR: Nuclear Reactor-Failure-Case

25 Oct 2019 | Sujay


Header Image

(UPDATE)

I got a chance to talk about this project in Unite India 2018!!!

After spending quite a lot of time on a bunch of VR headsets (Oculus, GearVR, Vive and Samsung Odyssey), I finally got to work on a different kind of VR setup. The CAVE VR setup felt like a different experience.

The purpose of the project was to demonstrate the failure cases that can cause a nuclear reactor meltdown and the contingency measures that are implemented to avoid a catastrophe. The experience was to be shown in the CAVE setup. My task was to build the VR experience in Unity. The team onsite was handling the deployment and hence I didn’t really have to bother about hardware and deployment specific problems.

Over a period of 8 weeks, I worked on building the interactive experience, including gameplay, scene development, shader development, lighting, programming, UI, optimizing, profiling, and testing. I collaborated with several 3D artists who developed the necessary assets, while my mentor and colleague Vivek provided valuable feedback throughout the development process.

During the development of this project, I implemented several interesting solutions to overcome technical challenges:

Procedural Pipe Generation:

One requirement was to create dynamic pipes that connect two components over time. I developed a linear pipe system with a two-step process: first defining the pipe’s path points, then dynamically generating the pipe geometry. This allowed for real-time pipe creation during the simulation.

GitHub Repository - Procedural Pipes Unity

Mesh Combiner:

This was a editor script that can combine multiple small game objects into a single gameobject. Goal was to reduce the drawcalls. The limitation was that i could only combine the objects that had same materials. This is similar to static batching. But what happens when these Gameobjects (with same materials) are spread across a large area? Then we will have 1 draw call, but that drawcall will be a very expensive one with way too many polygons. To solve this, I combined the meshes that are in one area into a single mesh. I made this script to combine similar objects that are nearby into a single mesh. That way I could find a good middleground between occlusion culling and static batching and get good performance. You can checkout this script here.

Mesh Combiner.cs

Inner Side Generator:

This was an editor script that would flip the normals of an existing asset and generate an inner side of an asset. This was just a hack for me to generate interiors of the facility, without having to go through the whole asset creation process. Here is the script.

CreateInnerSide.cs