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!

Lacuna Passage - Devlog #54 - Random Hab Modules

With our sandbox survival mode for Lacuna Passage in the works, we knew we needed to make some changes to the habitat modules.  There will be a few established habitats randomly placed for players to discover and utilize to survive as long as possible.  These habitats will all be unique and full of specialized modules that serve different purposes.  Bunks for sleeping and storage for food and supplies will be available in each hab, but things like research stations, 3D printers, and crafting areas will be randomized features in only some of the habitats you find.

In order to make the habitat capable of this level of randomization, we had to revise the way the hab is set up.  Now each component in the hab takes up an exact gridspace that can be randomly assigned in almost any part of the inner structure.  Here are a couple examples of how things may look with randomly swapped modules:

This is also the first time we have really shown off how the new Unity 5 standard shader makes our internal areas look.  We are very happy with how simple and consistent this shader performs with all of our materials even though we have not finalized the lighting yet.  Here are some more interior screenshots with placeholder lighting:

You may notice a new workstation in those last couple screenshots that we are currently working on.  This will have a few different functions, but in this example it serves as a station for testing soil and rock samples.

We also managed to give some of the panels that fill the extra space in the hab a rework.  They previously seemed a little too extruded and they interfered with the flow and interactive elements of the hab.  Now they seem a little more streamlined and less intrusive.

Progress is definitely coming along, and we hope to show you more next month regarding some of the new areas in the habitat where you will be crafting supplies to help you survive.

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.

Lacuna Passage - Devlog #52 - The Bridge Art Progress 3

The Bridge is complete and fully integrated with Unity 5. We have been working hard to update our assets to the new Unity standard shader, and we really think it has paid off. Our workflow is more streamlined than ever with the use of physically based rendering (PBR) and real-world material properties. We have always utilized the Quixel Suite to tweak our normal maps and create base textures, but only recently were we able to make use of Quixel’s built in PBR map generation thanks to this new shader in Unity 5.

We start by creating a base model and high poly for normal mapping. Then we transition to Quixel’s nDo for normal map tweaking. This allows us to make normal map changes within Photoshop using custom shapes and selections.

Once we have our normal map complete, we create a color map, or ID map, that separates the different material sections for our final textures. Quixel has a color swatch dedicated to each of their base materials, so we simply find the material we want using our own custom material previewer in Unity and apply the proper swatch to that area of the color map.

Next is where the magic happens. Quixel's dDo then takes all the information from our normal map and color map to generate base diffuse, specular, and gloss maps accurate to their real-world counterparts.

From there we simply tweak the maps to suit our needs and place the assets into Unity. The end result is a scene with physically accurate materials made to react with light as they would in the real world. Here is a comparison of the importance texturing and lighting brings to a scene:

But, just showing off screenshots doesn't fully capture the look and feel of walking through the Bridge, so this time we decided a video walkthrough would be appropriate. Here’s a quick look at the Bridge of Foundation Base:

If you're wondering what the Bridge will look like from the exterior, check out the last art devlog post here.

Lacuna Passage - Devlog #51 - Keeping up with the times (Unity 5 and Steam Early Access)

Since this is our first true non art-related development update since TIMEframe was released, I felt it fitting to reveal some pretty big news. Most immediately important is that we are updating Lacuna Passage to Unity 5. Some of you following us from the very beginning might remember that the original prototype of Lacuna Passage actually started in Unity 3. We moved to Unity 4 to take advantage of some of its new features, and we’re doing it again with the switch to Unity 5.

So how will the game benefit from the upgrade? If you are a developer, or just really interested in the nitty-gritty details, you can check out the full Unity change list here. Many of the updates made to the engine we will benefit from passively without any additional work on our part. These include things like multi-threading performance improvements, loading improvements, physics calculation improvements, a 64 bit editor (finally!), and much much more. We are already impressed with how well the game is running in Unity 5 and how quick it was to upgrade.

Making progress on our material previewer with Unity 5's new physically-based rendering

Making progress on our material previewer with Unity 5's new physically-based rendering

