Lacuna Passage - Devlog #70 - Exterior Modules and Development Roadmap

First and foremost, let's go over some of the development progress since our last update. Lately it has been easier to share what we've been working on in video form, so check the video below to see our progress on the habitat exterior modules.

That's all well and good, but now we would like to share something with you that we probably should have done a while ago.

We are officially launching a publicly visible development roadmap.

Since we are such a small team, a lot of our development planning happens across lots of different mediums (Google docs, Trello, email, Skype, etc). I had been using that semi-disorganization as an excuse to keep our overall progress hidden, thinking that our devlog posts were enough to keep our backers and followers happy. Thanks to feedback from a few very honest backers I have finally decided to prioritize a more presentable public roadmap.

We have been using a progress tracker called Trello for quite some time now, but various aspects of the game have been split among several different private boards and we haven't done a good job of maintaining a consistent approach to documenting each feature or piece of art. So to rectify that I have recently been working to consolidate the major elements of the Survival Sandbox into a single Trello board where you can view tons of information.

Lacuna Passage Survival Sandbox Development Roadmap

The link above will take you to our public board where you can explore all the features we have planned for Survival Sandbox v1.0 and beyond. We are still planning for the Story Mode as well, but none of that will be covered in the Trello board in order to avoid future spoilers.

If you are not familiar with Trello you will see that we have organized the "Board" into several main "Lists". These cover the high-level categories of game development which are then broken down into "Cards" that detail specific features and art.

We have also leveraged the color coded card labels to help visualize our overall progress at a glance. Above you can see that the first label on each card shows the progress we have made on that specific feature. The second label on each card shows when that feature can be expected. SS1.0 means that it will be available in the first Survival Sandbox v1.0 release on Early Access. SS+ means that it will come in a later update as a feature addition. Of course, all of this is subject to change, but we want to be as transparent as possible with our current plans so that you can more easily follow along. This roadmap will always be visible directly from the navigation on the www.lacunapassagegame.com site (which is also linked in the navigation at the top of this site).

These cards should also be a great way to revisit older devlog posts that cover the more detailed development decisions that went into specific features. As you can see above, some cards have links directly to the relevant devlog posts. So instead of having to search by keyword on our blog, you can browse the entire feature list on Trello.

As of the time of this writing, there are still a few sections of incomplete cards with only titles and labels. I will be working through those remaining cards over the next week to add more descriptions, images, links, and progress checklists.

If there is anything you think I've forgotten to feature in the roadmap, please let me know! The most obvious omission is a visible release schedule or timeline. I understand that this may be frustrating considering how behind we are with the release already. I can tell you that we have a release window in mind, but we cannot discuss it at this time until more details are worked out with some third parties. Thanks for your patience.


Our attempts to feed Naga in a special chair for her megaesophagus condition...

Our attempts to feed Naga in a special chair for her megaesophagus condition...

And for those of you who remember our post back in April about our dog Naga... we have some sad news to share. We discovered that she had a skin condition called dermatomyositis in addition to a swallowing disorder called megaesophagus. Her megaesophagus became so severe that she developed aspiration pneumonia. After fighting with her pneumonia over nearly three months she began to lose strength and we made the incredibly difficult decision to let her go. Megaesophagus is not a curable condition, and while some dogs can be managed with strict dietary assistance, Naga's case was too much for her. We have been devastated by her loss. She was only six months old and we wanted to show her so much more of the world. For those of you with dogs, hold them tight ♥♥♥

Lacuna Passage - Devlog #67 - Inventory and Container Management

As you may know if you have followed us for a while, every month we have two development blog posts on the site. One from Spencer where he details new art that he has been working on, and one from me (Tyler) where I go over the programming/system development. This last month our progress has been a bit slower than usual. Partly due to the fact that both of us and our families all took a vacation to Nashville to unwind for a week. Unfortunately, soon after I returned we received news that our new puppy has some serious health concerns that may be lifelong.

Gratuitous sad puppy photo

Gratuitous sad puppy photo

Naga - a dachshund, basset hound, jack russell mix - will be having a skin biopsy soon to confirm if she has vasculitis, a condition that impacts her immune system and causes a lot of discomfort. Over the last couple months we have been dealing with the symptoms and trying to manage the side effects of various drugs we've used to try and treat her. Hopefully we will have more answers soon, but the many doctor's visits and close attention she requires has been stressful and has impacted my work. I wish I had more development progress to share with you today, but sometimes life just gets in the way.

