Hello! My name is Alex Hallenbeck, I’m 21 years old and I’m a Prop and Environment Artist here in the United States. I’m a Senior in college, and I plan on graduating this April. Over the past two years, I've been an intern at a company named KeyBridge Technologies Inc., and I’ve worked on pipeline development and production for several released Department of Defense training products.
Quantum Garage: Goals
Of all the personal projects I’ve worked on, this one is my favorite. It was fun to plan, come up with technical restraints, light, and present the scene.
I try to develop a learning goal for each of my projects before I start them so that I can structure the technical parameters beforehand. Something I felt was lacking in the environments I had created up to this point was an easily conveyed, yet strong sense of story. So, logically, the main goal for Quantum Garage quickly became to improve my storytelling ability.
Working with Reference
As always, I started the project by gathering essential references. In my early 3D days, I never used any because I thought, “I’m an artist, I shouldn’t need reference” - which is super wrong. Reference helps us stay true to the forms we’re trying to convey, no matter how fantastical or abstract, and it makes our work feel grounded in reality. Having said this, I found early on that if I have a ton of reference I tend to get hung up on the small details rather than moving forward. Over time, I’ve learned that the more I limit myself in this area, the faster I can get a blockout done and make early creative decisions.
For this project, I stuck with a couple of key concepts Ville Assinen made for Quantum Break (Microsoft/Remedy) that really inspired me, and then I spitballed a blockout from there. This gave me creative freedom, but also a good amount of constraint. As I continued to work on the project and moved on to solving specific models, I googled quick references as needed, but I didn't save any of it in my Purref board unless absolutely necessary.
I wound up keeping several pictures of different garages to help me with some texture and overall layout ideas, as well as some desk references. This kept me focused on my core composition and shapes instead of getting distracted with the super small details.
I’m traditionally a 3ds Max guy, but I recently switched to Blender both at home and work. This was my first big project where I used it from start to finish, and it’s really fantastic. I used a variety of plugins, a couple of which I wrote myself.
- Machin3tools: I use its radial menu system every 5 seconds or so, and I never forget to save now.
- MESH Machine: I think I mutter something like, “It’s just... witchcraft...” every time I use these tools. Just watch the demo, I can’t possibly explain them all.
- TexTools: Amazing for trimsheets and setting texel density. I was using these in Max way before I started using Blender, and it was exciting to have them waiting for me when I switched.
- Modifier List: I said I used to be a Max guy, right? This makes the modifier stack read sort of like 3ds Max’s does, and it’s just easier to navigate in general.
- Hallenbeck Toolkit: Not available for public yet, but I hope to finish and release it this summer! It adds a real-time unwrap slider that marks sharp edges and UV seams, then unwraps, averages, and packs all islands as the slider changes. I’ve also got the early stages of a CAD workplane-ish tool down.
I’m not big into programming, but I would greatly encourage any artist to learn just a little bit of it if they get the chance. Having the ability to automate a few repetitive tasks with a button makes you infinitely faster than someone who doesn’t. I don’t have any specific places that helped me learn the small amount of Python I know, but Blender Stack Exchange is always a good place to find answers to tricky questions. The code templates Blender has by default are also a great place to start.
Modeling the Space
My first step was to get the large props blocked out individually in Blender and then start to get a feel for composition in Unreal. I like to model assets with rough geo in the blockout phase instead of using primitives from a game engine. This way when I make updates to the assets, I can just hit “reimport” and it will update all the instances in my scene. I try to get the blockout done as soon as I can after I’ve got the initial vision from my reference. The sooner I have basic shapes “down on paper,” the faster I can axe stuff that isn’t working.
Having said all that, I was adding assets right up until the end, and adjustments will always be made as you work on an environment. I iterated on the scene composition a lot, and I went back and forth on where to put the machine and desk several times in the first week of the project.
I see this in a lot of 2D work at my college too, where students will paint something that looks cool, but it looks cooler when they turn it upside down. I think approaching 3D art like this can help us find really interesting compositions, and it lets us squeeze the creative part of our brain extra hard.
Initially, this environment was going to be a home office with a big machine in the middle of it. But as I began to lay out the models of the desk and chalkboards, I realized that realistically someone would be working on this in their garage where all their tools and materials are. There would also be much more space to tell a story, and for the hypothetical character to work.
Modular kits are king when it comes to game environment creation, and it was the workflow I went with for this project. The Modular Environments page on the Polycount Wiki is an amazing place to learn more about them. For this project, I modeled everything on multiples of ten so that all the structural pieces snapped together on the grid. For example, a door frame might be 120cm wide, while a wall piece could be 300cm wide. They will both snap together to a grid set to 10cm intervals. I stuck to this more strictly with the wall pieces than I did with the shelving, desk, etc since snapping everything to the grid can make an environment feel mechanical and unrealistic. Breaking that up is key to making a space feel believable, so don’t be afraid to “go rogue” and turn the grid snapping off when placing assets.
UVs were pretty standard, and I’ve got a mix of objects that use the trimsheet, and objects that are uniquely baked. Trimsheets are essential to achieving a high texel density in scenes while keeping texture costs low. The TexTools plugin for Blender really helps here, and it makes laying trimsheets out and setting texel density stupid easy. I owe a lot to Tim Simpson over at Polygon Academy for making an absolutely awesome series of videos over this process, and I would highly recommend that anyone who wants to learn about trims check them out.
For this environment, I used the same UV set for lightmaps as I did for unique bakes. 9 times out of 10, Unreal will do a solid job of packing and averaging everything, and the light bakes will turn out nice and smooth.
Materials & Texturing
I used Designer the least in this project, and it was for really simple tasks. I used it to make the chalkboard base material, the lights for the machine, and the pegboard on the back wall. It’s a really amazing tool, and even on simple textures like these, it saved me loads of time.
For the hero asset, I ended up using a smart material from one of my previous projects. It’s a painted metal with roughness variation in the shape of tiling hexagons, and I used it on my DT-45 project to add interesting surface variation and dirt masking. I think it worked really well on both props, and it was cool to get to reuse a tool I had made a while ago.
I used a similar procedural hexagon pattern to create the side panel details, which essentially meant I had a black and white mask of where I wanted the moving lights to be too. I used this in the material in Unreal to isolate the panning lights in the areas I wanted them to be. “Blur” layer filters came in handy here, and they let me control the emissive falloff really well. In Unreal, the material takes the lights texture that I made in Designer and pans it behind this hex mask. Then it gets multiplied with a light color and piped into the ‘Emissive’ output.
Another cool material tool I got to work on was a position-based UV offset for the shelving units that used the dirty wood material. The material looks at the position of each object instance and then offsets the UVs based on those 3 values. This way, I was able to get completely randomized textures across all of the shelves, which broke up the repetition really nicely.
Since the scene was a small one, I decided to push my texture budget a little in favor of getting some detail variation. Most of the props in my scene that don’t belong to the modular kit are uniquely baked and have their own channel-packed texture sets and material instances. However, I did group some like-items in order to reduce the amount of VRAM used. For example, I grouped all the lamps and all of the tools hanging on the walls into two sets of textures.
I’m a big fan of the material controls Painter brings to the table, and I used it for the majority of the tiling materials in the scene. I made the garage door, wood, and trimsheet textures with it. For the trimsheet, I started with some basic shapes in Blender with some soft bevels and then baked that down onto a plane in Marmoset Toolbag.
From there, I used the ID mask in Painter to isolate different strips. I made sure to use whole numbers in the slider values for the various noises in order to avoid seams when applying it to the scene. I had originally planned on using the nuts and bolts part of the trimsheet to add some smaller mesh decals around the scene, but I didn’t think it needed it as I progressed through the texturing phase.
Right around the time I started this project, Megascans became free to use with UE4. I decided to use them for parts of this project since I had never used a scan-based workflow before, and I wanted to see what all the hype was about. After getting the blockout done, I decided to peruse the library to see what I could find and began to get some ideas about the materials I could use. The final ones I decided on were a few variations of drywall, concrete, and some debris decals to add some grunge. I had to tweak a few scans in photoshop to get the tiling I wanted, but other than that they’re really easy to use.
I also used Megascans for all the grunge decals in the scene, as well as the chalk on the chalkboards. This gave me really fine control over where all of the writing was placed, and I’m really happy with how it turned out.
Hero Asset: Animation
The story I’ve settled on for the hero asset is that it’s a time machine, and the person who lives here is trying to go back/forward in time to find something/someone they’re looking for. It’s pretty basic, but it still may not be the story everyone sees - and I think that’s really cool! I’ve tried to intentionally leave some of my environmental storytelling up to the viewer, and I think letting someone else populate the world a little bit with their own ideas helps ground the space and make it feel more real for them. Making an environment isn’t always about telling an explicit story.
The machine evolved a lot over the course of the project, and at first, it wasn’t going to be animated at all. But I got talking with my friend Daniel Strickland about the design of the machine, and we both thought it would be cool to have little lights travel along the hex patterns. I said, “Hey, I actually think I know how to do that!” Making it float and spin was just the next logical step.
After getting the high poly and low poly modeled, texture maps baked out, and textures made, it was time to rig it. I had never done rigging before, so this was all new to me. The first step was to create an armature and name the created bone the ‘root’. I don’t claim to know what the industry standard is when it comes to rigging, but this helped me keep it organized. Next, I created a bone for each panel so that I had the option to open the machine up while it was spinning. I decided it was too visually busy after I animated it though, so I stuck with just a spinning shape and alluded to the idea of it opening on the chalkboards.
The final animation is pretty simple. I keyed the rotation of the root bone in every axis and rotated it in some interesting ways. With bezier tangents on the keyframes, I got a really nice smooth transition between each movement. Starting and ending the animation with the same rotation values allowed me to loop the animation in Unreal.
I left the default settings alone when I imported it into UE4 and then placed the animation asset in the scene. In order to have static lighting on the base, I had to split the hexagons off of it. This way I could set the hexagons to ‘movable’ and the base to ‘static’ in the details panel.
I probably iterated the most on the lighting for the scene. Luoshuang’s GPU Lightmass has saved me a ton of time in every environment I’ve worked on, and I’ve actually stayed away from the most recent UE4 updates just so I can keep using it in 4.23. I can get full production-quality light bakes in a ridiculously small amount of time - I think the longest I’ve waited is 20 minutes. That not only allows me to detect and fix lighting issues really quickly, but I can also set the mood of my scene early on and structure my assets in a complementary way. If you’re the type of person who isn’t afraid of changing a few lines of code in ‘.ini’ files, it’s definitely worth the time invested to set it up.
The scene is a combination of baked emissive, stationary, and static lights. Early on, I knew I wanted a wide range of values and a gradual transition between light and dark areas, which baked emissive lights are perfect for. The garage door light and all the small lamps in the scene are using emissive as static lighting. From there, I used stationary spotlights to bring more focus to the desk, machine, and chalkboards, and I use a directional light to accent the shelving. Finally, I added just a few point lights to help the backside of the machine read better, and brighten up the inside of the lamps. I also used a basic color LUT to push the overall color spectrum in a warmer direction.
This project was a ton of fun to work on from beginning to end, and I had a blast improving my storytelling skills. Thank you to everyone at 80.lv for letting me write about my work, and for giving us a place to read about great art! I’d also like to give a huge shoutout to Daniel Strickland, and to the Experience Points and DiNusty Discord communities for the amazingly helpful feedback they gave me along the way.