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.
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:
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.
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:
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.
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.
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.
Diffuse Alpha which turned out to be the Specular texture map: White areas have the most shine while black areas are the most dull.
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.
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.
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.
And here is an outfit assembled from random pieces of clothing we imported (don't judge me for my fashion sense )
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.
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.
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.