The below is a brief description of early development into Adventure Beyond Time VR, an exploration into creating a technically demanding virtual reality experience. Some of the technologies and design techniques employed are discussed.
Adventure Beyond Time, is a point-and-click puzzler which attempts to create an immersive and complex world. The location of the game, a mysterious island where time doesn’t obey the familiar rules, acts as a strong character in the narrative progression. Wanting to bring the story to a new audiance, we have begun moving the concept to the virtual reality format. The original point and click is available from Apple, Google Play, and Amazon for mobile devices. HTC Vive users are invited to download an executable of the project described in this article here (321MB download).
HardwareOur development machine utilizes an Asus GTX 1070 STRIX GPU with 8GB DDR5 RAM and a i7-4930K Hex-core CPU. This hardware configuration is comparable to the Xbox One (GPU: 8GB DDR3, CPU: AMD 8-core) and the PS4 (GPU: 8GB DDR5, CPU: dual 4-core modules). Only further testing on these and other console devices will provide truly accurate benchmarks.
Ultimately, it is our desire to optimize this product so that it might reach not only console and PC platforms, but also the next generation of mobile hardware market.
Currently, development of Adventure Beyond Time VR is expressly for the HTC Vive (above), chosen for it’s robust feature set. However, since ‘platform agnostic’ is a paradigm at Aircamp Games, extending compatibly to the Occulus Rift, Gear VR, Google Daydream, and, importantly, Sony VR is crucial.
In the below video, several interaction examples are visible. Most notably is the teleportation based movement system.
Teleportation has emerged as the preeminent way of traveling distances larger then the user’s physical play-space in VR. Although it is an evolving field, teleportation is favored as a ready solution to ‘VR sickness,’ which can occur when a user’s visual field moves independently of the inner ear, causing the body to believe it has been poisoned. There are some games which employ a tradition FPS WADS based movement system (notably Serious Sam), and still others which use a cockpit or other form of stationary object to ground the user. Given that the original Adventure Beyond Time is a leisurely game, involving cerebral puzzles and absorbing graphics, teleportation was chosen.
Terrain Mesh and Texture Creation
High-fidelity visuals and a consistent no-less 90 frames-per-second output where set as goals for this development iteration and informed the decisions made whiling bringing the world of Adventure Beyond Time to virtual reality.
To achieve the feeling of a rich environment, we began with a high density terrain mesh, in part assembled from the development assets created for the point-and-click version of Adventure Beyond Time.
To improve performance during game-play, we wanted take advantage of the occlusion-culling offered in the Unity 5 engine, whereby meshes which are either off camera or obscured from the players view by other in-game objects are excluded from the render projection draw call. Since this scene is a natural and open environment, we decided to tile the terrain mesh as shown below.
These meshes were then UV-mapped, and an extremely high-resolution texture file was created, shown below.
Subsequently, after an acceptable texture was achieved, each of terrain’s 50 tiles respective areas where cut out and placed into one 2048×2048 texture file (below) from which normal and specular maps where later derived.
Each of these tiles was exported from the 3D authoring environment as FBX files and then imported into Unity.
There are some advantages and short comings to this method. The advantage is a terrain map capable of high density concave surfaces that can have an endless number of unique textures. Further, the tiling takes advantage of the engine’s occlusion culling, increasing performance while enabling thoroughly extendable terrain. Much of the world of Adventure Beyond Time takes place on the shores and jungles of an island, and creating this open-world feeling drove the decision to attempt this solution.
A primary short coming of this method is the need to alter multiple tile textures and/or meshes if anything other then subtle adjustment is required. Further, the texture tiling is imperfect, being off by a pixel in certain areas, although generally not visible to the eye. Also, although we have not encountered an issue, a question exists of how many individual 2K textures can be placed into active memory before rendering errors occur.
Level of Detail (LOD)
Another optimization method employed was Level of Detail, abbreviated to LOD, whereby, depending upon the distance of a particular 3D mesh from the game camera, an more or less complicated mesh is displayed. This allows objects at a greater distance to still be visible, but simplified, resulting in a lower memory footprint, and, conversely, objects near to the camera to have more detail. Given the quantity of organic forms, meaning an inherently high polygon count, LOD was utilized wherever possible.
After researching how to efficiently create trees with both LOD and the ability to interact with the Unity engine’s built in ‘wind-zone’ system, which allows for an easily implemented atmospheric effect, we opted to invest in SpeedTree, a desktop software application specifically for creating trees, which enabled rapid creation of the needed assets.
Speedtree’s software had the added benefit of creating a fourth level of detail in the form of a billboard, or flat 2D representation, of the tree mesh when at the far distance. Further, the skeletal rigging required to animate with Unity’s wind-zone system and the colliders for collision detection were ready-made when exporting the mesh for use in the engine.
The downside of using a third party-software is the dependency, both technical and legal, as opposed to creating everything from scratch. In this circumstance, trading control for rapidity seemed worth while.
We investigated several methods of creating a dynamic ocean. Among these where several open-source and proprietary shader scripts. Ultimately, we implemented the Aquas Water System because of it’s better performance in a VR, or stereoscopic render environment, and also because it had the ability to integrate ‘foam’, an aesthetic touch which could greatly advance the total experience.
A Work in Progress
The assets described above and others not listed in this article where combined in Unity’s Editor. This design implementation is far from complete, and exists currently to serve as a proof of concept. Expanding this level to include all areas conceptualized in the point-and-click version of Adventure Beyond Time will push the techniques described here, and may very well break them, requiring an entirely new approach either in concept or execution.