Michał Zieliński has shared the "Once Upon A Time In Hamburg" project, discussing the setup of composition, textures, and lighting, as well as providing insights into how the project was rendered in UE5.
Hi! My name is Michał Zieliński, and I'm an Environment Artist based in Poland. Previously, I have worked with indie companies, helping build their IPs. Currently, I'm working at Dekogon doing modular pieces. I am also a graduate of the Academy of Fine Arts in Wroclaw and a finalist of this year's Rookie Awards. My main tools are Blender, Marmoset Toolbag, Substance 3D Painter, Substance 3D Designer, ZBrush, and Unreal Engine 5.
The Story Behind the Hamburg Scene
It all started with a Facebook algorithm recommending a colored photo from the XIX century on my wall. The photo showed a building from the XVI century located at Pferdemarkt 28 in Hamburg. I loved the shape of it and how it stood out among the surrounding tenement houses. It seemed that for the people in the photo, this building held the same significance as the tenement houses hold for us today, amidst the surroundings of modernist skyscrapers.
Fun Fact: these types of buildings are narrower at the base due to a tax that once existed in Germany. The tax calculation took the lengths at the ground into account when determining the square footage of the building.
When choosing a portfolio piece, I think it's good to find a mix of your soft skills or interests in general with something that will challenge you. Apart from being interested in art, I am a history enthusiast and I felt like doing this roof in modular pieces would be something new, which is why I decided to do it.
I think the first stages of creating a scene are often underestimated by aspiring artists, and yet this is where most of the problem comes from.
When starting with references, it's good to have a couple of "categories" in mind. There are, of course, photos of the house from different years and angles. Additionally, I found a postcard and an etcher that I included on my board. I also collected several photos of Hamburg's Pferdemarkt (ger. Horsemarket) and Jacobi Chapel, which are situated behind the main house. Furthermore, I gathered images of timber houses in general to gain a better understanding of their construction and common features.
There's also a place for references of the materials (how they are decaying), details, and anything that is on your reference and will also appear in your render.
Talking back about the categories, it's nice to have other people's work as a reference. I highly recommend taking one or two games as your main reference in terms of quality and atmosphere. For me, Assassin's Creed Unity played a significant role. Even though it is a slightly older game now, I still found many answers to my questions within it. Also, I often looked at the modular castles and buildings from AC Valhalla found on ArtStation.
My other recommendation is to decide on the color palette, lighting, and atmosphere you want to achieve in your render. The best site where you can find frames is here, it's paid. If you prefer a free alternative, you can also try this one. While paintings or photos can serve as inspiration, I believe film shots are a better fit.
First Stages: Blockout, Lighting & Compositing
Blockout is made in Blender as it is my main modeling tool. fSpy is one of the best add-ons that may help you get good proportions. It's also good to have a reference with the humans around to establish what measurements are. Remember to pay attention to the edges of the buildings and break them a little with gutter and stuff like that.
As you can see the first blockout pass is just to get good silhouette proportions and set a lighting that will help you establish foreground and background. Typically, the first plan is in the shadow, the second plan is in light, and the third one is covered by the sky atmosphere. Also, it's nice to remember that triangle shapes are beloved in composition, and try to not have your focal point perfectly in the center. The best resource for a composition is Framed Ink by Marcos Mateu-Mestre.
While people usually leave the lighting pass until the end, I find it more helpful to do it at the beginning. Lighting determines what is prioritized and what is not. It doesn't make sense to spend too much time on textures for objects that are in the shadow. In a collaborative scene, multiple artists may work on different aspects, but when you're working alone, it's important to work smart, not hard! Afterward, I proceed with the color pass using flat colors to assess if the lighting requires any adjustments. Once I'm satisfied with that, I do the same process but with proxy materials, using textures from Megascans. Proxy texturing helps me determine what my final textures should and shouldn't look like.
When you're happy with your silhouette, it's time to break your blockout into modules.
From the technical side, there are plenty of articles explaining the basics. I could recommend this one. A little outdated but covers most of the things you’re considering in modularity so it's a good start.
Modules are like planning LEGO pieces. I find it helpful to categorize them into three types: regular, corners, and unique pieces. Regular modules consist of walls, corners are where the walls meet at 90-degree angles, and unique pieces include caps or the front of my roof – essentially, elements that are bigger or require specific configurations.
There is no simple answer to how modules should be designed. In theory, they should be reusable, and having fewer of them is generally better. However, the specific needs of the project play a significant role. I recommend taking a look at the portfolios of artists from AAA studios. While you might assume that each module should be around 1 or 2 meters in size, with control over major details like wooden columns, some studios prefer larger chunks for optimization purposes. Additionally, it's worth noting that normally, a window wouldn't be merged into a wall module like in my breakdown. However, for ease of scene control, I made that decision.
Pieces of advice that I can give for this stage:
- Set an edge loop every 0.5m for the vertex painting later. It should be more than enough for most cases.
- Remember to add pieces sticking out or a little bit of wobbling to some modules like the roof so they won't be completely flat, especially to the corners as they create a silhouette.
Now it is time for texturing, which starts with planning. Proxy texturing, along with texel density (here's the addon for Blender), should be done beforehand to help determine what should be tileable and what should be placed into a trim sheet. Often, wooden pieces are left for the trim sheet. I typically begin with the most common textures, such as plaster and bricks.
There are different approaches to creating tileables and trim sheets, and they usually involve a mix of Substance 3D Painter, Substance 3D Designer, and ZBrush. A great resource for understanding trim sheets is the tutorial by Polygon Academy. I use Substance 3D Painter for trim sheets and ZBrush with Substance 3D Designer for tileables. I start by sculpting the high-poly version and then add color or minor details using Substance 3D Designer in the end.
I did a small experiment there where I turned bricks from ZBrush into Displacement Maps and mixed them in Tile Sampler in Substance 3D Designer.
I made 3 different variations of the plaster.
Repeating any tutorial about vertex painting materials won't teach you as much as organizing all the nodes afterward. Organizing the nodes will not only help you understand and modify them effectively but also treat them as modular components. By making changes and organizing the nodes, you gain greater control over the textures.
If you're using ORM textures, the two most useful nodes for these setups are BreakOutFloat3, which allows you to separate the channels, and Append3Vector, which allows you to combine them back together if you want.
When sculpting trim sheets or working on high-poly models, it's beneficial to create your own alphas based on Displacement Maps from resources like Megascans. This resource is not only great for texturing unique meshes but also covers a portion on creating alphas for texturing.
Cherries On Top
With solid foundations, finishing a scene is almost done on its own. For me, this is the stage for additional set dressing, decals like leaks or on the edges, and vertex painting.
My approach to vertex painting is really basic. For blending the layers I use a mix of displacement map and grunge textures. The only thing that differs is that I’m using last vertex color channel just for normal map. It helps breaking the repetition on “grungy” things like plaster.
When thinking of set dressing, it's important to consider the context, such as the time period, season, and the activities of the people in that location. It should sell the emotions in the desired tone of the story. Since set dressing is a part of storytelling, it's best to approach it with cause and effect, just like in every great plot.
For example, in Hamburg, a port town, you would expect to see seagulls, fishnets, and cargo crates with fish. The street's name is literally translated from German as a "horse market," so including wooden mounting steps and possibly a commercial for horse feed on the right side of the render would be fitting. If there's a house where you can buy cider, it makes sense to have a few apples around. Although it's the XIX century, not the Middle Ages, Hamburg's history as a Hanseatic city (a confederation of merchant guilds) inspired me to incorporate as many commercials from that era as possible, to reinforce that idea. Other details, such as fallen leaves suggesting autumn, and a sleeping cat on a bench conveying a calm atmosphere, can further enhance the scene.
This was my reference for the typography of the horse feed commercial:
One of the most interesting things is that I used ChatGPT in this project. I used it as a search engine on steroids (just remember to verify its information). It also helped me create slogans from signs that weren't fully visible in photos or even create some of them from scratch as I don't feel confident with my knowledge of German.
One additional thing is if you want to create realistic smoke and fog you can do it with the particles, but I think the best result is achievable by using Image Sequence. I used Vincent Boudewijn's tutorial for that.
Doing a camera movement through your environment makes a big difference in your portfolio but if you, like me, are not a cinematographer keep it simple. Nothing fancy, simple pans and tilts, and eventually, dolly zooms (vertigo effect). You can add a little camera shake on the top of it. There's a great tutorial by William Faucher about that. Personally, I prefer very smooth camera movement in the cinema, but that little noise makes a huge difference, in my opinion, when you're capturing a 3D scene.
Final Words And Pieces of Advice
There are plenty of good tutorials on the Internet that will show you the tools, but it's not everything. It's crucial in the process of growth to confront your work with different opinions. There are many great communities like Discord servers of DiNusty Empire, Experience Points, and Beyond Extent, which is my favorite. Additionally, you can individually ask authors of the work you admire to share their opinions on the stuff you're working on – you'd be surprised how many of them will be happy to do that! If you have any questions, you can find me there: LinkedIn, Twitter, and Instagram.
Michał Zieliński, 3D Environment Artist
You may find these articles interesting