Haus der Offiziere: Start
With my latest project Haus der Offiziere, I wanted to have a strong focus on material creation in Substance Designer and lighting in Unreal Engine 4 so that I could have a concept with clean simple meshes that relied on material definition and lighting.
Before deciding on what new project to make, I figure out what areas (theme, subject, workflow) I have gotten comfortable with. I think getting out of your comfort zone is a good practice since you usually learn more than if you continue doing things you are already skilled at.
I initially started out trying to work from Mao Jin's concept.
I liked where it was going, and got somewhat far with it (see image below) but I decided to cut my losses and focus on making a smaller scene. Using the materials I already made I could spend less time and keep the quality I was aiming for. A bigger scene was going to take too long to finish which might have taken down the overall quality of the project.
For reference, I found a great picture from Obsidian Urbex Photography:
Most of the materials I used were already made in another scene and only needed a bit of tweaking.
The first thing I did was block out the modular assets. They are set up to snap to a 50cm grid in Unreal Engine 4.
The scene is very simple and uses the following modules: ceiling and floor, wall, corner wall, wall with a window and a shower wall module to split the room (see further below).
The room splitter is a simple underlayer and outer tiles layer that can be switched from broken to unbroken.
During the modeling stage, I alternated between Modo, 3ds Max, and ZBrush. I used 3ds Max for some of the hard-surface props, Modo for the modular assets and smaller/simpler assets, and ZBrush for detailing. I could have used generators and anchors in Substance Painter instead of ZBrush, but I enjoy working with ZBrush and choose to use it even if it takes more time. Having fun while doing projects is an important part of art creation for me.
I didn't really do anything crazy in the modeling part. I wanted to use good old proper edge loops and turbo smooth, mainly because I still enjoy that workflow. Remember to have smooth edges, since sharp edges don't bake well.
To texture the assets I used Substance Painter. My biggest recommendation is not to rely too much on the pre-made smart materials. Checking out how they work is great, but making your own one from the bottom up and understanding how to use different features in Substance Painter will help you in the long run.
First, I created a fill layer with only height information, then masked it out with textures. Next came a little bit of hand-painting if I felt like it was needed. For the ornate height details, I used JRO's alphas which sped up my workflow.
After I finished the height detailing it was time to export the new Normal map and generate an Ambient Occlusion map, World Space Normal, and Curvature map. This will allow me to get masks from the height information added in the new Normal map (I export the Normal map since using anchors on so many layers would be cumbersome).
This is done by:
- Exporting the new Normal map
- Importing the new Normal map as texture
- Replacing the old Normal map with the new Normal map
- Removing high definition meshes
- Selecting the mesh maps and baking
After this, I started building up my materials. Thinking about these questions will help you out during the process:
- How has the surface aged over time?
- How has the environment affected it? (water damage, sun bleach, termites, etc.)
- Have humans/animals affected the asset?
Questions like this will help you when adding details like dust, moss, damage, etc. These questions can be applied to most aspects of environment creation.
The material is built up from only fill layers that have been masked by generators with the default noises and textures from Substance Painter.
One thing I do recommend is keeping your height information in check to avoid going crazy with it. You need to justify using high-intensity height, it needs to make sense and at some point, you will end up with a noisy incorrectly shaded Normal map when you export it to your engine.
I started out with only one tileable material that had different broken stages. This material was then modified to produce green and blue tiles.
Using sub-graphs that have exposed parameters can allow for changes in shape and details.
The material has one main Graph and 4 Subgraphs with different tiles and mortar. I use Tile Sampler to scatter the tiles and mortar.
After this, I give the tiles a little bit of larger bulging to add more imperfection to the surface.
I also made a simple broken tiles function, but I did not use it in the end.
For this type of material, I went for a relatively clean albedo and restored most of the information in the Normal map and Roughness map. This allowed light and reflections to do most of the work. I added decals in Unreal Engine 4 where I wanted to break up the surfaces.
To get the Albedo, I relied on HSL nodes for color variation. I used Ambient Occlusion, Curvature nodes, Shadow and the default Substance Designer Noises for masking. Histogram Select is a great feature and allows you to select a part of the mask.
The Roughness is using the Albedo converted to an Inverted Grayscale as a base with a Levels node to change the range. Then, I add some custom noises on top of that for the final edits.
I always try to keep the lighting as simple as possible, mainly to avoid odd shadows, lights, and reflections.
For the majority of the scene, I used skylight and directional light. If I needed more information in an area, I would try a logical solution for it. I wanted a bit more reflection on the green tiles and metal pipes on the right so I placed a few point lights that only affected Lighting channel 02.
To avoid light bleeding, I added simple box primitives around the scene, they have a material with fully black color and rough value:1. Also, remember to add a Lightmass Importance Volume and Lightmass Portals where the light goes into the scene.
Using an HDRI map for the skylight is a great way to get some good light information. Remember to change the Source Cubemap Angle to fit your needs, this will rotate the HDRI. I always use HDRIHaven to get my HDRIs. I highly recommend this source. I try to find one that matches the colors and the light concentration of my scene.
I usually try to limit the use of Post-Process as much as possible, but for this project, I decided to give myself a little leeway to get to know the settings better.
The thing I should have realized earlier was that it would have been better to make a smaller scene. The main problem being that I am a sucker for medium/large-sized scenes, I see that a large scale would've killed the purpose of the project - that is to say, to spend most of the time on creating materials in Substance Designer and practicing lighting in Unreal Engine 4.
If you feel like you're getting nowhere with a scene you have worked on for a while, I recommend trying to take some of the aspects out of it and incorporate them in a smaller scene. Unless you feel burnt out from the subject or you can feel that you can do better with a fresh start. At the same time, a large area scene with few assets might take less time than a small scene with a ton of assets. Small doesn’t always refer to the size but to the time it will take.
Taking time to do small studies with just a single asset is a super-duper way to level up your skills since you don't have to focus on the bigger picture of a scene.
And as always, the smartest thing I did was ask for feedback. I have received a lot of feedback throughout the whole process, and the result would not have been the same without other people's input.
If you are looking for feedback or just a place to hang out at, Dinusty Empire is a great choice for that.
Special thanks to the following people for all their feedback: