A little bit about the game I've been working on, called Dancy Ghosts.Read More
I received news this week that my pre-ordered Oculus Rift will be delayed to late May at the earliest and the Twitter/Reddit hoards assured me that I was not alone. This was actually a good thing for me, because I realized I was subconsciously using the looming shipment as an excuse to "just take it easy until the Rift comes, and then really crush it!" Nice logic, Adam.
Since I now have a ton of time, I've been struggling to build the Pause Menu for my game. The task has proven challenging, and I'm waging a serious war with distractions. The problem? Almost every video game menu designed for games up until this point will not work in VR, so I can't copy! The common strategy is to overlay the game with a 2D screen with buttons. The best menus maintain context by letting you still see the game in the background so that when you resume, you don't have to reorient yourself. I suspect that most early VR games will choose to just put a 2D UI on a flat surface in a 3D game, but that doesn't feel right to me and it can break down if it intersects with the world.
As far as I know, most VR demos out there haven't bothered to solve the problem of pause menus, but I see a few options:
- Pull the user out of the current game and into a separate 3D "menu scene"
- Keep the user in the current game, and freeze time for objects within the game while allowing interaction with menu items
- Teleport the user to a "safety platform" where they can see the rest of the scene from a spot where the menu won't be at risk of colliding with the rest of the world
The problem with the first option is that the user loses context. For a slow paced game, this seems to work. Fantastic Contraption and The Climb use this option, but I really want to preserve the context, so that when the user resumes the game, s/he knows exactly where the enemies are.
The problem with the second option is that things in the world can be in front of or intersect menu items. The context is preserved, you still know exactly what will happen when you resume, but the UI might be tough to use if the restart button is inside of an enemy or wall.
The problem with the third option is actually the same as the first. It yanks the user out of context. I honestly this would be my solution, but when I prototyped it, it felt rather disorienting.
Ultimately I've decided to go with option two and mitigate the world-menu collision by keeping the menu within the player's space and everything outside of that space, including enemies, which attack at a short distance. I might use some sort of "rubber-banding" where the menu UI elastically follows the direction you're looking without actually locking to it, but I haven't decided yet.
I'm curious to know if other developers have solved this problem in elegant ways, so if you know of something, please share! Thanks for reading.
If you've been following my Twitter posts lately, you've seen a few screencaptures of my current VR project. I've been working on it for about two months now. In fact it was during a dinner party Kayla and I hosted the first weekend of the new year that I tried out a prototype on a few friends. The idea was simple and they liked it. The object was to shoot a ball at a post several meters from the player, then teleport to the post when it hits. Repeat this to move through the level. Then I worked on a story/setting, which quickly spiraled out of control into an elaborate story about escaping from a sci-fi prison... Until I realized there was no way I had time to build something like that. I only have about 2 hours a day to devote to side projects, so I simply don't have the time. By the end of January, I finally conceded that I needed to simplify dramatically.
I started thinking about how some of the simplest games are still fun despite their lack of story or complexity: Angry Birds, Smash Hit, Crossy Road, Candy Crush, and Super Mario. They all have a few things in common:
- They're colorful
- The gameplay mechanic is super easy to understand and execute
- Simple enemies or limited resources to keep things interesting
- Simple assets that are just combined in clever ways to keep things interesting
- Not much of a story, if any
This realization has resulted in where I am today.
Since I started on this idea about a month ago, I've built most of the major components:
- Teleportation platforms
- Teleportation logic that can accommodate player movement
- Coins that increase your score when hit
- Smart projectiles that know what they hit and react accordingly
- Basic controls using both Xbox Controller and mouse for quick testing
- Level switching
- Score saving
- Enemy movement
I saved a ton of time by purchasing a couple scripting systems from the Unity Asset Store:
- Rewired (https://www.assetstore.unity3d.com/en/#!/content/21676) by Guavaman Enterprises for my controller input.
- Simple Waypoint System (https://www.assetstore.unity3d.com/en/#!/content/2506) by Rebound Games for enemy movement.
The best part? I've been doing all of this work on my VR game without a VR headset. I actually sold my Oculus Rift DevKit 2 to offset the cost of the consumer version. My goal is to get to the point where I can start cranking out levels by the time my Oculus Rift ships next month (April).
I've found that the hardest part about keeping this developer blog for my personal projects is making time to update it while also making time to actually develop. Sure, I could post all the time, but I'd quickly run out of time to develop. I can develop all the time, as I've been doing recently, but then I have no time to write about it! While I can't (and wouldn't want to) clone myself, there is someone who is always up to date with what I'm working on, is an excellent writer, has a blossoming interest in virtual reality, and has offered to partner with me on the Immersive Limit project. She lives with me and we're engaged. I'm pleased to introduce my wife-to-be and new partner, Kayla! She's going to help out by writing some blog posts, managing various social media accounts, and keeping the business side of things organized. I know Kayla will do a fantastic job, and many of you from the Seattle VR scene may have already met her, since she's been attending the monthly meetups in SoDo.
Now as for what I've been up to, I've been working hard on an evolving VR project. It's a game that is designed to cleverly avoid VR's current weaknesses and also to allow me to create a compelling game without a large team creating assets. For example, rather than count on users to struggle through motion sickness inducing movement, the player never has to move beyond the natural tracking area of the device. Instead, teleportation is the primary movement mechanic. Another example is that I'm trying to incorporate human emotion and interaction without actually seeing the other characters in the game. I intend to use text based interaction at first, and then if it's feasible, I'll record voice overs. I won't go into much more detail now because I want to give Kayla a chance to tell you a bit about herself, but expect much more in the coming blog posts. We want to be super open about what we're working on so that you and all of our lovely readers can follow along with our progress! Thanks so much for being a reader and without further delay, here's Kayla:
Hello! I'm honored and excited to be a part of this project. Watching Adam develop his idea over the past eight months has been a roller coaster experience for me. I came into this relationship with a novice's experience but I have already learned so much. I'm by no means a developer, but I am able to understand what is happening more or less. Adam and I recently decided that I would be a good fit to handle the business side of things. I'll help keep the blog alive, work on a stronger social media presence, keep Immersive Limit up to date on events in the community and help us clamber out from behind the computer screen and into the world to interact with the VR community and our audience.
Before I dive into this adventure, I'd like to give you a glimpse into who I am and where my experience comes from. I grew up in Idaho, with most of my childhood memories being on my grandparents' ranch. In between feeding and riding the horses and mules, building a dream tree fort with my brothers and baking with my grandmother I remember my grandfather reading about and working on his many computers. We took so many trips into "town" together to pick up the latest edition of PC world, MacLife or anything Linux and grandpa would read and try his best to explain it. I'll admit, very little stuck with me. But the exposure to that world is something I am thankful for. Later, I attended the J.A. Albertson School of Business at the University of Idaho where I studied marketing and business management. I also participated in the VIEW program for budding entrepreneurs and received certification.
I'm looking forward to this adventure, thanks for sticking with us. We are working on something really exciting for you. Stay tuned!
Confession: I haven't been doing much development in my free time lately. Instead, I've been investing a lot of time in the more artistic side of VR development, specifically in a fantastic tool called Substance Designer from Allegorithmic. If you haven't heard of it before, it's a really neat piece of software that lets you create beautiful procedural textures using physically based shaders. Physically based shaders are essentially programs that simulate (impressively accurately) how light reflects off of real surfaces. In Substance Designer, you can create textures from scratch that have color, roughness, metallic-ness, and normal/height data and then apply those textures to an object for use in game engines.
Here's an example of some really impressive work in Substance Designer by an environment artist named Joshua Lynch. He created this incredibly realistic looking snow.
Definitely check out the rest of his excellent portfolio at http://josh-lynch.com/. He's a pro environment artist, so naturally I'm not quite to his level yet, but I've already made a few interesting substances that I'm fairly proud of.
First is a leather texture I made while on a flight to see my family in Detroit. I was using the seat in front of me for inspiration, and while I wouldn't say I "nailed it", I'm pleased with how well I did.
Second is an oiled cast iron texture I made when I got home from my trip. I then whipped up a basic skillet in Maya LT to apply it to. I'm pretty happy with how nice it looks, though it's far too pristine to look realistic. I want to come back to this one and add the color variation from oxidation and the scratches around the bottom and edges to make it look more like my actual skillet, which gets daily use.
Third is a result of playing around with height mapping. One of the coolest features of Substance Designer is being able to create and view height information that is built into the material rather than into the 3D mesh. In the image below, the sphere doesn't actually have blocks rising out of it, it has a checkerboard texture that indicates that certain squares should appear higher than others. It also has shiny metal texture in the spaces between the blocks, which is reflecting one of the environments that is built into Substance. I have the environment hidden so you only see the reflection. The result of a few minutes playing around is quite stunning.
I'm still pretty new to all of this, but its clear to me that this software is a huge deal. It has built in support in both Unity and Unreal Engine, so it's perfect for VR development. They have a free trial on http://www.allegorithmic.com, so I highly encourage you to try it out. It takes some time to get used to, but after doing a few tutorials on YouTube, I learned enough to start playing around. Make sure to read the Physically Based Rendering guides as well, because they really helped me understand they high level theory behind it.
Do you use Substance Designer? Make any cool substances? Share them in the comments or with @immersivelimit and @aktwelve on Twitter! Thanks for reading.