Adrian Choquet talked about the workflow behind the Mediterranean City project, showed how different modules were planned and placed, and described the work put into creating foliage.
My name is Adrian and I’m a Junior Environment Artist. In 2022, I graduated from the ETPA School of Photography and Game Design in France and I've been learning 3D as an autodidact since.
During my studies, I worked on several games in multiple positions, and it was at that moment that I realized that 3D was something that I really liked. After my studies, as I hadn’t had any experience working in the industry yet, I endeavored to create a sufficiently qualitative portfolio to level up my skills and catch the recruiters' eyes.
The Mediterranean City Project
As often, the initial idea behind this project was very different from what it is now. My main goals for this project were to create a city using both modular elements and techniques from AAA games.
I first started by collecting references in various fields, focusing on mood and architecture, using PureRef to organize them. In the beginning, my first idea was to create a medieval European city. Drifting from reference to reference, I finally fell in love with architecture and ambiance from Italy, Spain, and the South of France.
Once I had chosen my scene setting, I continued to gather references focusing on this setting and trying to bring together similarities between them. I also wrote a small ambiance text, serving as a pitch. I think it’s a good way to verbalize the tone of a scene and have a better idea of what you want to create. Once I had gathered enough references I organized them into categories like architecture, agency, flowers, color, and mood. I also gathered references from other projects in video games to give me a quality goal to achieve.
My principal sources came from Venise, Spain, France, and Beauclair from The Witcher 3.
I first started a really simple blockout using boxes, Unreal's terrain, and my references. I also used the street view of Google Maps to give me more inspiration and ideas for the composition. My aim was to achieve a great variety of building height, size, and position.
Once I had reached a first satisfying blockout, I started to place cameras and think about composition and interesting places. It was at this moment that I decided to create two key props: the olive tree and the fountain.
This project was a real organizational challenge, I really wanted to create a large diversity of elements that could all be intercompatible and have multiple size variations. I divided my elements into 3 categories: simple walls, walls with windows, and walls with doors. Then I defined a size chart for walls from which all other elements would adapt to.
Once I had created my main modules, I placed them in my Unreal scene and replaced all the white boxes. I tried to create a lot of variation to avoid repetitivity as much as I can.
Once I had those modules placed, I made another blockout, this time focusing on small elements, details, props, and specific modules (like archways or stairs). I placed and created this second blockout with the intention to create personality, life, and history in the scene. I also used text to give names and functions to my buildings (general store, shoemaker, clockworker, etc).
Then I listed the assets I thought I'd need on an Excel spreadsheet, like archways, roofs, stairs, and building details like pillars, balconies, borders, blinds, etc. At the end of the project, I borrowed a few assets from Quixel to save time and add micro details. Here you can see all my building modules and props:
All my modules and most of the props are created on 3ds Max using a mid-poly workflow to save a lot of time. For this scene, I didn't create any high poly models or use baking. All models are created like low poly assets on which I made a chamfer. Then I used a fantastic tool named Weighted Normals and the asset just had to be textured next.
One of the main focuses of this scene was that it needed flowers. A lot of flowers. I made all my foliage following the same workflow. First, I gather references and close-ups of leaves, bark, and flowers. Bark is usually the material that I create using Quixel Mixer, however, leaves and flowers are made by cutting out close-up photos of them. I then create their opacity map and use NormalMap Online to generate rough normal maps and AO. Since the flowers will appear very small on screen, I boost normal details a bit to make them stand out.
Once I’m happy with my leaves and flowers, I go on SpeedTree and create a branch cluster only with leaves for now. Then I export the cluster as a material to use it as a texture.
Now that this cluster texture is ready, I create a mesh for it, still in SpeedTree. I do the same for my flowers, paying attention to creating a shape that could be folded later. For the cluster I add anchors: they are points where I will make my flowers grow.
Once all of this setup is made, I create the main stems of my plant. Then I create a first leaf mesh where my cluster will be set up and a second leaf mesh on it, with flowers this time. I use Fold and Curl parameters to give a good shape to my flowers.
Once everything is complete, I directly export it to Unreal.
I create my foliage to be reusable as much as possible, in pots, window borders, or guardrails. I also create an entire set of climbing plants. Here is the foliage I made for this scene:
For my walls, I created my textures using Quixel Mixer. The material is a custom version of Quixel’s Vertex Blend Material. I modified it to set up a World Aligned Texture and custom World Aligned Mask. The first group, Layer, is the basic setup of my textures for the 3 materials that will be used with the vertex painting, the second, Adjustments, contains parameters for color change and modifications on the roughness or normal map.
Inside the Blend Mask group, I mixed 3 material functions with the same pattern. Those functions receive 2 textures that will blend each other to create a specific mask (one mask will mask the other), in the example below, it is a leakage mask. Those masks also have color and roughness, and I could add a normal map or metallic too.
Here you can see how it works (I boosted the intensity of the mask for the example):
Once I am satisfied with my vertex painting and my mask, I simply add decals, and it's done.
Props, Windows, and Doors Texturing
For elements like windows, doors, or props, I used an RGB mask. My assets are using 2 different UV channels, UV1 and UV3 (UV2 are usually for lightmaps, but I didn’t use them for this project). In UV1, I unwrap my meshes like any prop. UV3 are unwrapped following a trim sheet and overlap.
Once my UVs are done, I export my mesh in Substance 3D Painter to create the RGB mask. First, I bake my mesh using a low poly model as high poly and generate the usual maps (AO, curvature, thickness, etc). Then, using masks and generators, I set up my RGB mask for each color. Green for leaks, red for dust/dirt, and blue for edge damage. I could’ve used the alpha channel too but I didn’t feel it was needed for this scene. Once my RGB mask is ready, I export it with the AO.
My material has two parts. The first one is the basic setup, tiling modifier, and texture adjustment, they are set up in TexCoord2 (UV3 in Unreal). This part applies the trim sheet to my mesh. In the right bottom corner, you can see 3 textures set up for using TexCoord0 (UV1 in Unreal), those channels are for my RGB mask, AO, and sometimes additional normal.
In the second part, I set up the color, roughness, and metallic for each color of my RGB mask, I could use texture but I was satisfied using only color and roughness.
Then I just had to add the correct textures and masks, tweak and play with parameters, and that was it. Here you can see the difference with and without AO and the RGB mask.
Here I change the intensity and contrast of my mask adding more leakage on the mesh. If you look at the parameters, you can see that there are also options for color, roughness, and metallic.
During the creation of my scene, I worked for a long time with a setup composed only of white directional light and basic sky atmosphere, sky light, volumetric clouds, exponential height fog, and post-processing.
The only parameter I changed at the start was the exposure in the post-process. I set minimum and maximum brightness to 1.
As the project progressed, I only tested different light positions for composition. I tried to highlight and bring out important elements from the shadows, like the olive tree for example.
It was only when I was near the end that I started to really work on the lighting. I first set up my directional light, playing with intensity, temperature, and indirect lighting intensity. Then I gave color to my sky light to make global illumination and shadows look blueish. I add exponential height fog for the atmospheric perspective and light shaft parameters. Then I added post-process. In it, I changed temperature, saturation, and contrast and added bloom, chromatic aberrations, and the vignette effect. Then I went back and forth a lot between all parameters until I reached something satisfying.
This huge project took me 5 long months. It was very instructive because I had never done something so ambitious before. I think the hardest part was planning my building modules and the number of props I would need. It was the first time I used trim sheets or RGB masks, and it saved me a lot of time. My advice for beginners working on similar projects is to recycle a lot of your meshes and think about the storytelling of your scene.
Finally, I want to give many thanks to 80 Level for giving me the opportunity to detail this project in depth. It was a very interesting experience, and I hope it will help some people.
You may find these articles interesting