Multiplayer VR Battle Royale Prototype
This is a prototype virtual reality multiplayer battle royale game built for the HTC Vive using Unreal Engine 4. I built this prototype entirely with blueprints and no marketplace assets. I modeled, rigged and textured everything in Blender and used blend shapes in UE4 to do animations.
Because I built so much for this project, I'll break it down into sections, starting with the map.
The Map
I started with some DEM data of an area that looked interesting in Maine, approximately 1.8km² in size. This was then modified in Photoshop to exaggerate and stylize some of the features. I brought the final image into UE4 and used it as a heightmap with the landscape system to generate the terrain.
I created a custom shader to give my terrain a low-poly stylized look and automatically color the surfaces based on their angle as I sculpt. This way I could achieve natural transitions from grass to dirt to rock without having to paint the terrain.
I modeled a large number of trees, rocks, flowers, bushes, logs, etc. to build out the dense forest environment I envisioned. Almost all models use vertex color exclusively which I painted in blender and manipulated in UE4 with shaders. This fit well with the stylized look and greatly simplified the asset pipeline.
I laid out a system of paths through the terrain and then used Unreal Engine's Procedural Foliage Tool and a lot of fine tuning to generate a procedural forest using all the assets I'd made.
The completed map is approximately 1.8km² with various plains, cliffs, ravines and paths throughout. I learned a lot about UE4's landscape system, materials, navigation mapping, procedural forest system, performance considerations and use of instances meshes, and more. There were many factors specific to VR that guided my decisions.
Now that I'd figured out my map, I wanted to create a unique mini-map system built specifically for VR. That brings us to the next section.
3D Procedural VR Mini-map
How does a mini-map work in three dimensions, with no UI? I could have taken the standard design and just stuck it on a flat object you carry around, with UI on the surface, like a giant tablet. I was much more interested in exploring new ways to interact with games, however. So I set about to design a mini-map unlike one I'd ever seen.
The idea was to build a grid of points around the player, raycast straight down and then use that data to build a heightmap. Then I construct a procedural mesh where the top surface vertexes are supplied by the heightmap. This means the resolution of the surface of the mesh is determined by the density of the raycasted grid of points.
If I kept the mesh I mapped the data to the same size, I could reduce the number of points in the grid and have a lower resolution map, and vice versa. I could also keep the same number of points but spread them out over a larger area to generate a lower resolution mesh but covering a larger area and so on.
The height of the surface wasn't the only data I got back from my raycasts though. I could also get information about the material that was hit. This meant I could determine if it was grass, dirt, rocks or anything else. So I used this data to color the mesh to reflect the materials accurately.
I was pretty happy with the map at this point, but it still wasn't looking so great. The bottom half was basically just an ugly cube connecting all the edge vertex's I was generating, but building something nice with the procedural mesh system seemed implausible. Instead I wrote a shader to flatten the bottom half and also do a cool ripple effect when it opens.
In the process of testing my new map I realized that, from a game-play perspective, the way the map update with a scan-line type effect was not ideal. It meant you sometimes experienced the frustrating feeling of waiting a second for the scan-line to get to your position at the center of the map. I had to have some kind of visible update for performance reasons though, so I decided to make it update from the center outward.
World Props: Alchemist's Cabin
I wanted to have several cabins scattered across the map so I built a set of modular cabin pieces and a lot of props in Blender. This alchemist's cabin is one of the variations I planned. Just like my landscape props, these models almost exclusively use vertex color with no textures.
The cabin is full of items you might find somewhere an alchemist lives. Players would scavenge these buildings for staves, wands, scroll or potions. Since this is VR everything is a physics object and the lighting is all dynamic so I had a lot of limitations visually.
I used cloth simulation in Blender to model the cloth on the crates and shelves and then gave it a low-poly stylized look. Many of these items are usable player items. The potions use a custom stylized fluid shader I wrote and can be drank by the player.
Potion System with Low-poly Fluid
Potions were to be common player items in this game an I wanted them to work like you'd expect in the real world. The fluid moves around in the bottle and to drink it you pull the cork out and tip it into your mouth.
I wanted the system to accommodate many bottle shape variations while correctly simulating the fluid, in a performant way. I also needed to support several colors that would represent the different effects the potions would have, and I wanted them to be found laying around in various states of fullness. This is a blueprint system I created that achieves these goals.