Admin / Mod Tracker - APB:Db
APB:DB Logo

MattScott

CEO


Hi everyone,

 

It's been a while since my last update, and several members of the Fallen Earth community have asked for more frequent posts.

The team at Little Orbit is very busy with several high priority tasks right now, and my schedule is the worst out of everyone.

Unfortunately that means I can't commit to monthly updates right now, but I will do my best to post more often.

 

I do need to reiterate that out of the 3 projects going on in the studio, Fallen Earth is currently the lowest priority.

I expect that to change as we get closer to the end of September or early October. I know that's not a fun thing to hear, but I want to set expectations correctly.

 

Work on the project is continuing on a number of different fronts. In May, I laid out the short term road map of areas we are working on which includes finalizing terrain, getting characters up and running, and implementing basic movement. There is a good amount of work in progress on those items, but much of it is behind the scenes which means I don't have good visuals for them.

 

One of the biggest setbacks, is that we found a number of places in our conversion code that were mishandled because we didn't fully understand the proper logic needed. The conversion code is critical to all of the immediate areas we are working on, because it is responsible for migrating assets from the old Icarus proprietary format into modern day formats that can be used by Unity.

 

Simply put, the more we looked at objects that were moved across, the more we found they looked very odd. Some where see through in places they shouldn't be. Some where shiny in places they shouldn't be.

 

Here is a quick primer before I continue.

If you're not interested in the technical bits, feel free to jump down to the Texture map examples below.

 

Most games use a model that looks like this Shader->Material->3D Model.

  • Shaders define inputs and how lighting will get applied.
  • Materials define texture maps, colors, and other properties that are passed into the Shader they are linked to.
  • Texture maps can be Grayscale with 1 channel (black), RGB with 3 channels (Red, Green, Blue) of information or RGBA with 4 channels (Red, Green, Blue, Alpha).
  • And finally, all in-game 3D Models (Objects) have a Material assigned to them.

 

When Fallen Earth was created, they only had Fixed Function pipelines to work with. That means their Shaders were hard coded in C++. Nowadays Shaders are much more diverse. They can operate at the geometry level (Vertex Shaders) or they can operate at the pixel level (Pixel Shaders). And they are mostly written in High Level shader languages like HLSL. The original FE Shaders are split up and named for the lighting model they render such as:

  • Normal Tangent (or DotBump) = materials that will have a Normal map
  • Gloss = materials that will have reflections
  • Alpha Test = materials that will have sections that are see through

 

Fallen Earth also used an older set of Texture maps for all of its Materials. This system attempted to "cheat" the look of real lighting across an object.

  • Diffuse = all color for an object including lighting and shadowing
  • Normal = detailed pixel by pixel curvature data that gives low polygon surfaces much more detail
  • Specular = this is only a grayscale image that defines the specular reflectivity of the object
  • and a couple more

 

Today we use custom Shader Graphs or the more standardized Physics Based Rendering approach (https://en.wikipedia.org/wiki/Physically_based_rendering).

PBR attempts to model how light really works as opposed to cheating the look and feel. Unity offers two approaches to PBR: Specular or Metallic

 

Since Fallen Earth already had Specular texture maps, we chose the Specular implementation. This uses different texture maps such as:

  • Albedo = similar to Diffuse with all color for an object but without any shadowing or lighting
  • Normal = detailed pixel by pixel curvature data that gives low polygon surfaces much more detail
  • Occlusion = grayscale texture showing ambient shadows that would occur without specific lighting
  • Specular = RGB texture showing both the color that is reflected and the degree to which parts of the object absorb light or reflect
  • Smoothness = grayscale texture showing what parts of the object are rough versus glossy

 

image.png


 

Now back to our work and some examples.

 

We assumed the Fallen Earth Diffuse texture maps would have coloring in the RGB channels and alpha in the Alpha channel, because this is the default setup in PBR. However this is not the case in a majority of the Fallen Earth materials. In retrospect, this should have been more obvious to us as very few Materials require alpha or transparency. Most objects in the world of Fallen Earth aren't see through. So having empty Alpha channels everywhere would have been wasteful.

 

Instead, they used a "flags" field in each Material to let the system know what the Alpha channel data in the Diffuse texture map would be used for. We found that in nearly 80% of cases, the Specular grayscale data was embedded in the Alpha of the Diffuse texture map. So more recently we had to go back through all the imported texture maps and split out the Alpha channel into a separate image. This allows us to merge that channel into other texture maps to migrate everything properly depending on what that alpha channel actually contains.

 

I'm going to walk through samples of texture maps for the Heavy Assault Battle Suit (this is what it's called in the data - but necessarily what it is called in-game). It contains Phoenix Plate, pants, and boots.

 

