Blog

Affordable Shadows

Early on in development we established that, due to performance constraints, we couldn’t use dynamic shadows. At the the time, this meant there was no way that we’d be able to have the player’s hands cast shadows. This was a shame given that most people subconsciously use these shadow cues in the real world to help tell how close they are to touching something. Recently, I decided to take the challenge upon myself to figure out a way to get something in the game that approximated the effect without the need for dynamic shadows.

I began by researching shadowing approximation techniques online, specifically those geared toward mobile and VR development as they tend to be performance focused. I arrived at the general idea that implementing some kind of circular darkening affect on the material-side would be a good workaround. Utilizing a built-in material editor function that was made to approximate sphere-based ambient occlusion, I was able to get a desirable faux hand shadow effect on any material I desire.

Currently only in use on holds and enemy grab handles, the circular hand shadow effect complements the intuitive climbing controls to give the player that much more information while they’re maneuvering. I’m pretty satisfied with how it turned out overall, it’s not as realistic as dynamic shadows, but I think it’s a really useful performant alternative. Though the entire impetus was to round out the climbing-on-holds experience, I’m also considering adding the effect to other things within the game in the future.

-Kolel, Art Director

Design Challenge

Snowball Scramble has been my favorite design challenge yet. Normally I work with progressive difficulty on early levels using a familiar toolset. But on this I got to play with a new asset, the snowball, and design the hardest level we have so far. The change of pace had me nothing short of enthusiastic.

My first decision was to cut the filler but have more gauntlets than the average level. I wanted to weave simple puzzles together with skillful play to create a series of experiences that rewarded a smart player as much as an agile one. Because the velocity and interval of the snowballs created windows of only a few seconds to move, breadcrumb paths basically made themselves. I then took those bread crumbs and added bees. When in doubt, always add bees.

Overall, it’s the level I’m most proud of at this point. I’m sure that I’ll change my mind two weeks from now once my honeymoon period is over, but I stand by its design and what I’ve learned from it. In particular, I fell in love with seeing how far I can push making puzzles akin to stealth games while maintaining the speed rush of traditional platformers.

 

-Jake, Level Designer

First Level

Since we started the studio, my primary focus is business development. I check in on game progress and then spread the word about Don’t Look Down. A great game is unlikely to succeed without marketing. As such, I’ve managed the outward facing side of our studio with social media accounts and event coordination. However, I’ve always been interested in game design.

A few weeks ago, I was struck by a strong desire to build a level. The marketing plan looked solid and working on the game seemed a better way to spend my evening than playing video games. I got a crash course in using UE4 from Kolel and brought home his VR rig for the weekend. Within an hour, I had built my first level, a demo level that could be beat in a couple minutes. From sharing our game with hundreds of people at events, I realized that it was not ideal to have everyone play one of our regular levels, which can take 5-15 minutes to beat. When there are a dozen people waiting to play our game, we don’t want anyone to have to wait for 2 hours. As such, I built a short level that highlights the core fun of our game by letting them climb, smash enemies, grab powerups, high five the checkpoint bot, and grab the flag to beat the level.

The demo level or DaneLevel as I so vainly named it, needed some revision. My spline placement caused Doombots to clip through the mesh grid and I needed to tweak some hold placements so it never felt like you were pulling yourself through a solid object. However, the experiment was a success! I learned that I had the ability to put together a fun level. This newfound confidence inspired me to borrow the rig for the next weekend and the one after that. I shut myself in and built 2 full levels in 2 weeks (one with moving holds and one with crumbling holds). Since these levels felt pretty good, we decided to buy my own personal VR set-up. Now I have a gaming PC and an HTC Vive, which allow me to work on levels every day. And we now have 2 portable set-ups for demo purposes!

 

-Dane, Business Director

Advanced Throwing

After having been long displeased with the clunkiness of the throwing in DLD, I went and prototyped a more advanced throwing system than the one we had previously been using.

Prior to this change, both flinging and throwing an enemy worked by using the instantaneous linear velocity of the motion controller on the frame you let go. Many VR games do this for their throwing (probably because it’s so easy to code), but it can produce some weird results. For example, if you flick your hand down during the follow-through of the throw and release the grab trigger during this flick, you’ll end up throwing in the direction of the flick!

The current system does a better job of figuring out the direction the player is trying to throw the thing in: we sample the velocity of the motion controller on the frames leading up to when the grab trigger is released, and then process these data to create a resultant velocity which is applied to the object being thrown. There are many possible ways to process these data, and I look forward to continued experiments and iterations that will get the throwing feeling progressively tighter.

-Chris, Game Director

Voxel Shader

After having a conversation with an industry professional, the team and I were convinced that we could get a lot of utility out of making a voxel (3D pixel) shader that could be applied to any piece of geometry. It would evoke the retro vibe that the game’s design is already giving off, unify a lot of the art assets further, and also help save a lot of future time and energy when developing new art assets.

My first step was to begin planning the development while researching similar work online to see what information I could glean. Once I realized the root of a voxel shader was simply snapping vertices to their nearest point on an invisible grid, I jumped right in to the UE4 material editor to put it into practice in my own custom material function. With that core planned and implemented, I quickly realized that at most grid sizes I was being constrained from having a uniform voxel/cubic result by the model’s vertex count. This led me to delve into the power of displacement/tessellation and really round out the implementation.

Overall, I’d say the whole thing was surprisingly straight-forward and a rewarding exercise in the development pipeline of something completely new to me. Now, I’m able to consistently put the material function into any material, add tessellation, adjust various settings, and get a good looking voxelized version of the model that the material’s applied to. Going forward, I can and will apply this method to various materials, along with emissive and subsurface color tweaks, to get a consistently unified retro look.

-Kolel, Art Director