Antoine Moineau discussed step-by-step how he worked on his UE4 environment Hobbit Office: blockout, 3D asset creation and arrangement, texturing workflow in Substance Painter and Designer, lighting, and more.
In case you missed it
You might find these articles interesting
Hello! My name is Antoine Moineau, I am a 3D Environment Artist located in Québec City, Canada. My contact with the creative industry behind film and video games began with the amazing Hobbit artbook “Chronicles: Art & Design” when I was still in high school. We then started an artbook collection (still ongoing) with my best friend about our favorite universes and I decided to become part of this industry.
After my graphic design studies in France (where I am from), I finished my schooling in Quebec and decided to take advantage of the time I had during lockdown to fully embark on my passion for the video games worlds and become a 3D environment artist. Through many online courses I learned the basics of 3D, then more advanced modeling, then real-time rendering. By joining communities like Polycount or Dinusty, I was able to progress with the help of the experience and advice of many artists, critiques of my work, and all the resources shared by the community. I am now looking for a junior environment artist position, to continue my learning and progress within a team.
Hobbit Office: Idea
I was looking for inspiration for my next portfolio piece and I knew I wanted to create an indoor environment. I came across the work of Ognyan Zahariev and his course on creating a Harry Potter inspired room. His environment corresponded to many things I wanted to learn – the level of detail, the composition, the lighting, the textures. I took his course with the idea of following along with my own environment and in another universe. The idea of a Hobbit office came instantly, as I am a fan of the LoTR stuff and Middle-Earth related environments.
It didn’t want to make an accurate reproduction of Bilbo's office as seen in the movies, but rather use it as a base and mix it with other inspirations. I wanted to find and master the “Hobbit Style", which makes you feel good and warm, in a mixture of an English cottage and Fantasy elements. I first looked in the book “A Traveler in Middle-earth” by John Howe, artistic director on The Lord of The Rings and The Hobbit movies in which he shares his own inspirations (especially the Victorian style). This oriented my research and I created a PureRef doc with two main themes: Bilbo's house as seen in the movies and Victorian-style furniture.
I found loads of very precise reference images on the websites of antique shops and even browsed through the pages of furniture straight out of the Shire! I also scanned a John Howe concept showing a super cool Hobbit office and ultimately used all of those references to create a mix that would be believable in the visual universe created for the movies. I’d like to point out that my reference research continued throughout the entire project: with each new props, I refreshed my ideas with a little more precise research on textures, shapes, etc. so that I could always have them in a corner of my screen and check my work credibility.
I started with a basic blockout: I created the main elements of my scene in Blender, trying to capture the main shapes and their scale. I imported everything into Unreal and checked with the FirstPerson Blueprint whether everything looked consistent from the player's point of view.
The advantage of this step is to be able to plan the rest in a more concrete way like the number of textures and assets to create and their priority order. Everything seems much more concrete when the blockout is done and when I can actually move around in the space. For the prioritization of tasks, I followed the order that Ognyan Zahariev proposed in his course. In fact, it's a bit the same process as in reality: before putting the little scented candle, you must build the room, paint the walls, choose what floor you want, and then you can add your furniture and finally put all the trinkets on it!
I iterated a lot on my composition as I wanted to create a playable space with enough room for the player to move around, but at the same time have the feeling of an overwhelmed room with tons of details everywhere. Since I knew that I would need walls and a floor anyway, I started working on their materials at the same time in Substance Designer.
Main Materials in Substance Designer
As I’m not the most experienced Substance Designer user, I used the workflow from the great “Getting Started with Subtance Designer” course, starting by creating the heightmap with first the largest shapes, then medium, then small, and finally the micro details. I then used this setup to generate my other maps. I have retained several crucial aspects in the creation of materials (both in Designer and in Painter):
- Export regularly and test in the engine. Previewing the material in SD / SP does not accurately show how it looks in the engine, nor if it artistically works with the scene. A material can be very nicely done from a technical point of view but not match the atmosphere of the scene in terms of color, for example. I had to find a compromise between sticking to references and seeing what looks good in the scene.
Substance Designer Viewport (left) / The same material rendered in Unreal scene (right):
- The albedo can be created in the same way as the heightmap, by layering the colors starting from the largest shapes towards the micro details. Creating the albedo from the heightmap makes it easy to reuse the work done previously, by using certain “steps” from it. It also allows for visual consistency between colors and shapes.
An example of feeding the color with the heightmap steps in the floor material:
- The roughness map is very important in the final perception of the material. It adds a very organic dimension as well as storytelling. I always tried to have interesting variations, even in materials that might seem simple.
An example of roughness variation in a fairly simple texture:
I then applied these basic materials to my entire blockout to get a feel of the albedo’s influence on global illumination. I knew that most of my props were made of wood so the basic wood texture I made could give me an initial idea of the result.
Starting with the main textures allowed me to quickly find the atmosphere of the scene, the impact of light on different elements, etc.
The blockout with basic textures applied:
The great thing about Substance Designer and Unreal is the ease of iteration. I came back to my materials several times throughout the creation of the environment, and it was always very simple: I made the desired changes in Designer the non-destructive workflow of which allowed me to make rather extreme modifications even to the material base. Then I re-imported the maps into Unreal which automatically updated them in the scene. Do not hesitate to sometimes rework a step that you consider to be completed, especially when it's so simple to make a change. Even with a blockout, it is not always easy to estimate the right scale of a texture, its color, etc. Substance Designer allowed me to easily try ideas and correct my work at any time.
Evolution of the floor throughout the project:
3D Assets Creation
Once my composition was established and my main materials created, I began to model different elements. The challenge with the Hobbit style is that it has a lot of curved or even completely round elements, which heavily increases the amount of geometry in the low poly models to avoid any jagged effect on the edges.
The inner curve has more definition as it is way more visible and important in the scene:
Sometimes, I have to invest additional polygons in the models, and in this case, it was imperative to have elements with beautiful precise curves because curves and roundings are an integral part of the Hobbit style. I used a fairly common workflow for modeling:
- I first create a mid poly in which I invest as much geometry as it takes to capture the full silhouette of my asset. At this stage, it is important to think about the edge flow to facilitate the rest of the process. Having a correct topology from the start allowed me to avoid wasting time on technical issues and be able to concentrate on the creative part.
- I duplicate my model and create the high poly in two possible ways: 1) either I want to import it into ZBrush, in which case I make sure to have a consistent geometry on the whole model as well as support loops to have a good base of subdivision; 2) or I create the high poly directly in Blender and in this case I just make sure I have support loops that keep a precise shape while keeping bevels visible from a distance. Sometimes it's better to keep a wider and less precise bevel so that it remains visible from the player's point of view.
- Finally, I create my low poly by duplicating my mid poly again and optimizing it as much as possible without changing its silhouette. This is a rather tedious process but once I get started it becomes quite automatic and I quickly spot unnecessary edges and vertices. I ended up enjoying this game of looking for the smallest unnecessary polygons. It’s also in this step that I manually define the smoothing groups using the Sharp Edge function. I rely on my eyes to define each edge, which gives me more control than using autosmooth with an angle threshold (I use it at 180 degrees). This step is very important because I later use these edges as a base for the UV unwrap.
The final low poly version:
With so many elements to create, it is quite easy to find yourself overwhelmed with a lot of FBX files named more or less correctly, especially with a baking-based workflow and the need to have two models for each asset. I set a nomenclature from the start of the project – in my folder containing all my files, in Unreal, and in Blender. For each new item, I create a folder with the exact same structure and a Blender file with the same collections: Midpoly / Highpoly / Lowpoly / UnrealExport. This becomes automatic as the project progresses and helps avoid wasting time looking for the locations of various files (I think we would be very surprised by the result if this process was actually timed). The Unreal content browser is also very easy to organize and allows me to create a consistent nomenclature.
Example 1: The Office
For modeling in Blender, I use the Array and Mirror modifiers wherever possible. I mean, why do the same thing multiple times? I also highly recommend using the built-in addon LoopTools and its “Relax” and “Space” functions which allow you to create natural curves; I have used it on a lot of the props. For shapes like desk legs, I really like to start from a single vertice and extrude it by tracing the shape I want. Allied with the tools of LoopTools this is a pretty organic way to create interesting shapes.
An example of how I use LoopTools:
Example 2: The Door
For the door, I followed the same process, except I created the high poly in ZBrush. I used the DamStandard brush to outline each plank, then TrimDynamic to break up the even edges. I repeated this process throughout the different edges of my door, sticking to the logic of their presence; for example, the lower part of the door is exposed to the passage, feet, etc. and therefore more damaged than the upper part.
Door sculpting process:
I also randomly added a bit of texture to the iron ornaments with the ClayTubes brush, then ironed over them with the TrimDynamic brush to give an old worked metal effect. I didn't go into the details of my mesh like the wood fibers or the inlays, I kept them for Substance Painter which I am more comfortable with.
Creating an old worked iron effect:
Example 3: The Library
Since bookcases are almost part of the house’s foundations, I wanted to create the feeling of many years of their use and the wear and tear on their shelves. I created the high poly in ZBrush and attacked the wood more heavily from the feet and each ledge. In addition to the other brushes, I also used the OrbBrush pack to create more brutal cuts. To keep these details and get a better bake, I retopologized these more damaged parts in Blender using the Snap To Face tool. It adds real, visible damage to the geometry and makes the silhouette look much more organic.
Retopology using Snap To Face:
Importance of UVs
Having a good UV unwrap is super important for the next steps. Spending some time on the UVs pays off during the rest of the process. In this step, you have to think about the future textures of the objects and align the islands accordingly. In my case, I was careful to line up the islands in anticipation of the wood grain’s direction. This allowed me to take full advantage of the power of Substance Painter (it's satisfying to apply a material and see it react perfectly on a model!) and saves time. Blender doesn't have a very good reputation when it comes to its UV tools, but luckily there are several free addons that fill in some gaps, including the excellent TexTools and UV Squares that allow you to get nice straight UVs in addition to some manual corrections.
The UVs of the desk are mainly aligned horizontally according to my wood texture:
Texturing in Substance Painter
I used Substance Painter for baking and texturing. Right from the start of the project, I try to create a few Smart Materials during my first texturing phases to save time later. For example, I started with the desk and created a Smart Material from the work I did on it earlier since I wanted my furniture to share the same type of wood (for consistency). Afterwards, I used this Smart Material as a base for the rest of my wooden props.
Smart Material I created from the main layers of my desk:
Once again, it is crucial to rely on references at this stage to have a credible and natural result. My process itself is quite simple and is similar to the Substance Designer workflow: I start global, then gradually go into the detail and the micro-detail.
The Desk: I used Wood Walnut as a base material which I tweaked to my taste. While studying my references, I noticed that the wood was much darker in crevices and intersections of furniture, and contained a lot of color variation.
So I started by integrating these elements with a darker color variation layer that I hand-painted for each piece of furniture. Next, I added a lighter color variation layer with a higher roughness to simulate some wear and peeling of the varnish coat. These two steps already brought me a lot closer to my references, so I repeated them on every wooden prop I created.
The color variation layers that helped to get a more organic result:
I could have used generators based on the AO but I wanted full control over these first two layers because it was necessary to think about their logical placement according to the use of each piece, and with a generator, I would have spent more time correcting and painting over it than if I were doing everything myself.
Then, it is mainly a question of infusing the object with life: which parts should be more worn? How did the character who lives here use the object? Where should the edges be damaged, where should the dirt be? Substance Painter contains many Smart Masks that allow you to create these kinds of effects, as long as you use them as a rough base and not as a final result. Whenever I use a procedural mask or generator, it comes with a layer in which I rectify the result by hand with an organic brush like the Dirt 1 that I love.
For instance, I create dust effects using the Light generator that I orient vertically above my object to isolate the surfaces that point upwards (since this is where the dust logically accumulates). Then, I add texture to this mask with a grunge that I incorporate in the mask using Multiply blend mode. Finally, I add a paint layer and with a fairly soft brush, I adjust each area to get the effect I'm looking for.
The Door: I followed the same process for my door (with a different type of wood). However, I wanted to show the weight of the ages and wear and tear on the wood, so I specifically created layers to add variation to my roughness and breathe life and history into the door. I also knew that it was facing my window and therefore would be exposed to a direct light, so its surface area was very important. I put together various directional grunges (to stick to the grain of my wood) and got a very organic roughness map with a lot of variation. I made sure to have these variations of roughness all over my scene because I believe this is one of the essential components to get an organic and realistic environment.
Not enough roughness variation / Enough roughness variation:
The Stool: With this prop, I wanted to create an old, worn-out stool, lugged around the house as a side table. I imagine that a Hobbit has some furniture that he is very proud of and takes very good care of (like his carved chest), and some that he has salvaged from the auction of an old tavern (which contributes to the charm of Hobbit houses, a mixture of refinement and age). I found a photo of a super cool stool that looked like it had been through a lot and I used it as an inspiration for the design and textures. I did this with most of the props – having a real-world reference made my prop design process easier because I could rely on stuff that really exists to get accurate shapes and colors.
The stool I made (left) based on a real-world reference (right):
I approached details and small props by creating different sets that share their UV spaces and textures. I started with the books following Ognyan Zahariev's technique: rather than placing each book in Unreal to create stacks (which is doable but not really manageable), I assembled three stacks in Blender by hand – one small, one medium, and one large. I then merged each stack of books into one single object, exported it to Unreal, and arranged as I wanted. The same process goes for the shelves, I have four different book layouts that I exported and placed in Unreal.
Book stacks are each made of a single object assembled in Blender:
There is a repetition but by playing with the placement and the rotation of each stack of books, as well as with the other assets, I could hide it. I textured the books in Painter based on references following the same workflow as the rest (from global to micro-detail). I used alphas and the Lazy Mouse mode to create the inscriptions and embellishments.
Lazy Mouse can help to get nice curves and shapes:
Again, variations in roughness are very important in bringing books to life and creating the feeling that they have been consulted a lot. I've made ten different books, two of which have unique covers (while the others share the same one) for use on top of stacks or in close-up shots.
Other Prop Sets and Set Dressing
I wanted diversity in the stuff scattered all over the room, so I created five sets of various props (books, differently shaped candelabra, jars and cups of all kinds, different scrolls and sheets, and a unique set of props including the frame, opened book, and inkwell), each sharing a 2k texture.
One of my prop set, sharing a 2k texture:
With so many props to work with, the set dressing took a bit long but I did it gradually: with each asset completed, I placed it in the engine. Since I created the assets in an organic order (an order in which a real room would logically be gradually built), it all happened naturally. I tried to create prop stacks to show that there is someone living in this room and that he's not best at tidying up when something is on his mind. I thought about mini-scenes in the scene, which tell a little story: a book lying in the armchair with a mug next to it, a book so old that a lit candle melted on its cover, a corner where all the parchments are stored or simply the desk filled with various bottles of inks.
Prop stacking and mini-scenes:
Again, by thinking about the use of the objects and the room, it is easier to create an organic scene since it reflects someone's way of life. If you look at the carpet at the entrance to the room, there are traces that correspond to the repeated passage of the door over the fabric. The candles close to the wall left burned areas (made with decals) – someone lives here and lights them regularly.
Lighting and Post Process
My scene uses static lighting, which allows me to bake realistic global illumination. I would say that lighting is the most important factor in a scene, in terms of final perception. I tweaked it a lot as I created the scene because I couldn't be satisfied with the light in the back of the room. As I only use a directional light and a skylight, the only point where light enters the room is the window which is not that big. If I had only cranked up the power of my lights, I would have ended up with an overexposed scene on one side, and barely exposed on the other. I played with the indirect lighting intensity settings of my two lights, as well as with the orientation and power of my HDRI image (which comes from HDRI Haven) to obtain more uniform lighting without having to increase the power too much.
Detailed lighting shots:
In this step, I also adjusted the exposure parameters of my post-process volume, reducing the gap between the min/max brightness to reduce the eyes-adaptation effect. I was looking for a warm and cozy atmosphere that matched my image of the Shire, so I used a sunrise HDRI with natural colors, as well as a slightly orange-tinted light. I also used an exponential height fog to create a volumetric look and intensify the focus on the desktop. I didn't try to have physically realistic lighting but rather a bit exaggerated to add a touch of whimsy and fantasy.
For my post-process volume, I made some pretty subtle changes that change the final perception a lot when added up. I slightly decreased the saturation of the shadows and mid-tone to get closer to the colorimetry of the films, a more cinematic one. I also reduced the radius of my ambient occlusion (SSAO) to define it better and slightly increased global illumination intensity to make it pop a bit more.
Screen Spaces Reflections make the biggest difference but you can also spot subtle differences in color grading:
The biggest challenge in this scene has been the number of assets to be produced and the attempt to maintain the same level of quality throughout production. As I gained a lot of knowledge during the project, I had to take, for example, some of my first textures and rework them with everything I'd learned in mind.
But my motivation was decreasing as I neared the end. At the start of the project, every hour spent working radically changes the environment and the first few days of work move the scene forward tremendously. But when I got to the end, it was not so motivating anymore and yet it was at this stage that I could take the environment to a better state by putting in a few hours of extra effort. I learned to invest those hours, to ensure the quality of each asset, and to take my time, not to rush even when I wanted to move on. It took about a month and a half to complete this environment, working five days a week on it. I'm already thinking about the next environment I'm going to do, what I want to learn and what I'll be able to apply from the knowledge I've retained from this one!
To conclude I would like to thank my partner Lauriane who has always encouraged me, the Dinusty Empire community who allowed me to post my progress and receive comments and encouragement and 80 Level for this opportunity to share my work. I hope this has been an interesting read!