All that being said, we have still managed to make some very important progress with our inventory management system. I thought it might be kind of fun to do a more informal development video covering these features where Spencer and I discuss some of our design process. As with everything else in these blogs, nothing is final, but the discussion featured in the video might give you some insight into the kinds of conversations we often have when trying to shape how the game will function. Sometimes we don't always agree on how something should work.

Progress has been made in a few other areas including terrain tile loading and game state saving, but unfortunately none of those aspects are very visual so they don't make for very interesting blog posts. Let us know what you think about the inventory UI in the comments.

Lacuna Passage - Devlog #65 - WayStats, Habitats, and Survival Events

I'll have plenty for you to read about this month, but let's start out with a video instead. We've been working on our survival sandbox randomization features and that includes the random placement of 16 different Waypoint Stations around the map. Check out the video below for more info.

Having these early randomization features in feels great, but we have more than just WayStats being randomized. We recently completed an early test for full habitat randomization, including exterior/interior transitions which you can see in another video below.

Last month we gave some details about how these habitat locations are randomized, but now we actually have them physically represented on the map along with loading transitions to randomized interiors. This is a big step towards being able to test our new "Survival Event" system.

Survival Events

"Events" will form the backbone of our survival sandbox game mode for Steam Early Access. We've shown how the physical components of the map can be randomized and remixed for each playthrough, but with our events we will be able to randomize the gameplay as well and keep the player on their toes.

Those of you who have read or watched The Martian will know where we are trying to go with this system. The intent is to surprise the player with many "mini-disasters", but to hopefully make the player feel like they have just the resources they need to solve the problem if they think quickly.

If you watched our previous devlog video about crafting items then you will have a better understanding of how these events will be "fixed". Similar to how you might craft items, the survival equipment in the game may have components that break and need to be replaced. Some materials might be useful for crafting and for equipment repairs, so you will need to ration your supplies carefully and choose which items might need to be broken down for their component parts.

Space is an unforgiving place, so you will have to face increasingly difficult challenges the longer you survive. If you haven't had a chance yet, you can check out our previous art devlog to see some of the equipment that you might be tasked with repairing.

Thanks again for following along with us on our blog. Come back in a few weeks for more progress!

Lacuna Passage - Devlog #57 - Survival Stats Interface

We decided to do another video this month to show off some more improvements to the Datapad user interface. We now have a simple vitals screen that helps you visualize your current survival attributes like nutrition and hydration. It may look complex at first, but hopefully after watching the video you will see that we are trying to balance realism with readability. We also have an updated sleep timer screen that will allow you to reduce your exhaustion and move time forward more quickly. And if you stick around to the end of the video then you will see a few improvements we've made to the crafting screen.

Check out the video below and please let us know if you have any feedback for the features we are working on. We hope you are excited about the prospect of surviving on Mars!

Lacuna Passage - Devlog #55 - User Interface Updates

I just posted a new devlog video covering some of our new Datapad features including our work-in-progress Inventory and.... Crafting features! That's right. We have been kinda cagey on the whole crafting thing, but we think we have finally figured out a way to do it that fits the context of the game. That being said, the devlog video is very very rough. A lot of stuff doesn't look quite right yet with the Datapad UI and things bug out a little even during the short video. I almost didn't want to share it with everyone until it was looking better, but you guys deserve to know what we are spending our time on, even if it doesn't look great or have all the kinks worked out yet. All we ask is that you don't use these videos as a measuring stick for the quality of the final game. Don't share videos like this one to convince your friends how cool the game will be. It'll get better... I promise :)

So here it is. Let us know what you think!

TIMEframe - Featured in Multiplicidade Festival, Rio de Janeiro, Brazil

Thanks to our friends at Gamesquare, TIMEframe was featured in a live music performance by Astromash for the Festival Multiplicidade audience in August of 2015. Unfortunately we were not able to make the trip down to Rio de Janeiro ourselves, but the pictures of the show look great! We also have a little video clip for you to check out.

Lacuna Passage - Devlog #53 - Adjusting for Rendering Differences, Updating the Datapad, and Ludum Dare 33