However, the most exciting change for us will be switching to Unity’s new physically based rendering model. Since the beginning of Lacuna Passage we have been utilizing our own shaders which were designed with Shader Forge. Now, with the introduction of the new Standard Shader in Unity 5 we will be able to simplify our art pipeline while also drastically improving the rendering quality of the final game. Before, where we were using custom shaders, it was very difficult to get our texture previews in our art applications to match the way that the textures would be displayed in-engine after being imported. This meant hours of tweaking, re-importing, and fiddling with settings until we were satisfied with the result. We were trying to manually approximate real-world materials like aluminum, steel, and plastic. But with the new physically based rendering system we can simply select real-world material presets as a starting point and see exactly how the textures will be rendered before we even import them into the game. It will take some time to adjust to the new art workflow using the new versions of industry standard applications like Quixel’s DDO, but we are confident that it will have a huge affect on our development efficiency and quality over the long haul.

That being said, the move to Unity 5 is not the only big development change that we are currently undergoing. Since our Kickstarter campaign we have kept a close eye on Steam’s new “Early Access” sales model. This option allows developers to sell access to games that are still in active development. We never really considered that Lacuna Passage would be a good fit for this option, since our plan for the game was heavily driven by a narrative experience. It’s difficult to sell people early access to a game with a story if the story isn’t fully implemented yet. We didn’t want people to run into half completed story lines, or story lines that might change completely before the game was finished. Over the last few months we have been watching other Early Access games like The Long Dark very closely, and we think we may be able to adopt their approach.

Taking inspiration from other sandbox survival games like The Long Dark

Taking inspiration from other sandbox survival games like The Long Dark

Now, before I explain further, I want to make it clear that this should not be cause for alarm. We would never consider Early Access purely as a way to squeeze money out of the game before it is finished. We simply feel that we have failed our backers in the sense that we have already far overshot our original release estimate, so we wanted to investigate any option we could that would allow people to play the game sooner rather than later. Our consideration of Early Access is a compromise. A way to let people see some parts of the game sooner while we finish all the features we originally promised.

So, what would an Early Access version of Lacuna Passage look like? The example I gave earlier of a game called The Long Dark is something we are looking to model after. The Long Dark is a post-apocalyptic survival game which will eventually have a story mode. In Early Access they are focused almost entirely on the root survival mechanics of the game and art development. We think that this could work well for Lacuna Passage. Our thought right now is that we will put all story development on hold in an attempt to put out a sandbox survival mode on Steam Early Access. We don’t have a date for when that will be, but the important thing is that you will get to play Lacuna Passage sooner and be part of an active community contributing to the development of the final game.

Players of The Long Dark will find familiar systems in a future Early Access version of Lacuna Passage

Players of The Long Dark will find familiar systems in a future Early Access version of Lacuna Passage

We may have originally underestimated the power of a purely survival-driven game mode. After playing games like The Long Dark we feel that a survival sandbox could stand on its own and enable us to make better design decisions for the final game based on the feedback that our backers and Early Access players will provide. Obviously there are still a lot of things we will need to work out before this happens, but we want to be completely transparent with all aspects of development. In the coming months we will outline our plans for what you can expect to see in an Early Access release. We want to hear your thoughts and suggestions as well. If this is something that our backers overwhelmingly disagree with then we will seriously reconsider, but we think it will be a win-win for everyone. Thanks for reading, and we will have more details soon.

Lacuna Passage - Devlog #50 - The Bridge Art Progress 2

The next large asset for Foundation Base is nearly complete. The Bridge, or the pressurized walkway, is a large raised platform that spans between all other structures at Foundation Base.  There is also a dock for access to the Pressurized Roving Transport, or PRT. Here are some screenshots of the final look for the exterior of the Bridge:

You will notice that the same translucent canvas from the Greenhouse also surrounds the Bridge.  It is designed to be a durable, flexible, and repairable material that reflects harmful UV rays and holds pressure.  The modular design is suitable for any terrain or elevation variance between the other structures.

In the next week or so we plan on tidying up the interior elements of the Bridge. We are also starting to experiment with an upgrade from Unity 4.6 to 5.1. This would be a big change for us, so hopefully by our next devlog we should have an answer as to how feasible it would be for us to transition.

