Programming in Virtual Reality
As virtual reality becomes evermore prominent in the modern day, we aim to investigate its exciting limits and prove just what is and may be possible as VR continues to grow. Incorporating mathematics into our project, one of our goals was to create an apparent four-dimensional Klein Bottle in virtual reality, using Unity 3D, Steam VR and the HTC Vive to make this possible.Introduction
Our report aims to investigate the use of virtual reality, using a cross-platform game engine to explore and test some of the ideas we had. We chose to undertake this project as virtual reality is such an exciting prospect for the world in the future, in addition to this we tried to incorporate our love for mathematics into this virtual world. Initially our main objective for the project was to model and create a Klein Bottle, where it could visualised in virtual reality. We hoped that it would be possible to use a method of movement to walk over the surface. The surface would be modelled using an external program outside of Unity, called Blender and then imported. One of the main appeals of VR is the movement around seemingly large spaces, and so we would also aim to implement different modes of movement, such as touch-pad walking and controller teleportation over the three-dimensional representation of the 4D object.
A Klein Bottle and a Mobius Strip have an Euler characteristic 0. [5] As stated if you were to walk along the Klein Bottle you would never encounter a boundary this is due to the fact that a Klein bottle is a four dimensional object meaning there are no intersections. In a 3D representation of a Klein bottle there is an intersection which is why one appears in our model.Methodology
Steam VR is a virtual reality environment, with a headset made jointly by HTC called the 'Vive'. The Vive itself only became commercially available in April 2016. In contrast to its largest competitor, the Oculus Rift, the Vive aimed to reduce motion sickness by incorporating even more interactivity to simulate a more 'real' experience. The headset consists of two LCD screens [1080 x 1200 resolution] behind the lenses. Steam VR was the ideal system for our project as the movement and data from the base stations and headset tracking system could be interpreted by Unity via the Steam VR plugin.
After deciding that we wanted to create our own virtual environment, it was apparent that we needed to create a method of movement and interaction with the world. Whilst the Vive could track small movements relative to the area enclosed by the base stations, this was not suffcient to move over larger distances, for example the Klein Bottle. Therefore we came to a conclusion that teleportation using pointers from the hand-held controllers would reduce motion-sickness, something experienced more prominently using touch-pad movement, as well as quicker and much more simple to use.
Whilst neither of us had any experience in using Unity or programming in C#, the language primarily used to code scripts in Unity, it was evident that we could not program these scripts manually. However during an attempt at learning this environment we found tutorials and pre-made scripts by the YouTube user: 'thestonefox' [7] which were compatible with Unity 3D. This included teleportation scripts using simple pointers. It also meant that we could copy these scripts across onto the controllers of the Vive, so that in a basic plane in virtual reality, we had a simple and suitable method of movement.
Teleportation is great and we had fully intended to use it, however using the scripts we had meant we couldn't teleport onto the surface of the Klein Bottle. Therefore we had to find a different movement system. We went with a simple flying script created by Unity 3D forum user Chillre. It's a very simple system, that at a basic level, provides as force in the direction you are looking allowing the user to fly. Another advantage is that flying provides more freedom to move about the environment and view the model from a variety of different angles not available by teleportation alone. We also decided to create a more interactable environment by using 'interactable object' scripts so that an object in the environment could be picked up, or even thrown as in Figure [2].
In order to create a Klein bottle for unity we had to use Blender, a program in which you can create complex 3D models. Using the equations shown in Figure [6], the program creates a 3D version of a Klein bottle. It is not quite perfect with the bottom being too much like an edge but it does look very good. After we created the model it was simple to import it into unity by saving the file in the assets folder. When imported we dropped it into the scene and thus have a 3D Klein bottle in unity. Images of the Klein Bottles are shown below in Unity and Blender.Conclusion
To conclude Virtual Reality is an impressive piece of technology due to the vast range of applications in the near future; yet is only beginning to emerge from its infancy, despite major developments over the last decade. Our project has been tough with multiple setbacks, including asset incompatibility and software updating. With the realisation that programming for this purpose was particularly challenging, especially being novices to begin with. We now hope to bring together all the work we have done to create a tour of the Klein Bottle in virtual reality.