Rendering Differences Between Color Modes

In our last few devlogs we have featured some updates to our art pipeline that have come with the transition to Unity 5's Standard Shader. In making this transition we have changed Unity's color mode from Gamma to Linear. This is a fairly technical aspect of rendering in a game engine, but I'll do my best to walk through our process (and problem solving). You can see the difference between the different color modes below.

Gamma Mode

Gamma Mode

Linear Mode

Linear Mode

You will notice that Linear color mode has much tighter highlights and generally makes metal materials look much more natural. The math behind it is all quite complex, but thankfully Unity takes care of it for us with a simple checkbox setting. We demonstrated how this new rendering mode looks a few weeks ago with our new Bridge environment assets.

Looks great, right? Well, unfortunately we were soon met with a few complications while trying to incorporate this new Linear color mode into our full project. Let's look at one specific example. Below you will see how this new color mode affected our fog blending with the skybox. (You can click to enlarge all images).

Our Mars time-of-day system was originally designed with Unity Gamma color mode. This is the exact start moment of "Dawn" in our old system where no color lerping (blending/gradation) is happening.

In this example we have switched to Linear color mode. You can see that the fog color is still blended properly with the background skybox, but that is to be expected since no lerping is happening at this moment.

Back in Gamma mode our time-of-day progresses from "Dawn" to "Midday" smoothing with a color lerp that is precise to match the blended skybox in the background. Looking good!

Now we can start to see the issue in Linear mode (you may need to click the image to enlarge it). The color lerp for the fog is no longer matched perfectly to the background skybox (notice the hard line at the horizon). Nothing else has changed from the previous screenshot other than the color mode. You can see problems with the sun shafts and lens flare as well; however, those are less of an issue because they can be tuned appropriately to compensate. The fog color lerp cannot be compensated. The start and end colors of the lerp are correct (see the Dawn example), but the colors in between are incorrect.

This simple problem caused us a huge headache. The beginning and ending points of our time-of-day transitions still matched the skybox perfectly, but every point in between was too dark and made our horizon line stick out like a sore thumb. So what was going on in Linear mode that was different from Gamma mode?

We had no idea. After scouring the web I came up empty handed. So I ended up resorting to posting for help on the /r/Unity3D subreddit. Lo and behold we were presented with a potential solution in less than an afternoon. And surprisingly, the solution came from real-world light physics and not from a Unity-specific error. As it turns out, Linear mode in Unity does not properly calculate the blending of two colors, but we can do that ourselves if we apply math! The video below led us to our final equation.

Mathf.Sqrt( Mathf.Pow(color1.r, 2) * (1.0f - t) + Mathf.Pow(color2.r, 2) * t )

This equation can be applied to our fog instead of using a Lerp. This transitions from color1 to color2 where t is the decimal percent of transition (just like t in a normal Lerp). We have to do this for each channel (r, g, b, and a) and use those values to build a new Color that reflects the proper values in Linear mode.

Now our fog blends perfectly with our skybox once again. There were a few other issues that we had to overcome in the transition to Linear mode, but we have finally gotten to a point where we are happy with the result. Due to the improvements with the Standard Shader in Linear mode, we think the game looks better than ever.

Updating the Datapad

We have also been working on updating the Datapad with the new Unity GUI features. Before we were using a plugin called NGUI, but this was becoming difficult to manage and we wanted to transition to using as many built-in Unity features as possible. One of the benefits of this new system is that it can automatically map the navigations between buttons.

You can see that we are making some general design changes to the Datapad as well, but we will have more details about that in a later devlog. Beyond that, we have made improvements to the shader for the Datapad screen so that colors appear more accurate to what you would see on an LCD screen. Before, the entire screen was illuminated equally, which led to blown out bright colors and washed out dark colors (shown below).

Old Datapad screen shader

Now we have a new shader for the screen that illuminates the brighter colors with more vibrancy while still preserving the dark colors.

New Datapad screen shader

Ludum Dare 33 - "The Monster Inside"

It was a pretty busy month, but our artist Spencer did manage to break away for a four day weekend vacation. So during that weekend I decided to participate in another Ludum Dare game jam without him. This time the theme was "You Are The Monster". The result was a collaboration with our composer, Clark Aboud, and a new contributing artist named Doug Auerbach.

