Modular SciFi Hallway | Technical Breakdown

The goal of this project was to create the most modular hallway possible using as few materials as possible. By not creating unique maps for every object in Substance Painter, Unreal Engine is able to run more efficiently as it would only have to run parent material calculations one time. This project was created using two materials made in Substance Designer, five Parent Materials, and a lot of Material Instances.

The goal of this project was to create a space whose look and tone could be completely changed using as few materials as possible.

The goal of this project was to create a space whose look and tone could be completely changed using as few materials as possible.

Base Material.

Base Material.

Grunge Material.

Grunge Material.

Hyper-Clean Material.

Hyper-Clean Material.

Contrasting Material.

Contrasting Material.

Modular assets.

Modular assets.

This project is run solely off of two modular materials.  This material is a hard plastic with an adjustable grunge amount.

This project is run solely off of two modular materials. This material is a hard plastic with an adjustable grunge amount.

This material is a clean steel with an adjustable grunge amount.

This material is a clean steel with an adjustable grunge amount.

Substance Painter was used to develop this project, but not to apply the materials.  I used substance to create four masks that I would need: Normals, AO - where materials would be applied, and two masks to break up where color was applied per material.

Substance Painter was used to develop this project, but not to apply the materials. I used substance to create four masks that I would need: Normals, AO - where materials would be applied, and two masks to break up where color was applied per material.

Each material was constructed as a function in Unreal that allowed me to adjust different colors, what masks would be input, how much grunge would be present, and what color that grunge would be.

Each material was constructed as a function in Unreal that allowed me to adjust different colors, what masks would be input, how much grunge would be present, and what color that grunge would be.

These Material Functions would then be called in Parent Materials where every input became a parameter to be adjusted in Material Instances.

These Material Functions would then be called in Parent Materials where every input became a parameter to be adjusted in Material Instances.

For objects with both materials, the two Material Functions would be called and combined based on a mask from Substance Painter using a MatLayerBlend node.

For objects with both materials, the two Material Functions would be called and combined based on a mask from Substance Painter using a MatLayerBlend node.

The end result was something like this.  This method meant that every object in my scene (which as about 70% of them) would be running off of one Parent Material which made the engine much more efficient.

The end result was something like this. This method meant that every object in my scene (which as about 70% of them) would be running off of one Parent Material which made the engine much more efficient.

These are all of the parameters I could easily change independently of what was occurring in the rest of the model.  If adjustments needed to be made, there was no need to re-export maps from Painter.

These are all of the parameters I could easily change independently of what was occurring in the rest of the model. If adjustments needed to be made, there was no need to re-export maps from Painter.

To push this idea even farther, I decided to develop a trim sheet that I could apply in Unreal.  It would be running off of the same logic as the rest of the materials.

To push this idea even farther, I decided to develop a trim sheet that I could apply in Unreal. It would be running off of the same logic as the rest of the materials.

This is the resulting trim sheet.  It has all the same parameters exposed, so it was entirely modular.  This gave me the power to run objects, not off of just the same Parent Material, but the same Material Instance.

This is the resulting trim sheet. It has all the same parameters exposed, so it was entirely modular. This gave me the power to run objects, not off of just the same Parent Material, but the same Material Instance.

All of the modular floor pieces were textured using the same trim sheet.

All of the modular floor pieces were textured using the same trim sheet.

Areal screenshot of modular environment with Base Material.

Areal screenshot of modular environment with Base Material.

Areal screenshot of modular environment with Hyper-Clean Material.

Areal screenshot of modular environment with Hyper-Clean Material.