For this part, I think it's handy to see the final product of what we imported into Unity to give you some reference on what you're looking at.

 

Look at the red heart painted on the left side of the chest. It will help you figure out what you're looking at later on.

In our previous attempts, all of the shiny areas on this model were transparent. I'm sure you can imagine how weird that looked.

 

image (5).png

 

Next, here is a shot to give you an example of what this suit looks like without any texture maps. Notice the lack of detail and how flat everything is.

image.png

 

Here are the texture maps.

 

Diffuse (with the Alpha removed): Notice the red painted heart on the right side.

That part of the texture appears to be mapped backwards to the chest so the heart shows up on the left side and not the right.

 

hvy_phoenixplate_bs.png

 

Diffuse Alpha which turned out to be the Specular texture map: White areas have the most shine while black areas are the most dull.

 

hvy_phoenixplate_bs_extra.png

 

Normal texture map: This looks a bit bizarre to most people, and it should. The Normal map isn't painted like the other maps. It's generated from high polygon versions of the same model. Someone very smart decided lower polygon objects could look much better if we mapped the curvature in X,Y,Z values from higher polygon objects on a per pixel level to the R,G,B channels of the Normal map. All the detail you see in that top image comes from this texture map.

 

hvy_phoenixplate_nm.png

 

 

As part of our conversion process, we alter the Diffuse to remove shadows and lighting (as much as possible) to create the Albedo texture map used by PBR.
We got lucky with the Diffuse texture map in this case, because it didn't have a lot of lighting or shadows painted in.

 

And finally here is an example of what the new Occlusion map looks like.

hvy_phoenixplate_occlusion.png

 

 

 

As we continued work on the Character System, we came across another recent problem.

 

Fallen Earth has a relatively complex clothing system, and we found that sometimes our new clothing or armor pieces would interpenetrate to show the body parts poking through. This was because we never imported a set of data on the body called "Selection Sets" (we call these Mat Ids today). This data splits up the body into 17 different pieces that can be shown or hidden depending what you're wearing. To fix this, we had to go back, correct the code to import the Selection Set data, then split the meshes up properly, and finally re-import everything back in.

 

Here are some examples of how the Selection Set data is used to show or hide bits of the body depending on what you are wearing.

 

The full Male body looks like this. NOTE: no custom skin color has been applied yet, so it's pure white right now.

image (4).png

 

And here is an outfit assembled from random pieces of clothing we imported (don't judge me for my fashion sense ?)

image (2).png

 

Here is what the body looks like using the Selection Set data if I hide the outfit.

You can see how areas covered by clothing are hidden so they work properly.

image (3).png

 

 

Lastly we also went back and captured some data that allows multiple pieces of equipment to be created from a single 3D model.

This part of the system uses the definition of equipment items and allows them to show or hide parts of the model to make it more unique.

 

As an example, here is the same Heavy Assault Battle Suit, but the pants, boots and gloves have been hidden to create a Jacket instead.

image (6).png

 

That's it for now. We're going to keep working through all the equipment, heads, hair, weapons and accessories so that we can reconstitute a character properly, and then we'll start work on the basic character movement.

 

Thanks,
Matt