Fabian Denter discussed the production of his latest 3D environment Abandoned German Cafe based on a real location in his hometown.
In case you missed it
You might find these articles interesting
Hi! I'm Fabian, a 3D Game Artist from Germany. At least that's what I am in my free time because currently, I have a day job that has nothing to do with games at all.
I started dabbling in 3D almost a decade ago but didn't get very far until I took an interest in working with real-time graphics. Being a lifelong fan of playing video games, I suddenly realized that I might be able to make them one day. I learned many things through various online tutorials or by studying the work of other artists. To this day, I see stuff I eventually want to learn every day.
A year ago, a friend and I founded a small independent studio – Third Shift – and started working on our first game called Forever Ago. It's still a long way from release, but we hope to transition to working full-time on it soon!
Abandoned German Cafe: Inspiration
Because I have a day job and work on a game on the side, time for personal projects is quite rare. Still, I like to do one at the end of the year in my Christmas holidays as this is when I have a lot of uninterrupted time to do anything I want.
I often get ideas about projects I eventually want to do, and I always try to write them down (I use Notion for all personal notes, can highly recommend it). So I wasn't short on potential ideas, one of which was an abandoned and overgrown scene of a place that I know from real life: a small cafe in a small street in my hometown.
One good thing that is great about real places is that there are a ton of reference images to be found online. It turns out people really like to take pictures of their cafe visits!
Collecting these images and arranging them on a mood board was the first step in working on the project. Also, I was lucky and found a 360° panoramic picture someone had taken from the location, which helped immensely with setting up the scene's scale later. Unfortunately, Google Street View is not a thing in my hometown, so I had to work with what I had.
Google Maps still was a huge help. I used its 3D visualization features to see how buildings in that street look from all angles, even though it's low resolution. I also took a screenshot of the top-down view of the area and used it as a texture on a plane in my 3D application. Then I scaled it accordingly to serve as a guide for my initial blockout. It consisted of very simple geometry for the first pass, but I like to throw it into the engine as soon as possible to get the scale and overall layout right early in the process.
I gradually refined the blockout to include more details as well as the interior of the cafe. I established my main camera angle, but I also added a simple fly-cam script to my camera to see the environment from all angles because I didn't want it to look good from only one angle.
When I was happy with the blockout, I started modeling.
With scale and layout in place, modeling was quite straightforward. I started with the roads and pavements and continued with all the buildings. One piece of advice I often see is to start working on big shapes first and go smaller from there, and I think that's mostly the right way to go.
I made two sets of modular pieces to create some buildings, while others consist of unique meshes. The cafe itself is one of these unique assets as its architecture, especially inside, doesn't fit very well on a grid.
To use my custom vertex painting shader later, the main structures needed to have enough geometry. With that in mind, I distributed polygons as evenly as possible while trying to avoid an overly high polycount. This would allow me to do precise material blending later.
Almost all smaller props use the standard high-to-low-poly workflow where I create both versions of the asset and then bake the high poly down to the low poly.
I use Substance Painter for both baking and texturing, and I'd say that texturing props is probably one of my favorite parts of the whole process. The texturing workflow for this scene was pretty simple. First, I textured the objects as if they were new. Then I added age, wear, and dirt. My first pass on this was almost always too noisy and dirty. Seeing an asset isolated in the Substance Painter viewport and seeing it as a part of the environment in the engine are two entirely different things. It took a few iterations to dial back the dirt and grunge to the right amount.
By the way, I do all my modeling in Cinema 4D, which – from what I understand – is a rare choice for game artists. But I like working with it, as it has an incredibly easy-to-learn user interface and the modeling tools themselves are solid – though they might not be as sophisticated as in other software. But as I create most of my assets with standard box modeling workflows, the software doesn't matter anyway, I think.
Creating believable vegetation assets is always intimidating to me. Having a good vegetation shader plays a big part in it, and luckily there are great ones on the Unity Asset Store. The one I use in this scene is called The Vegetation Engine, and it's a complete vegetation rendering system, which works well both with other assets and custom meshes.
Another plug-in I used to create trees and bushes is MTree. It's basically a simpler version of SpeedTree and works directly inside of Unity.
I made a base tree and created random variations from it until I had three unique types of large trees, young trees, and bushes. I then scattered these in the scene by hand.
For smaller plants like grass or moss, I modeled cards in C4D and arranged them in clusters with their normals pointing up. I used the Megascans library to get the textures I needed as the focus of this project was not on creating custom textures by myself.
As mentioned above, I used Substance Painter to texture the smaller props. Another big part of texturing is tiling materials, and I made those mostly in Substance Designer, so it was very easy to iterate and create variations.
Because there are many brick or stone materials in the scene, it was quite easy to build the first material (in my case, the red brick wall material) and then create all the other brick or stone materials from the same graph. By changing the colors, arrangement, and amount of damage, I had many different brick or stone materials in no time.
Bringing It All Together
Aside from texturing props, one of the most fun things in environment art for me is building the level itself. As mentioned before, I had the main camera angle set up very early in the process, and this was the most important part of the composition for me. I wanted to guide the viewer's eyes towards the cafe building. Framing it with dark foliage and letting the sun hit the facade created enough contrast to achieve this, I think. Later, I also added a warm light inside to add color contrast as well.
Another important part was placing the foliage in the scene. The same advice from earlier (going from large to small) applies here as well. For example, I have always placed vegetation so that large trees are surrounded by smaller trees or bushes. And these in turn are surrounded by even smaller plants, such as grass or moss. This creates a natural gradient from large to small objects.
Inside the cafe, the placement of objects is inspired by the real-life version of it. I didn't want to make the interior look completely destroyed, but keep the original impression of a cafe, albeit dirty and abandoned. That's why the tables are still in their normal positions and only slightly out of place, chairs have been knocked over, and so on. I also used many decals to control the overall dirtiness.
Lighting and Rendering
The whole scene uses baked global illumination with a directional light providing real-time direct lighting. While Unity's internal lightmapping solution works well and is constantly improving, it isn't as fast as I'd like. Especially if you want a decent quality lightmap, the baking can take ages. For this scene, I used Bakery, which is a high quality, super-fast GPU-based lightmap renderer that I bought on the Unity Asset store. The lightmaps it produces are superior to those produced by the internal light mapper in every way.
Aside from lightmaps, I used light probes to light 99% of my vegetation. In some places, like the transitions between exterior and interior, it didn't always look right. In those situations, I either turned off light probes for a specific object or cheated shamelessly by creating another material version that would fit the lighting situation a bit better.
By the way, the foliage itself is not lightmapped and also doesn't contribute to the lightmaps. I still wanted to have some shadowing on the ground, and my makeshift solution for that was to place big green-ish spheres in the level and let them contribute to the lightmap. After baking, I turned them off and only their shadows remained.
The lighting itself is fairly simple. There is a single directional light that serves as a sun. I use two plug-ins to change Unity's standard lighting behavior: Next Gen Soft Shadows and HX Volumetric Lights, which both do what their names suggest. Sadly, the latter seems to be deprecated and not available anymore, which is a shame, as it was a really good solution for volumetric lighting in Unity's built-in render pipeline.
Aside from the directional light, I use area lights near the cafe's windows, because the bounce light provided by the sun isn't enough to illuminate the interior. That's it for the lighting.
Regarding post-processing, I use SSAO, tone mapping, color grading, bloom, and a vignette. Some shots on my ArtStation post have a bit of Depth of Field applied. In my opinion, color grading has the greatest impact on the overall look of the scene.
I'm glad I did this project. It's a scene that I had in mind for a long time, and seeing it completed makes me quite happy. I started around Christmas and finished in mid-January, which was only possible because I had nothing else to do during that time. I could also easily continue working on this for another month, adding more props, tweaking the lighting, or the post-processing effects. But at some point, I think it's the better call to say that the project is finished, create some pretty shots and videos, and move on to other projects – instead of endlessly adding stuff. Finding the right time to call a project finished is one of the hardest lessons to learn, I think. So, even though I can see many things I could improve, I don't feel bad about not doing it.
I want to say thank you to 80 Level for allowing me to write this small breakdown. I learned so much by reading those of other, more talented artists, and I hope it's been at least somewhat interesting or useful!