Lacuna Passage - Devlog #49 - The Bridge Art Progress

Over the last few weeks we have been able to shift most of our art development back to Lacuna Passage.  In our last art devlog we showcased the Habitat with shots taken from our PAX East demo, as well as the look of Foundation Base when approaching on foot. Now we are working hard on the next major art asset for Foundation Base, the Bridge.  The Bridge is a pressurized walkway that connects the Habitat, Greenhouse, and Workshop together.  Here are some work-in-progress shots:

You may notice that the Bridge is made up of a plastic similar similar to that of the Greenhouse.  The frame and supports are designed to be suitable for variance in the terrain and flexibility.  The central hub that forms the intersection of the Bridge serves as a pressurized dock for the PRT (Pressurized Roving Transport).  Eventually there will also be attached docking bays for smaller remotely operated scout rovers.

There is still a lot of work to be done on this piece, but we are quite happy with the look so far.  We hope to have the Bridge complete and textured by the end of the month, so be sure to check back next month to see what comes of it.

Lacuna Passage - Devlog #48 - The next phase of Lacuna Passage development

This past month has been hectic, but we are finally back with a focus on Lacuna Passage.

Some of you had concerns about TIMEframe being a distraction for us last month so this month we want to talk about all the tangible ways that it has positively impacted our continued development of Lacuna Passage.

Demonstration of the Song Seed Music plugin used in both Lacuna Passage and TIMEframe

First and foremost has been the refinement of our dynamic music system, Song Seed. We have been building Song Seed over several iterations in the last year or so specifically for use in Lacuna Passage. The demo we previewed at PAX East was the first public implementation of our dynamic soundtrack and it worked really well for us, but there was still a lot that needed to be done. We realized a long time ago that this system would be very beneficial for other developers as well, so after PAX East we began working harder on the public version which worked well with the timing of our updated release of TIMEframe. Music is a huge part of TIMEframe so we were able to use it as a real-world test of the system. In fact, in addition to our own implementation in TIMEframe, we have just opened up a beta test of the Song Seed Unity plugin. So if you are a Unity developer interested in helping us improve this tech that will be a big part of Lacuna Passage please let us know (and check out the example video above). Soon after testing we will be releasing the plugin on the Unity Asset Store at a modest price. The proceeds from this will all be funneled straight into Lacuna Passage development as well.

Another benefit of working on TIMEframe that cannot be stressed enough has been learning the ins and outs of Steam integration. Lacuna Passage has always been our priority, but it has also been our first foray into commercial game development. We had no experience with integrating with Steam until now. After working on TIMEframe we now have a much firmer grasp on what that integration requires. Store page setup, game package installation, authentication, achievements, trading cards, cloud saves, DLC… the list goes on and on. We have used TIMEframe as our test bed for these features and this has given us invaluable experience as we now implement many of these features in Lacuna Passage. We are now looking forward to a tentative release date of June 30th for TIMEframe which will give us even more experience in running an active product and managing customer relations. Once again, all the proceeds will directly benefit Lacuna Passage development. (And as a reminder, all Lacuna Passage Kickstarter backers will be receiving a free copy of the game and the original soundtrack).

Last but not least, we have been experimenting with new features that have been added to Unity in versions 4.6 through 5.0. We have not updated Lacuna Passage past 4.6.2, but with our work on TIMEframe we have had a chance to see how these more recent updates might affect Lacuna Passage. The new user interface features in Unity might drastically improve the way that we handle the rendering of the datapad for example. There have also been several performance enhancing changes that could positively impact our open-world memory management. We have been able to evaluate these new features in TIMEframe on a smaller scale without any disruption to our Lacuna Passage project management. It would have taken us orders of magnitude more time to even test these options in Lacuna Passage itself.

These are only a few of the most direct benefits we have experienced while working on TIMEframe, and as we move forward into this next chapter of Lacuna Passage development we feel much more confident in our ability to deliver on our original promises. Game development is not a straight path. There will always be bumps and detours, but we work extremely hard to ensure that every decision we make benefits our ultimate goal of delivering the best Mars exploration narrative experience that we possibly can. Over the next few weeks we will have more regular updates with the art and design of Lacuna Passage.