Kevin Buck did a breakdown of his UE4 environment Vintage Bakery talking about modeling and texturing props, creating tiling materials in Substance Designer, and making baked goods with photogrammetry.
In case you missed it
You might find these articles interesting
My name is Kevin Buck and I am a recent graduate of the Game Art & 3D Animation program at SAE Institute Zurich. Previously, I worked as an IT System Engineer for a Swiss Bank, but because my desire to work as an environment artist grew, I quit my job and started to work full-time on my portfolio. I am currently looking for my first job in the games industry.
When I was four years old, I started to get into video games by playing some of the first Pokémon games on Gameboy as well as on the Nintendo 64. Since then I kept developing my never-ending passion for video games, which led to my interest in game development, more specifically the 3D art side. I just knew I wanted to be part of the game development process and work on great projects.
I got started with 3D art by following along some of the tutorials that are offered by Pluralsight before being enrolled in the Game Art & 3D Animation program at SAE Institute Zurich. There, I then tried out and learned more about some of the different artistic disciplines in game development such as animation, concept art, character art, environment art, etc. I quickly knew that environment art is what I wanted to get deeper into, as I have a strong passion for playable gameplay spaces that are visually stunning and have great storytelling elements to them.
Before getting further into the article I want to mention three artists: Kenan Wilsher, Patrick Ziegler, and Sean Gorman. They helped me with this scene by investing some of their valuable time into giving me feedback at different stages as well as advice or ideas on how I could tackle certain issues or what the scene could further use.
Vintage Bakery: Goals and Inspiration
My goals for the scene were already defined before I came up with the idea. I wanted to create a rather small space that was packed with a lot of different props. I also wanted to improve all aspects of 3D environment creation including modeling, texturing, composition, set dressing, storytelling, and lighting. Another goal was to implement photogrammetry into my workflow, since I think this is a method of asset creation which will see more use in the future, especially for games that follow a realistic art style.
A bakery that is situated around the end of the 19th and beginning of the 20th century happened to be the perfect idea to follow and fulfill my goals. Multiple different sources inspired and gave me this idea. One source is one of my hobbies. When I am not sitting in front of the computer producing art, there is a chance that I am out with either friends or family enjoying good food. When I go to the grocery store, I always notice the lovely smell of fresh bread and other pastries. I very much appreciate the time and effort bakers invest to supply people with one of our staple foods. Finally, I really enjoy the heavy use of wood in architecture and furniture that was present in the 19th and 20th centuries.
References, Planning & Blockout
When it comes to collecting references, I usually start off by searching for concept artworks as well as real-life pictures that represent the location I want to recreate. The tools I use for that are Google Images and Pinterest. The good thing about both these tools is that if you see and click on a picture that could be of good use, the tool suggests other images that are similar to the one you are currently looking at. This way you can dig deeper in your search for reference without having to try out different keywords.
In my case, I did not find any specific concept artworks, so I just stuck to real-life images. I mainly looked for bakeries as well as general stores from the past but also from the present. Once collected, I assemble the images in PureRef as a separate reference board which I label as ‘Layout’. PureRef is a great, free to use application for assembling reference boards. When I analyze the references I collect, I look for answers to questions such as what can be found in those places, how things are assembled, what the mood I get from it is, what is something very typical about those kinds of places, etc.
In addition to images, I like to read up on information about different topics that relate to the scene I want to recreate. Wikipedia and similar websites are great for that. It is also worth mentioning that online store and reselling websites can be a great source for when it comes to finding out the average dimensions of a specific prop and what materials it is made of.
Once I have my reference board for the layout, I create a list containing all the assets that I want to model and place in my scene. When you start a new environment, you may get a rush of ideas for props to model and then forget about them again later. Thus, I think it is a good idea to write down those ideas. You can constantly add and remove props from the list as you progress in creating your environment. If I happen to run out of ideas for the moment, I start to create smaller reference boards for each of the assets on my list. During the creation of my vintage bakery scene, I learned that it is not wise to only add images of the props themselves but also of the materials they are made from. Those images should also show how these materials may change over time.
With the reference images collected, I moved on to making a blockout for my environment. Even if my asset list was not complete at that time, I still proceeded to block out each asset that was on the list. For modeling, Autodesk Maya is my go-to application. If you are having trouble finding out how tall, wide, or deep a prop you are currently modeling is, then I highly recommend you use the measure tool. It is simple to use and can save you time to get the scale right. Placing a reference model of a human that is about 1.85 meters tall can also greatly help with that.
Once the blocked-out models were done, I imported and started to place them inside Unreal Engine 4. If you use the 3rd person game template you can walk around in your scene with the standard character and again eyeball and judge the scale of your props as well as structural elements (wall, ceiling, floor, windows). To round off the blockout phase, I did an early light pass to set the mood.
Creating Tiling Materials within Substance Designer
When it comes to texturing the structural elements, I think it is good practice to use tiling textures. While analyzing my references, I found that mainly concrete as well as brick were used for the walls in the past. Quixel Megascans had two tiling materials that I knew would fit perfectly within my environment. Since I wanted to utilize vertex painting in this scene, I took the texture maps of the concrete wall material into Substance Designer and further adjusted them to create a dirty version. I then had a clean version as well as a dirty version. With those maps, I was able to create the vertex paint material. How to do so is well documented by Epic Games themselves.
The other tiling materials which I wanted for my scene were wood planks for the floor, aged wood for the beams that support the wall, and painted wood for the board that acts as a transition between the ceiling and the walls. If you are still learning Substance Designer like me, I think downloading other artists' materials and studying their graphs as well as watching tutorials and following along is a practical way to learn this software. Levelup digital and Gumroad have great paid tutorials, whilst you can also find good tutorials for free on YouTube. I do however think it is good to try and give your own touch to the created material and not just make a one to one copy of it.
As soon as I had all my materials, I started to import them into Unreal Engine and apply them to my structural elements.
Modeling and Texturing the Props
When it comes to modeling, I sort the assets from my list after their size and the amount of space they take up in the scene. Once sorted, I work that list off in a top to bottom fashion. For this scene, I mixed between using face weighted normals as well as baked normal maps. Face weighted normals are a method of shading your prop in a way that its edges appear to be very smooth and it only requires a slight addition of polygons. You can achieve this by chamfering (in Maya it is called beveling) the edges of your prop by one segment. You can then either run a script that automatically weights the faces for you or change the beveled edges to a soft shading manually. I mainly used this method on most of my larger props like shelves and structural elements as I think it is totally acceptable, especially for portfolio work. I can also well see an increased use of this in games.
Another thing I thought about when modeling and UV unwrapping my props was, which parts of an asset I may be able to reuse in order to reduce the number of texture sets needed for a said prop. I then came up with several solutions. In the case of the large shelf which holds most of the canisters, I decided to only model two different drawers and then reuse them in various ways by flipping or rotating them. The same went for the other assets in the scene such as the cast iron ornaments of the bread shelf or the pillars and certain faces of the counter shelf. Smaller props like the coffee canisters, breads, or cook utensils were reused as a whole and placed and assembled in different ways to create a sense of variation within the scene and make it more believable. While unwrapping my props, I kept making sure that the texel density of the UV shells was at a constant 10.24px/cm and that the UV space would be used efficiently. Thus, it was not unusual to see multiple smaller assets packed into one UV set.
For the curtains, I used Marvelous Designer. I personally think that for clothing and fabric meshes, it is a better solution than the built-in nCloth simulation provided by Autodesk Maya. Curtains are also something basic to create within Marvelous Designer so if you are just getting started, you can expect to find many free tutorials online. It is good to know the dimensions your curtain or other fabric meshes should have so you can set the correct length and width of your fabrics in Marvelous Designer without having to change the scale afterward. When I was happy with the simulation of my cloth, I exported the mesh to Maya and then did a retopology.
As mentioned in an earlier part of this article, I mainly used tiling textures for the structural elements whereas the rest of the props had their unique textures. Sometimes a prop would have multiple material slots due to its size and my will to keep texel density consistent. Those assets were textured within Substance Painter.
For most of the wood materials in my scene, I started off with a layer containing a base wood material that was provided by Substance and then went on to bring in color and roughness variation using different blend modes, layers, and masks. This was then topped off by adding some more storytelling elements such as dirt, dust, and damage in places where it makes sense. I know some people may like to just add in a smart mask for these layers and call it done. This can end up making the prop and detail look very procedural, so it is always good to further mask out parts of the detail either by using a paint brush or by blending in other masks or texture maps.
For the labels of my coffee and cookie canisters, I had to search on Google images and Pinterest and fetch them from there. When browsing for them, I made sure that they also fit the time my vintage bakery was set in. I looked at the colors of those labels as I wanted to bring in colors that would make them stand out more. I did this by applying color theory principles. I knew that a big part of my scene already had a brown color tone, so I went on to find out what colors can go well with brown. Adobe Color is a great website for this. You can define a color and the website will automatically generate the complementary, monochromatic, different shades, etc. of the said color. You can also upload a picture and extract the color theme as well as the color gradient from it. The tool then shows you an average of the five most dominant colors from the picture. Once I found the appropriate labels from my canister and imported them into Substance Painter, I correctly placed them on the props and again topped it off with some dirt and dust.
As soon as I was happy with the textures, I imported them into Unreal Engine and applied them to the appropriate asset. With the blockout I did earlier on I already had a plan of how and where to place my props. Of course, you do not have to stick to your blockout and can constantly make changes to the composition, etc. but it can give you a good base.
Using Photogrammetry to Create the Baked Goods
As I set the goal to make use of photogrammetry in the scene, I found the bread assets and other baked goods to be the perfect opportunity for this. To quickly explain, photogrammetry is a method to create 3D models, by feeding photos to photogrammetry software. The software then aligns the photos and creates a 3D model with a high polycount of the object that is the focus in the photos. The more photos you feed to the software, the more accurate and high quality the 3D reconstruction from the photos is. Guilherme Rambelli made a great tutorial for The Gnomon Workshop in which he goes about how he creates assets for games using photogrammetry. I used this as an opportunity to learn what makes a good photogrammetry workflow.
After I purchased all the different types of bread and other baked goods that I wanted to have in my scene, I first had to take pictures of them. I used a Canon EOS 600D with an 18mm -135mm lens. The shutter speed was set to 1/100, aperture to f/9, and ISO to auto. The images that I shot in RAW format were sharp and had good exposure. When you take pictures for photogrammetry assets, it is always good to keep in mind that the flatter the light is and the more evenly the object is lit, the better the reconstruction will be and the less cleanup work needs to be done because it will have little highlight/shadows baked into the base color texture which will be essential for the albedo map. Thus, shooting images for photogrammetry on an overcast sky day is most often the best scenario. However, I was able to neglect the later recommendation as I did not have to shoot the images for my assets in an outdoor environment. Yet I still had to make sure that the place was bright enough and that there would be no direct sunlight onto my objects.
For each of my assets, I took about 60 to 80 photos, which consisted of a top-loop, a mid-loop, and some closeup shots of various spots. Even though it may not be optimal if they would be used in a game, I did not capture the underside of the breads as I knew I would assemble them all ‘looking up’. For each loop, I went around the object in a full circle. When shooting the pictures, it is important that there is an overlap of at least 30-50% between them so that it will be easier for the software to align them. After the image shooting, I converted them from RAW to DNG format and quickly fed them to the photogrammetry software to test the alignment. To do so, I used Reality Capture. The test turned out good, so I moved on to doing pre-processing of the pictures by giving the pictures more clarity as well as eliminating shadows and highlights. After that, I again fed them to Reality Capture. This time I reconstructed the assets of the scanned object two times. The first model, which was used later as the high poly to bake the ambient occlusion, curvature, etc. from and a second model, which was used to bake the base color texture as well as bent normals from. The second model had a lower polycount than the first one and needed to be texturized by Reality Capture. For that, the software uses the colors from the pictures it aligned.
The next step was to import the first model into ZBrush and create a low poly from it. I tried out both, using decimation master and doing a dynamesh at a low resolution. The latter one worked better in this case as there was no unnecessary overlap of faces or many smaller vertices. I also did not seem to lose much detail in terms of shape, so it fitted my needs. Using the UV master, I did a quick unwrap of the asset. The next step now was to bake the maps. For the bent normal as well as the base color texture, I used Substance Designer. The second model from Reality Capture was used as the high poly. Both texture maps then needed to be imported into Substance Painter where I baked the other maps from the first model. For the roughness map of the breads, I created a fill layer and inserted the base color texture in the roughness channel. This converts the texture from RGB to Grayscale. I then played around with the levels filter and went on from there. Once I was happy with the textures for a bread asset, I imported it into Unreal Engine together with the mesh and started placing it. For every bread or other baked good that I wanted to 3D scan, I repeated the above-mentioned steps (taking the pictures, pre-processing, etc.).
In my opinion, lighting can be difficult to get right and is always quite a challenge for me. At the same time, it determines whether an environment or a prop looks good and appealing or rather not.
Timewise, I wanted to go for a morning / past sunrise setting. I started off by placing a sky light in my scene and lighting the scene only with it. In addition, I placed a sky dome to which I applied an HDRI texture which I found online on www.hdrihaven.com. I rotated the sky dome until the sun from the texture would align with the directional light which I placed later. I tweaked my light mass and sky light settings until the bakery had enough fill light. If you’re having issues getting fill light in your scene using just a sky light, I suggest working with the indirect lighting intensity of your sky light as well as the number of sky light bounces in your light mass settings. Next, I added in a directional light. To set the color of the light I used a temperature of 3500 Kelvin. Again, I had to bake multiple times until I was satisfied with the result. I then added in a volumetric fog and duplicated the directional light. The second directional light was set to movable and had an increased amount of volumetric scattering, which gave me the weak god rays and smooth borders around the shadows. There were still some props that I thought received too little light. For that, I placed some weak spotlights that do not cast shadows and only affect lighting channel two. To make this work, however, you also need to enable lighting channel two on whichever prop you want to receive light from your placed spotlight.
As the last step, I rendered one of the beauty shots and brought it into Photoshop. I then tweaked things such as the curves, color balance, and levels. I then applied the exact same changes to the color neutral lookup table template provided by Epic Games. This can be done by just copy-pasting the adjustment layers. I then saved this template as the color lookup table for my scene and applied it inside Unreal Engine. In the engine, it may sometimes look different from various angles than in Photoshop, so I ended up halving the intensity of the lookup table in my post process volume.
Getting the lighting right definitely posed the biggest challenge for me in this scene. It also ended up taking most of the time, but I can confidently say that I learned a lot with this environment. Looking at it with a critical eye I can also say there are things that I should try to optimize in later scenes of similar or larger size. For example, I had many unique textures for many props, which would probably not be very efficient in a game development environment.
A piece of advice I can give to fellow artists is to get some breaks during production as well as ask other artists, preferably more experienced ones, for their feedback as it can greatly aid the process and allow you to push yourself further. They may often see or notice things you would not do yourself. This is then often followed by an idea or a piece of advice about how they would approach a certain issue. The DiNusty Community, Experience Points, and the BeyondExtent discords are great places for that.
If you have questions about my workflow, the scene, or general topics, feel free to shoot me a message on Artstation. I will respond as soon as I can.