Game Art student Stijn van Gaal has shared the details of making a welcoming Italian alleyway under the mentorship of Christopher Radsby.
My name is Stijn van Gaal, a third-year Game Art student from Utrecht, the Netherlands. Ever since I found Blender, when I was about 16, I fell in love with 3D. However, I am only getting deep into the Environmental Art direction for a year now, doing my first personal environment work. Having a big love for walking in wild and urban environments, it didn’t come as a surprise. You can often see me wander in the beautiful city of Utrecht, sketching, shooting random walls and ground surfaces.
To be totally honest, I did not really like art when I was younger. Drawing and Classical Art were the worst. However, being surrounded by the right people in the right school has led me to a big passion and deep appreciation for these things. In 3D Game Art, I find that some of the principles sometimes get neglected for technical gimmicks or gameplay purposes. This totally applies to what I used to do: rough idea > modeling > a finished piece. For this scene, with the help of my mentor Christopher Radsby I ironed out those workflow quirks, focusing on the feel and composition first, then keeping it in mind for the rest of the process, I only used tech complimentary (and some fun experimenting).
Why I needed mentorship
This project was done under the mentorship of Christopher Radsby through the Mentor Coalition. The main reason I decided to do the mentorship was to learn externally from someone experienced so I could improve in my workflow, both in management and artistically/technically. With this knowledge, I would be more prepared to apply for internships at AAA companies. It also forced a commitment to make myself work consistently and not to be lazy.
Formation of the Concept
At the beginning of my concept phase, I had a big Italian Riviera style scene with lots of verticality, buildings, and details in mind. I made some blockouts in one single day and thought about making detailed models. However, Chris talked some sense into me and I started all over. I analyzed what my personal image of Italy was and what story I wanted to tell, writing down and describing the most important keywords.
See how vague the old keywords feel compared to the new ones? So impersonal and kind of boring. I wrote down associations to have a clear idea of what these words meant to me and the context I was going to use them in. Keeping in mind this information for the rest of the project was a big help in order not to get sidetracked.
- Castle/ Church
- 19th/ early 20th century
- Italy | The land of food, coffee, and art
- Cozy | Being cuddled by the city
- Hidden | Something you find and instantly get a rush
- Picturesque | Pretty shapes, organic flowing lines, and colors just like painting
- Colorful | Like a cartoon in real life
- Warm | Sun shining, plants growing and people are out and about
- Green | Buildings and plants are like a jungle
The new blockouts were a little more focused, I got better composition and location reference as well.
One thing I immediately saw after analyzing and condensing my composition reference was the recurrence of arches. I think it was due to the organic feel they create, breaking up the shape rhythm and framing the image. For my base composition, I chose to take the setting of the first image: a restaurant in a tight Roman alley with stairs leading up, adding the arch to frame it. This instantly turned the picture from boring and straight to organic and cozy. It also allowed the use of a spiral in the composition, drawing the viewer into the frame by using the curves from the arch, props, and buildings. To enhance this effect I also used James Gurney’s Spokewheeling Technique from the book ‘Color and Light‘. It gives you some idea of how to use directionality and straight lines to lead the viewer to a focal point, creating almost a magnetic effect. The perspective of the building helped, but I also had to make sure the props either played into the curve or were directed at the focal point. To prevent areas from stealing focus I broke up a lot of the straight lines and rhythms with curves or occlusion. It’s easy to make buildings repetitive so I also made sure they had various windows, height, architecture style and color.
For the values, I made sure that the light silhouettes would work by themselves. I chose to do a one third/ two third distribution with the smaller light area at the focal point, surrounded by a dark area. By doing this, and making the other light area triangle-shaped that points down, the viewer is more likely to look at the place I want them to.
During the first week, I also found Dishonored to be a good reference. Definitely not for the feel, as the thing I was going for was almost a 180 turn from Arkane Studios grim style, but I loved the organic way the buildings looked and the way they stylized textures by oversizing details and limiting noise in their textures. I tried to apply this style somewhat to both the textures and the architecture. Exaggerating everything just a tiny bit, targeting the 10-15% stylized look.
I always put composition first. Orientation and clumping of the ivy, the clothing lines, the tail of the cat, everything is geared towards the composition. The animals themselves were added into the project relatively late. The scene felt a little empty and sterile, so it needed some life. I thought about adding a couple at the tables, someone hanging out the window or an old man feeding birds. However, at that time, adding characters would be a little too ambitious. Then I came up with a small but sweet interaction of a bird challenging a cat. This fit great the scene theme, plus it wouldn’t be as difficult to put to life.
Building the details
My main challenge working on this project was modular architecture. I usually work fully organic, so learning the technical and structural approach of modularity was a fun challenge. To find what elements I needed I analyzed my mood board, sectioning out interesting parts and doing some measurements in Photoshop.
After that, I made an asset sheet of all the elements I would need, modular and other.
The way I approached the modularity was to first sketch out the bounds, creating pieces that are 4 by 4, 4 by 3, 1 by 4 and 1.5 by 4. These dimensions make various buildings be more balanced and more interesting to look at. After assembling these modules and playing with them, I updated the asset sheet and started modeling the mid-poly versions. I found the process of setting the origin and exporting at the world origin for each of these modules a little tedious so I wrote a script to do this for me and save some time. This set is a lot bigger than the one that is in the final scene. However, having so many pieces, which takes mere minutes to create, allows for playing with the building compositions a lot, due to being able to just drag in a new mesh in-engine.
The meshes themselves are actually extremely simple. They all have the same 3 layer vertex paint material (clean, sun-bleached and ivy), and they are planar mapped for the base with world space mapping for the grunge to create some more variation. There are only custom maps for the balcony and 2 doorframes, just to push the grunge into the AO a bit more.
As for the ground, I decided to experiment even more. I made a shader that cracks depending on the slope. Using different maps with more exposed dirt, it was possible to be rotated straight or diagonally depending on the landscape vertex paint and has paintable dithering to soften the transition between the ground and dirt skirt (concave plane with Dbuffer decal material) that sits against the wall.
The rest of the models are simple meshes with simple tiling/masked materials. To create the wired chairs, pothole cover, lantern, and a table I used curve modeling.
The final step was to create some decals for grounding and variation. For these, I made sure they didn’t look too noisy, with upscaled details and no normal map.
As I was finishing the scene, I found it could have some more life, apart from moving shadows and ivy. I used an Apex cloth simulation for the tablecloth and clothes using the Apex ClothingTool, a falling leaf particle system and a shadow of someone moving in the restaurant.
Tricks of Creating Nice Looking Vegetations
When I started working on the ivy, I had no clue whatsoever on how to approach it. I had done some ground plants and trees before, but nothing like creeping ivy. The first thing I did was a lot of research on the topic, seeing how different games and artist approached it (80.lv was a huge help with this).
After I had wrapped my mind around the different workflows I decided to use the Uncharted style: using dense hand-painted/ sculpted cards supported by an underlying poly-paint. This would both fit the reference in feel and type of ivy and the softer looking work on the textures.
Instead of directly starting to work on the detailed version I created blockout cards in Photoshop, just to check the type of cards I would need, how they would fit in the texture and what they would work like in-engine. Each card has one of 3 roles: volume, silhouette or filler/ fluffier. The volume cards are meant to create dense clumps. These are flat, squarish cards that show little roots. The silhouette cards have more shape and show more roots, which makes a shape creation more interesting in-engine.
For the placement in-engine I just used hand-placement, as the scene is small enough to warrant doing so. While placing the ivy I thought about where the observer should look. I considered adding more ivy on the buildings on the side and in the back, but that would create a very unfocused image, so I only added it within the confines of the compositional spiral. The layout of the blockout version hasn’t changed much, as I just replaced the cards with the high poly versions and tweaked the positions a little.
The first step to create those high poly versions was to make a single leaf. I painted it in Photoshop using Megascans reference, trying to leave out unnecessary details. It didn’t need to look perfect, as the leaves themselves would not take up more than a few pixels on the screen. However, it did need to look good at various distances, so I kept zooming in and out to preview the read.
After that, I poly-traced the image in Blender and displaced it to get a more leafy shape. I had to keep in mind, there is was no need to focus on alpha overdraw or polycount yet as this was just for the high poly.
The next step was to sculpt the veins some more deformation in Zbrush. For making that, I used some masking, the move brush, the clay brush, and the dam standard brush. At this point I realized I could also have done it the other way around, creating a high poly, polypainting and then transferring the polypaint to the low poly. This, however, would be kind of a static way of dealing with it, as leaf variations would probably all need to have either unique sculpts or a lot of touch-ups.
To create the low poly leaf I baked the high poly to a plane and traced it the same way I did with the texture, this time keeping in mind the polycount and more importantly, the alpha overdraw.
Doing it this way allowed me to just change the texture, apply it to the same mesh moving around to fit the new texture and re-project. However, I did not create the 3 other leaf variations until the very end, when all the high poly branches were created.
To create the branches themselves I tried various methods. Placing by hand, which would take way too long, using a rough bounding box of the branches through box modeling and scattering them inside, vertex modeling the branches and scattering them on that and doing the same thing only with curves. That last one clicked. It allowed me to create more curvy branches/ roots and easy tweaking. Something I had to look out for was to add some more depth than would naturally happen, so the root branches were at drastically different heights and so were the leaves. This allowed substance designer to pick up more of a height difference when baking the AO.
Before fully baking in Substance Designer I baked the detail normals (separate leaves) and diffuse in Blender, as it already had the materials set up. In Substance Designer, I baked the thickness (although eventually, I didn’t need to use it), AO and normals. I didn’t bake the roughness, as there would not be a huge difference in the leaf roughness anyway (and it would introduce noise) plus it would leave open a slot for channel packing in a mask map. With some post processing and using the color select to mask out the roots, I exported the masks to Unreal. Next time I should lock down on a UV layout beforehand because I had to repeat all of this again, this time with proper UV islands and less alpha visible.
The shader was both the most frustrating and the most fun part of creating the Ivy. It was a balancing game to get the AO and contrast right. The shader is a typical double-sided foliage shader model with SSS masked out for the roots. The bulk of the shader graph is the wind system. It applies both world offset and world space map distortion, based on a multiplied sine wave and the green channel of the mask map, which has a value of 1 on the areas that should move in the wind as input. All seems a little technical, but to be honest, it’s mostly a result of just playing around with values and getting new ideas along the way.
For the cards themselves, I assembled them using the cards on the sheet, combining big and small ones, adding some additional clusters and leaves for a less flat feel after I got some feedback. The cards themselves are kind of flat (as in no curves) but very 3D in card placement, so they would also work when intersected with a wall to create a less dense look. For variation and believability, I created 3 ages of the leaves and a 4th that’s polypainted onto the walls and concrete materials.
The ivy didn’t turn out to look perfectly like ivy. It did however completely fulfill my needs. A soft looking foliage that would aid the composition, provide a nice contrast with the pink and that’s not too noisy or overwhelming.
Learning and applying the creation of ivy took a lot longer than expected, almost a full week. However, it’s a valuable skill acquired and I’m a little wiser with the node system in Unreal. Taking the time definitely made it something that’s directed in it’s every component. If I had to make it again, I would pay more attention to the structure of the roots and find ways to automate the process using something like Designer, SpeedTree or Houdini.
To make the scene feel overgrown and to blend the props with the ground, I also added some grass, plants and dead leaves on the soil. These are done in the same workflow as the ivy, with the dead leaves even extracted from the ivy leaves. For the placement, I used the foliage painting tool and some hand placement where it required an artistic control. The falling leaves are particle systems placed at Ivy clumps, also using a variation of the ivy material for nice translucency and color variation.
Adjusting the Lighting
First of all, my approach to lighting in this scene is a little unconventional. Since I’m new to Unreal, this turned out to be rather a fun experiment than efficient game lighting. However, I think that if you allow yourself some freedom and just play around, the lighting will lead its way. Whenever I had a chance I played with light sources, baking, reflection probes, DFAO, and post-processing. It was kind of a guilty pleasure and a distraction from the orderly work.
This, however, doesn’t mean that the lighting had no clear direction. While assembling my references, I paid attention to those pieces where the lighting was telling a story. Highlights, focal and resting areas, and color contrast are the things I focused on. I immediately noticed that one thing worked really well: an area of a warm light wrapping around an area of cooler shadows which, in their turn, contained a warmer artificial light thus creating some kind of light burrito/sandwich. Until the last day, it was a challenge to get the balance and subtlety right while preserving the softness and painterly feel. I kept saturation mostly below 50% except for the ivy and the sign (they had higher values). This allowed not textures, but the light to take control.
To achieve a soft but focused look I used 4 large directional lights, not real-time. It was totally crazy, but the result was nice. 3 of them are baked with relatively high bounce light to partly scatter pink and green colors on the walls and accentuate the afternoon pink/cyan contrast. The 4th directional light is used for the sharper highlights on the ivy and some cloud shadows created as a light function with a scrolling noise for the animated version. I changed the maximum specular value to increase the softness.
I also placed shadow planes in the sky to block some of the light, as if there were higher buildings around the corner. This allowed me to have the light focused more on the midground and keep the foreground in the shadow. For the soft skylight, Chris gave me an awesome tip: to have a pure white plane above your scene, place a high-intensity spotlight under it and bake the bounce light. This creates nice soft gradients.
The lantern uses 5 lights, 4 of which are the fill lights that create a nice balance between light and dark areas. It’s mostly directed towards the viewer leaving the sides of the stairs in the shadow and creating a nice dark backdrop for the bird. To have a softer localized light source I also added a point light on the lantern. Then I added two spotlights behind one another on the left to create a rim light on the building and have some nice bright SSS on the leaves close to the source. On the right, I added a point light to create a soft silhouette of the railing and the cat. This whole process was rather sculptural than technical which I really enjoyed.
Some technical tips:
— To reduce/ eliminate seams on the modular pieces set the ‘Static Lighting Level Scale’ to a lower value (I use 0.1). This leads to a longer bake time but more accurate light bakes.
— Turn on Volumetric Lightmap in the ‘Volumetric Lighting Method’ settings to get some soft baked lighting on your foliage.
— For a soft looking AO, crank up the DFAO radius and keep the intensity fairly low.
The project wasn’t too long and took 5 weeks in total (during only 3 of which I worked full time). Looking back at it, I would recommend spending at least twice the time if possible. Setting a strict deadline motivated me sometimes, but being able to take it easy is also very important! I wish I could have spent more time on some parts such as the cat, bird, storytelling, optimization and more. So if I could give a takeaway tip, here it is: enjoy the process and play around. You can always get stressed at your day job.
Another challenge, as it always is, was the planning. At the start of the project, I was extremely organized, kept detailed plans, documented everything and did every task in the ‘right’ order. However, later I found a more organic approach to the process. It felt better to let my mind go wild and do what I felt like doing at the moment. Sure, I planned things loosely and reflected once every few days being my own harsh critic, but I think in a personal project, it is a good idea to be less organized and strict.
Learning a new engine was definitely challenging as well. The asset pipeline, the import settings, the shader and lighting system – it was all new to me. However, thanks to amazing Dinusty Empire Discord and Chris, there were always people to help me out with the right learning sources or advice. That’s my second tip: keep asking and be open for feedback. Be open-minded and find what works for you. If it were not for those amazing people (and my awesome roommate), probably, the result would have been a lot different. So again, thanks, everyone!