We created a short audio-visual novella called "The Monster Inside". It is a text based game that explores a fantasy-infused film noir world. It covers some adult themes, so player-be-warned, but you can play it directly in your browser or download it from our Itch.io page below. Check it out and let us know what you think!

Thanks for following our devlog and we will be back soon with more art updates in a couple weeks!

Lacuna Passage - Devlog #52.5 - Lightmapping with Emission in Unity 5

Light mapping is a technique where you can bake the light from a scene into objects so that they self-illuminate based on a generated lightmap texture that usually is mapped to a second UV channel. This is a great solution to reduce the number of light calculations needed on static objects. But what if you have an object in the scene that needs to appear as if it is projecting light and casting shadows on other objects - and you also want to control the color and intensity of the light ingame? Well that’s where emissive lighting comes in handy.

Emissive lighting is typically used to self-illuminate objects in a scene and make them appear as the light source. A texture specifies the areas of the object that you want to emit light and global Illumination bounces this light onto other objects in the scene. Below is an example of a typical emissive object with global illumination affecting the scene around it.

But when you want precise shadows and lighting that matches the emission produced you need to get a little more complex. Baking the light casted from the emission source in your modeling software can achieve this effect with only a little extra effort. So, in effect, we want to produce our own lightmapping outside of Unity and apply it to the emissive channel in our Unity material.

First things first, we need to get a demo scene started in our modeling software. I’m going to be using 3ds Max along with the Mental Ray renderer. Below is the basic scene in 3ds max (top) and our desired look using a spotlight in Unity (bottom).

The hemisphere in the corner is the lamp of our scene and its bulb will illuminate our objects. To emulate this lighting in 3ds Max we need to place a light source in the center of the bulb. I used a Photometric Free Light and set the shadows to “Ray Traced” and the emit shape to “Sphere.”

Because I am using Photometric lights, I made sure my scene units match that of real-world objects. In this case I used 4 cm for the lamp bulb and made the radius of the emit shape also 4 cm.

After tweaking some of the light and shadow settings, I made a new Arch & Design material to place on our objects. In the diffuse color map slot I placed my diffuse map.  In the glossiness map slot under the reflection rollout I placed my gloss map. I made sure the diffuse and reflection colors are set to pure white, and the reflectivity is set to 1.0. I also checked the “Highlights+FG only” option because bounced light will be taken care of by global illumination in Unity.

Finally, I added a Normal Bump under the Special Maps rollout with the normal map of our projected high poly (Make sure you flip the green channel). After a couple quick render tests I decided to increase the gloss output to 2.0 to make the highlights tighter.

Now that we have our light and materials setup, we just need to render the light to a texture map. To do this, we open the Render to Texture dialog (Rendering > Render to Texture…). With our all our objects attached into one mesh we can easily render the entire texture at once. With our single object selected we can set our render to texture properties accordingly.

Scroll down to the Output rollout and add a “CompleteMap.” Complete maps incorporate all light information including normal, gloss, and diffuse maps into our bake. Set the texture size and save location accordingly and make sure “Shadows” is checked. Then hit “Render.”

Once the render is complete, decide if you need to increase the quality of the shadows before going to Photoshop to tweak any errors. You can do that by going to Rendering > Render Setup and opening the “Renderer” tab. Here you can tweak things like light sampling and noise thresholds. You could also go back to your light source and tweak its settings.

The end result is a custom emission map that reflects the lighting in your 3ds Max scene:

Then you just bring all your assets and textures into Unity and plug them into the Standard shader (I used the specular version). Here’s a quick video of how the emission lighting method compares to a spotlight within Unity:

In the example at the end of the video you can see some of the benefits of this method. Instead of lightmapping the entire hallway we can simulate lightmapping on a single asset that looks reasonably good even when duplicated in several places around the scene. This works particularly well when the light source is attached to the object that you want to have simulated direct lighting. The lighting never needs to be rebuilt and the resolution of the emission map can be scaled smaller than your other texture maps if needed. The emissive properties can also be easily changed at runtime to create effects like flickering or colored lights. The emission coming from our transmissive plastic also contributes to the scene's lighting via Unity's precomputed realtime Global Illumination.