Erik Hammarbäck did a detailed breakdown of his Gas Station in Roswell (known for UFO incident) scene made with UE4, Maya, Substance, ZBrush, and Toolbag.
Hello! My name is Erik Hammarbäck, and I’m from Stockholm, Sweden. I am a student at Futuregames in Stockholm, focusing on 3D environment and prop art. I started making art for video games about one and a half years ago. Before that I was a full-time musician, playing guitar and touring the world. I mainly got tired of the touring part and got hooked on making 3D art (that even rhymes), so after lengthy deliberations, I quit being a musician to pursue a dream of working in the game industry.
The gas station scene has been in my head since starting with 3D. It feels like a classic scene to make. The architecture and materials are not too complex, and it’s filled with lots of cool props. I actually started the scene a while back, but at the same time, Joakim Stigsson published his legendary gas station scene. When I saw that, I wanted to wait a while before making my environment. It kind of felt like going up after Bruno Mars in a singing contest. You don’t wanna do that.
So I picked it up again about two months ago. That’s when I came up with the idea of the scene being set in Roswell, New Mexico, a place known for the alleged UFO crash in 1947. Telling a story with your environment is something that is really hard to do and something I want to become better at, so with the Roswell setting, I felt like I had a strong story.
I use PureRef for my references. This was my main reference sheet where I could just throw in things I wanted in the scene. It was really good to just brainstorm and to get a grasp of how big the project was. Then I had other reference sheets for specific props or materials. I also kept an excel document to track the process of everything.
I liked the idea of a desolate place in the middle of nowhere. A quiet, isolated place. Throwing in a loud UFO crash felt like a complete opposite of this. I really like that contrast.
My blockout started in Maya just blocking out the geometry. As a first step, I try to focus on the shapes and forms of the buildings.
I built a basic scene in Maya, and started blocking out shapes, and also started thinking of how to split the pieces up into modular pieces.
Then I exported that entire thing to Unreal to actually get a sense of scale inside of the engine. and I also created a few materials inside of Unreal to kind of block out a color vibe.
What’s so amazing with Unreal is that you can just press Play and actually run around in your environment and get a better sense of scale.
Then I return to Maya and make tweaks to scale and form and then I make the actual modular pieces.
Modular pieces textured in the engine:
After that, I started blocking out some of the landscape surrounding the environment and trying to find a good composition. I experimented with importing a heightmap that’s created from LIDAR-data. It was fun to learn the process, but I didn’t get the desired results, so I sculpted a custom landscape within Unreal.
One more important part was to early try to find cool camera angles and also to try different compositions for the final shots. Knowing this, I could focus the landscape around these shots, and not put as much effort into the parts that would not be as visible in the end.
Early on, I put much of my efforts into the tech parts of the scene. Planning my materials/shaders and what I needed tech wise to create the scene in the smartest way possible.
It was really awesome to have a material where you could quickly iterate things in the engine. I set up parameters to change color, roughness, and a few other things. It’s really amazing to parameterize as much as possible in your master material so that you can tweak your values in the engine.
One part of the material I had a lot of use of is a mask for the base color. This way I could easily try out different colors on certain parts of a texture and find something that worked in the engine.
The reason I’m using lerps instead of static switches is that it’s cheaper because with switches, the shader has to compile every possible outcome, and that can quickly add up with lots of switches. It’s maybe not as pedagogical to use lerps, but I knew that I was the only one who was gonna use this material.
It’s really easy to get your masks directly from Designer or Painter. You can save a bitmap from anywhere in your graph.
I wanted a huge cliff wall behind the gas station, mainly to block off the scene, but also because it just looks really grand. It emphasizes the feeling of the gas station being isolated and even small with these huge cliffs looking down on it.
Blockout in Maya
Here I just try to find good shapes, using references from the real world and also other people’s work. It’s also important to have rocks that can be rotated and scaled. So the goal is to use as few rocks as possible in the most ways possible.
Import blockout in ZBrush, Dynamesh it and start sculpting
I usually start with Clay buildup to get some big shapes, and then use Trim Smooth Borders to get some rock shapes. What I love about that brush is that it’s super aggressive and kind of has a life of its own. You can just go wild with it, and it will lead the way to some nice shapes. Then I use a couple of other brushes until I’m happy with the shape. I sculpted these rocks quite fast because I knew they would be in the background and also have a tiling texture that would take care of the smaller details.
Decimate copy of the rock and use as low poly
I duplicate the rock and use Decimation Master in ZBrush to get a low poly that works. It’s not the prettiest topology, but it’s a static rock that will be in the background, so it was alright.
After that, I UV’ed the rocks. I laid out all the UVs of all the cliff rocks on the same UV island and then baked the normal map in Marmoset. These rocks are huge, but it worked with a shared 2k map for all the big cliff pieces.
So I have a baked unique normal map for the rocks, and then also a separate rock material created in Designer with Base color, Normal, Roughness and AO.
The node BlendAngleCorrectedNormals lets you blend two normal maps. I have the baked normal and regular normal separated when it comes to tiling. This way I can scale them independent of each other.
For UV tiling, I use two different material functions. This was the first time I used material functions, and they’re amazing. Saves a lot of time! So one material function is just a basic UV Tile function (MF_UVTiling). The other one (called MF_UVScale) scales the texture down if I scale the object up. (I got the last one from Warren Marshall’s YouTube channel, he shares some really cool tips there!).
Here you can see me change the tiling of the tiling material, but the baked normal remains the same:
Here you can see that if I scale the rock, the tiling texture remains the same texel density, but the baked normal scales in relation to the object:
When it comes to the composition of the rocks, I think it’s just important to look at real-world references and try to imitate that. I also really liked what Nicolas Dougoud did in one of his environments, so I reached out to him to get some info. One thing I love about game development is the community. You can basically contact anyone in the business, and like 99% of the people actually replies and gladly shares their tips and tricks.
When it comes to asset creation, it was the thing I was looking forward to the most. I kind of saved that to last because I really enjoy it. The first part of the project was just to set up all the tech and to all the planning, so I could have fun and just create content the other half of the project.
And as I stated before, I had planned to do this environment for a long time, so some of the props (like the car and the gas pump) were already done. I just had to retexture them to fit the scene.
My basic workflow for creating assets is kind of this (if you want a really detailed breakdown of my workflow, you can read about it here):
- Blockout in Maya
- High poly in Maya or ZBrush depending on the asset
- Low poly, based on the blockout, and UV
- Bake in Marmoset
- Texture in Painter
Pretty straightforward. Just gather lots of references and start to model a blockout. This will be used as a base for the low poly. Be sure to have the scale and silhouette right.
If it’s a hard surface thing I tend to do everything in Maya, and if it’s a bit more organic shapes, I will probably use ZBrush. For the vending machine, everything was done in Maya.
Low Poly and UVs
Now I start thinking of how I want my final geometry. So I use the block out as a base and also figure out what parts will be baked down on the normal map. For the vending machine, I tried to bake down as much geometry as possible and the results were really good. When I UV hard surface stuff, I always set up my hard edges in Maya first. Then I just cut the UVs along the hard edges, and it’s pretty much done. Most of it is done with scripts as well, so it’s a pretty quick process.
Preparing for bake
Here it’s really important to set up some materials on your high poly inside of Maya so that I can bake out a Material ID map to use for the texturing later on. It doesn’t actually matter what the materials are, just as long as they are different from each other. So like raw metal has one material, plastic one material, painted metal one material, glass one material and so on.
I tend to bake all my assets in Marmoset because I think it’s the fastest and easiest baker that I’ve tried. And with the Baking groups, it’s really awesome to bake out clean maps. You just have to name everything in Maya in a certain way, and then Marmoset will create different bake groups for you. So it’s like an explode bake, but you don’t have to explode the geometry.
In Marmoset I bake out the maps I need and then I go to Substance Painter to texture the asset. In Painter, I import my freshly baked maps and assign them to the correct slots in the texture set settings. Then I start splitting the materials up, and here is where the use of the color ID map comes to use.
I create a new fill layer or a folder and then right-click and choose Add mask with color selection. Then I choose pick color from the color selection. And then I can just color pick on the mesh what I want to mask out. It’s really handy for parts where you have baked down the geometry, but want to separate the material for it (like the hinges on the vending machine).
Then I just texture away! Same as everything else – gather lots of references and try to find good material definitions. And also import your stuff to engine early on and see how it looks there. That’s the only thing that matters in the end.
Use what you have
Another tip is to use things you already have. If they aren’t hero props, I think you can get away with just throwing some stuff in there to fill out the scene. I used bits and pieces from another project I did previous to the gas station. So I just took the parts I wanted from that piece and rebaked and retextured them to fit the scene, and in a very short time I had a lot of scrap parts and even a bicycle I could use to fill out the scene.
The use of splines was very handy in this scene. The road, fence, electrical poles, and some decals are all splines. Most of them are landscape splines, so they follow the landscape, which is really nice.
Electrical pole spline:
I struggled quite a bit on how to make the tire tracks in the landscape but ended on a mix of splines and decals.
Basic deferred decal:
And here are the settings for the spline decal. The mesh is just a square plane. The decal and the opacity mask are created in Substance Designer.
Grounding the props
I received some feedback from a classmate who thought the car looked a bit stiff and didn’t look grounded. With small changes, I could really make the car fit the scene and tell a story of its own.
- Opening the door makes it look like someone just ran away in panic.
- Adding skid marks behind the car so that you can see that it just hit the breaks.
- Turning the front wheels a bit.
- Tilting the bumper just a few degrees made the car a lot more realistic and used.
- Adding some wood crates on the bed.
These small changes took the car from a stiff CG looking car to an interesting storytelling piece.
Lighting is very, very hard and time-consuming, but it’s at the same time very important. It is what’s gonna sell your environment. I can really recommend checking out the Unreal Lighting Academy on YouTube. I watched some videos of his before, but it was really hard to take in all the info. So I recommend watching when you actually have a scene to light up so that you can test all the things he talks about.
The lighting is a mix of dynamic and baked lighting and the main light sources are a directional light (the sun) and a skylight. Oh, and the sky is a texture from CGSkies, that’s applied to a sphere in Unreal. It really made the scene pop to use a custom sky than the standard Unreal sky.
When working on lighting, it was mostly balancing the intensity of the directional light, the exposure in the post process volume and the intensity of the skylight. It took a lot of time but slowly I started finding something that looked nice, and then just continued to refine the values. It’s just important to think what kind of setting you want. Midday / nighttime /dusk. Also look at references and try to analyze and imitate what you see.
After that, I tweaked a few values in the post process like the saturation and such. I also took a screenshot of the scene and tweaked the image I Photoshop, and then I tried to simulate my results in Unreal. I tried using a LUT (Look up table) but found it easier in the long run just to tweak the actual values in Unreal.
I also relied quite heavily on the Exponential Height Fog, using volumetric fog. This was mainly to focus the scene to around the gas station and create fog in the far distance.
The project took about two months, but with other classes in school at the same time. The most challenging part was to find a good composition. If I could go back I would probably spend more time in the blockout and just focus on a good composition.
I also had this project as a way to force myself to learn Substance Designer, and that worked quite nicely. I knew what materials I wanted to have for the scene, and having a clear picture of what materials to create in Designer made it easier to work towards that goal.
It was also very important to keep a list of everything that had to be done. If I was unsure of what to do or felt that I was just fooling around in the scene, I could just check the list and start checking things off. It’s just a good feeling to check things off a list and to visually see that you’re progressing.
And the most important part – getting feedback and iterating on that. I got lots of help from my teacher, classmates and different forums, and that will make your art so much better.
Thank you for your time, hope to do this again sometime!
Below we are listing a couple of related Unity Store Assets that may be also interesting for you.