G. Daniela Ontiveros V. shared an extensive breakdown of the Hermit project, talked about creating a modular environment in Unreal Engine 4, and shared the modeling and texturing workflow.
Hello, my name is Dani and I am from a small town in Durango, Mexico. I studied at UNIPOLI, a public university that offers a university degree in animation and visual effects. At that time, I had chosen that university career because I viewed myself working in the videogames field even though I had only played SNES games and The Sims.
In 2019, after I graduated, I got my first job at CGBOT and moved to another city. I got very excited because I knew that my journey in this field had just started. The company is an outsourcing studio and I was part of a project for Star Wars: The Old Republic videogame. It had very specific requirements that their engine needed, therefore I learned how to do simple but effective assets. I also learned how tile/trim textures worked and how to use them for a modular set.
In the beginning, I was just doing props. One day, my lead asked me if I wanted to do a modular set. I had no idea how that was going to turn out but I managed to do it successfully. That was the moment I realized that tasks that require more planning were more entertaining and satisfying to produce. Something that I find oddly satisfying is organizing UV shells when I’m working with trims.
Before I left the job, I worked briefly on the restoration of the Resident Evil 4 VR textures. The textures had to be resized only with Photoshop. I thought that it would be an easy task but it was challenging. Even though I knew how to work inside Photoshop, working on that project helped me to polish my skills inside the software. After almost two years working there, I decided it was time for me to leave. I will be forever grateful for the people I met there and for the knowledge I got.
Later on, I took a CGMA course about creating modular environments. The lectures were imparted by Clinton Crumpler, and the teacher for our group class B was Taylor Brown. I didn't know how Unreal Engine worked, but that didn't matter because the course instructs about the engine.
The Hermit Project
The course had a span of ten weeks, so my scene had to be quick to finish. I think that the reason I chose that type of scenery had to do a lot with Resident Evil 7. I haven't finished the game, but I love to walk around the places that have been cleared out. I think that I was thinking of creating a place I would like to walk around.
I decided to create a living room with Victorian style because I like indoor places with wooded features. It makes them feel cozy and intriguing. Therefore, I collected pictures of living rooms with this style. I paid attention to the shade of the wood harmonizing with the color of the walls. I also looked for patterns that repeated through the furniture. I kept in mind that the walls, the floor, and the wooded parts had to be modular. That way I could save time and it was simpler to make it all look integrated.
These are the principal pictures I used as a reference:
Once I collected everything I needed for the scene, I made the blueprint. I had a general idea about making a place feel like a real living room/studio someone would have in their house.
I made a quick sketch in my notebook from a top view. I was thinking of creating a path that could leave a trace with footprints. Secret doors hidden on bookcases had always fascinated me. I think it's not conventional a place like that in average houses, so it creates an intriguing atmosphere.
This is a top view of the blueprint and the spotted places with their references:
I worked in 3ds Max and I set the unit settings at cm. I like to section the grid every 50 cm because I can determine faster the size of the objects. Then, I build the blockout pieces and position their pivot at the right place.
At first, I decided on the height of the walls. Consecutively the width and height of bookcases and the fireplace. Once I had set up the walls and the bookcases, I determined the size of the columns, the arch, and the cabinets.
I specially made the blockout meshes with a few details to make a reference for myself about the details that could work as a trim texture. As you can see in the images above, some parts have rough details that refer to the type of pattern or detail the texture should have. It also determines how versatile those details would be and how often I could repeat them.
Consequently, I made a paint-over as a personal guide to see if the colors and the excessive wooded parts would work together. It served as a guide to see if the patterns, materials, and ambiance were the right choice. Some things changed through time but these rough and ugly representations helped me out as a starting point.
Later on, I made a visual guide about the textures. I made a plan for all the assets that I had at the blockout set. This is just an example of what I do to help myself with the ideal approach for each texture. At the end of the project, some of the texture’s distribution changed and I got rid completely of others.
These are some of the templates I made at the beginning:
The images from above helped me to better organize my ideas and my time. I will share mostly about what I did with the modular assets. It saved so much time and I think that it was a good execution for its use. This may not be useful if the appearance you are looking for is way more unique and less procedural, but I hope some of the ideas that I applied can inspire other artists in their planning.
First, I prepared a tileable pattern inside Photoshop. Once I had the tiling texture, I designed a Normal Map with grayscale images of wrinkled cloth and paper texture. The Normal Map only contained the sectioned wallpaper. I added a bump of the pattern as a secondary detail inside Substance Painter. The reason why the Normal Map only has sectioned wrinkles and no pattern is that I needed to see the intensity of each detail. In addition, the AO map, and the ID map were also made inside Photoshop.
These are the textures that I imported to Substance Painter:
Once I had the textures, I used a huge square plane to use as the base mesh. The big flat square helps to catch details that are too repetitive. My texture workflow inside Substance Painter is very generic.
The first thing that I do inside the editor is changing the settings of the viewport. Then, I bake the additional mesh maps. I like to work with folders because it keeps my workspace cleaner. This way, I have more control over the intensity of details, colors, and bump textures. I also like to apply different blending modes on the layers for the base color and the roughness.
I followed a tutorial to create painted wood planks inside Substance Designer. The tutorial shows how to create everything just with Substance graphs. I chose to follow the tutorial because I liked how the wood planks looked. The number of planks, the color variation, and the wood details were perfect for visual starting points.
Honestly, I don't know much about Substance Designer, I just adjusted graphs by using common sense. When I adjusted the details that were useful for me and removed the ones I didn’t need. Inside Substance Designer, I "cleaned up" the Normal Map and the Ambient Occlusion.
Those were the main maps that I needed. Even though I liked the base color this tutorial provides, I needed to make the diffuse texture from scratch.
Two Trim Wood Texture
The first step I did was collecting as many photos of studios or living rooms with victorian style to see the patterns of the details. When the patterns are the same in the room, they create visual harmony despite it being all a repetitive material, in this case, the wood.
I always do a texture that has all the details already as a trim, that way the high polys will fit horizontally. Once I had figured out the details that I needed in the trim sheets, I modeled the high polys and baked the Normal Map.
Then, I proceed to do the textures inside Substance and all the wood details were generated during this phase. At this point, I think it depends on the artist on creating the wood details on the high poly before the baking process, or after during the texturing phase. Personally, I rather work with a clean Normal Map because it's more flexible to change, in this case, the intensity of the wood details. Also, cleaning up or adding more details if needed it's simpler this way.
In addition, I chose to work with a flat square again that is tiled horizontally. That was very useful to detect seams that the smart masks sometimes do on this type of textures format.
The only disadvantage with this is that it can look very procedural and generic. It can be easier to spot some patterns that look procedural in the Diffuse Map.
After finishing the textures, I mapped the trims onto low polys that had the same volume and structure as the high poly. Later on, I cut the trims to fit the size that my blockout meshes had.
During this phase, I had planned these two textures to have less use. I decided to make the ceiling panels, the stairs, some furniture, and a couple of decorations with these textures as a test. I wanted to see if they would look good with the same tone of color of shade in the wood. I can say that I wasn’t planning to abuse its use but it turned out better than I expected.
There are a lot of books in my scene, so I increased the amount of variety of book covers by baking the diffuse of real book covers onto my meshes. For this project, my intention was never to show the work of the books as individuals, but more as a supporting feature for my bookcases. Closely, they kind of look low res and quite sharp on the edges.
I searched and collected a lot of book covers. It didn’t matter if the quality was good or bad. The only thing that I was looking for was a flat image of a book cover. Online there are a lot of images that provided these types of flat textures.
Once I had a compilation of these images, I cleaned some of them inside Photoshop. If they had a lot of noise, I applied the Oil Paint filter. This is located on this menu: Filter > Stylize > Oil Paint. It has a tool that cleans better than the Reduce Noise filter. On the other hand, the oil paint filter can overly smooth the details on the image.
Then, I modeled a mid poly of a book that had UV shells that could be mapped onto the individual textures. To be clearer, I had twenty books with individual textures each of them. During this phase, I made sure that the book sizes were similar to the ratio of their respective individual texture. That way I had more variation without even thinking of how to make them all have random sizes.
Next, I duplicated all the books and organized the UV shells of these meshes all in one UV coordinate. I work with 3ds Max, so the best way to do this without attaching all of the is by doing a selection of the meshes, applying an Editable Poly modifier, and on top of that adding an Unwrap UVW modifier.
As the following step, I used the books that shared the same UV coordinates as the low polys, and the high polys were the ones that had individual textures.
For this part, I exported the high poly and the low poly with their respective subfix as an FBX object. Because they kept their textures’ data, I worked inside Marmoset. The baking process was as normal as a regular prop. The only difference is that the high poly and the low poly share the same geometry, and I only wanted the diffuse from them. As a result, this gave me the atlas with all of the book covers that I needed in only one texture set.
This method gave me a huge boost on something that could’ve taken me so long to do. I knew that the purpose of these books was just decoration, I didn’t need them to look like perfect individual props because they were going to be one on top of the other most of the time.
Last but not least, I faked a Normal Map inside Substance Alchemist. I don’t know how to use that software at its full potential but it helped me out to generate a Normal Map, a Roughness Map, and also the Ambient Occlusion. Honestly, you can generate these maps on other software as well but I wanted to try it once.
Because I made 60% of the scene with the wooded textures, it saved me too much time and I spent it on the individual props. Of course, it saved me time but I had to sacrifice having personalized details of damage, variation, and character.
The walls, the floor, the wood, and the books were the materials that I needed to see how my idea of the overall look was going. So, I proceed to do the next assets. Most of them had a regular prop workflow but the pictures on the wall are the exception.
I created three different trims that had alternative details. This gave me the flexibility to mix the trims between them and have different variations. I did clean the images of the classical paintings with the Oil Paint filter because the original noise of the paint was outstanding from all of my textures.
All of the unique props have the basic workflow of creating a game-ready asset. Most of them share the same texture because I didn’t want to deal with many materials inside my project. Also, for me, that way was faster to do the textures.
The four decoration sets had a similar workflow as the books. Particularly, the carton box, the light switches, the sheets of paper, the notebook, the open book, and the folders are real edited photos of stuff from my house. I followed the same steps of baking from a model that had a mapped texture.
There are two jars with blue details. I did not make the blue painted details during the texturing phase. Before that, I had prepared a trim texture with black and white details. Then, the high poly had the mapped black and white texture. While baking, I did extract the diffuse from the high poly model, and then I set that texture as a mask inside Substance Painter.
The plants in the vases are an arrangement of the foliage from Quixel Megacans. Their purpose was to serve as a decoration tool. The geometry had to be altered to make them fit inside a vase. I did change the color of the flowers. Originally, they were red but I wanted a softer look, so pink was a softer color.
Sharing the texture between assets can be an advantage sometimes. For me, it was easier to see the difference between the two objects seem similar. As an example, I have three lamps that have a similar style. Two of them share the same lampshade but, the one hanging from the top did not. It had to look as if it were part of the set but not the same one.
The curtains, the cushions, the tables, and the angels were easy to balance their texture because they are on the same document. I think it is up to anyone to choose this method or not.
Lighting and Rendering
I’ve always liked color correction and setting up the lights to create an ambiance. I still don’t know if I did it the proper way for this scene. I began by making blueprints for the lamps. For the blueprint set up, I imagined the ideal emission of light each lamp should individually.
On the level, the global light source with the lamps wasn't enough to light up the entire room. There were not enough windows and the curtains blocked the external light. At this point, the scene did not have the ideal light bounces it should.
As a result, I added some additional lights as support. These lights don’t come from a “source” but I placed them near light sources. I deactivated the “cast shadows” from the ones that were creating unnecessary shadows. I made sure that I kept more illuminated the areas near the windows and the lamps. To have a better visualization while placing the lights, their mobility mode was left on movable. It helped me out setting the intensity and the color of the lights in real-time.
Every window has a light that fakes the light that has to pass through them. Even without the curtains on the windows, the light couldn’t pass through them as I wanted. So, spotlights and rectangular lights were the type of lights I chose for this purpose.
Once I had the look that I wanted, I proceed to establish every light into static mode. Baking the scene with static lights increased the time to finish the process. In this phase, I could spot some shadow errors that most of the time was a lightmap problem. Additionally, there is a big difference between movable and static modes. While movable serve its purpose to illuminate in real-time, it can’t bounce the light in a more “vivid” way. In contrast, static lights made the scene look more alive.
After all of this process, I created the LUT. First, I took different screenshots of the scene. In Photoshop I arranged them all together. Above them all, I started switching the intensity of the contrast, the brightness, and the color balance as an adjustment layer, not directly to the images. Then, I grouped the adjustment layer and placed it on top of a Color Neutral LUT.
Inside Unreal Engine, I did change some features on the post-process settings. I decreased the Exposure Compensation and set it to 0.6. Inside the Film submenu, I set Slope at 0.9, Toe at 0.39, and Shoulder at 0.16.
I decreased the LUT intensity to 0.93. Also, to smoothen the dark shadows I changed the Gamma and the Gain values inside the Color Grading submenu.
Looking back at how it all started, I can see a big improvement in my artistic and technical skills. I gained more confidence as an artist. When I started planning the scene, I was very unsure about some decisions that I was making. Most of the hesitation came from how much could be done with a couple of textures. I hope somebody finds inspiration with the information that I shared.
For this particular scene, the main challenge for me what lighting. I've done a couple of renders before but I had never used unreal before starting the scene. The principal concern was that there isn't a step-by-step guide on how to illuminate a personalized scene. The settings that worked for other artists' projects did not work for my project.
At the end of the project, I realized that the number of hours I spent creating one asset had decreased. It doesn't matter that much how you manage to do something as long as it looks fine.
In conclusion, I would like to share some personal advice that made my production easier. I kept track of everything that I was doing in a notebook. I also had post-its with reminders of what to do, what to fix, what type of research I should do, etc.
Lastly, the organization is key. Setting the correct name of the files of the textures, assets, WIP scenes, references, etc., can save time and effort in the future. Also, I save different WIP editable files of the props. Usually, I save a different document for each phase. Something that was really useful to me is that I had a different folder for each asset (or set of assets). Inside they contained its textures, baking files, and editable files. I did the same thing inside UE. I had folders for all of my contents.
You may find these articles interesting