David Szieber told us about the workflow behind the Siege of Rome project, talked about texturing in Substance 3D Designer, and shared the issues encountered in Unreal Engine 5.
My name is David Szieber, I’m a self-taught Environment Artist originally from Budapest, Hungary, but I have been living in Amsterdam for the past two years. I started learning 3D when I moved here, and pretty early on, I decided to double down on creating environments. This was exactly the time when the pandemic started, and suddenly I found myself having a lot of free time in a new city under lockdown, so I spent all of it learning.
I don’t have any experience working in the industry yet, but I have been working on all my projects so far just as if I was working on an actual game, meaning that I set a strict deadline for myself and I tried to cheat as little as possible to get the visual quality that I wanted.
The Siege of Rome Project
This project is the result of the mentorship I had with Jobye-Kyle Karmaker over the month of February. I initially started hunting for a concept in early January, but it was a bit hard as I really wanted to be done with the project as the mentorship ends, which meant that I only had a month to make something as high-quality as possible while learning new concepts, and this narrowed down the options quite a lot. In the end, I didn’t have a set concept that I worked off of, but the piece that heavily inspired me was “The Grand Bath” from Vincent Dérozier. I really liked how he introduced destruction to the scene as it felt very organic and also having a circular space really helps with cutting time on asset creation, which meant that I could focus on details more.
For my environment, I envisioned an ancient Roman space that was used to teach younglings about the armillary sphere, and I wanted to juxtapose it with destruction, so I thought it would be interesting if the city was under attack and the room was hit by a Ballista.
I opted for real-life references as much as I could, and I also included AAA benchmarks to check myself against. I learned this from Tim Simpson aka Polygon Academy, and it helps a lot to see where your work falls behind, but you also need to keep in mind that games are optimized a lot to perform well, which we don’t need to worry about, so always try to aim for a bit higher quality where you can.
Jobye recommended tackling the environment in 4 steps: blockout, vertical slice, applying vertical slice to the rest of the scene, and finally, a polish pass. While I was familiar with this workflow, I never really went down this path as I liked to gradually build up my environments little by little, so this was definitely a new process for me. In my case, It ended up being a huge timesaver as the whole scene is basically broken down into quarters. I created one-quarter of the scene and duplicated it around to give a full circle, then I created one destroyed quarter.
For the destruction, I had two choices. I could either build the entire scene in Maya and simulate the destruction or hand place the debris and use the foliage tool in Unreal Engine. I went with the second option as I felt the first would be quite annoying to make changes to in a later stage of production, and I felt I had much more control with the second one, but I had to be very careful as I could easily make the destruction look artificial.
I knew that with Unreal Engine 5, I don’t have to worry too much about polycount because of Nanite, so most of the assets are mid poly with face weighed normals, and I tried to add the details through the shader or the materials, but I had to keep in mind that vertex painting doesn’t work with Nanite. The assets that I wanted to sculpt were the columns and the bricks for the debris. I wanted them to have a bit more character to them. I then just quickly decimated them in ZBrush, UV'd them in Maya, and baked them in Substance 3D Painter.
The other parts that I used ZBrush for were the trim sheets. I love everything that Dekogon Artists make, and in their recent ArtStation tutorial series, I saw this interesting approach by Rogelio Olguin: using Photoshop to manipulate images taken from the internet into rough Height maps with the smudge tool and use it as a Displacement map in ZBrush as a base to sculpt on. It is way easier to get much more complex shapes quickly that would take a lot of time to make inside Maya but you are also limited to what you find online.
The other workflow was more known to me, which is to quickly make the high poly in Maya and use that as a base in ZBrush. The main work I did in ZBrush was to chip the edges with the Trim Dynamic brush using a square alpha. Something very nice here again from Tim Simpson: use layers so that later you can go back and adjust the amount of chipping if need be; and also for rocky assets – use clay polish with sharpness cranked to the max to get those crisp edges.
I also made a quick and simple simulation for the curtains using two passive colliders to tie them up, then modeled the rest of the ties separately, and ran them also through a quick cloth simulation.
Materials & Shaders
Texturing was one of the main focuses in terms of learning for me as I really enjoy working in Substance 3D Designer but I also find it difficult to get really convincing results. I knew I needed a base stone surface material that I could use for multiple assets. I didn’t want to have too many different materials as I wanted to keep consistency throughout the scene. While working on the materials, I kept checking the Base Color and Roughness view modes in Unreal Engine as dealing with dynamic lighting can be tricky sometimes if your values aren’t correct.
Inside Substance 3D Designer, I didn’t do anything fancy for the core of the work. I mixed noises and shapes for micro and macro detail until I got something I was satisfied with. I also looked at a lot of real-life references at this stage.
I decided that it is easier to have golden accents on the same trim as the stone instead of having a completely different gold trim sheet, so I masked out the parts I wanted and moved on from there. A very cool site for real-life metal reference is Jarrod Hasenjager’s “Material Studies: Metals” on Behance.
Creating the marble material was also quite easy. I relied on directional warp and noises to create the chaotic patterns, but other than the color, there was very little to do with the rest of the textures.
For the bricks, I used the Slope Blur node to create some edge chipping, but it had to be very subtle as my research showed that Romans used limestone, which is a very soft stone generally, so it would rather crumble than have defined cracks along the edges.
I only really used Substance 3D Painter in this project to bake details and to generate masks to use inside my shaders in Unreal Engine. It is a common workflow to use Substance 3D Painter's features to generate masks and channel pack them inside Photoshop into one, which you can then bring inside Unreal to drive where you want details to appear on your assets. I used this process to get the oxidation on the sphere as I could easily dictate where I want it to happen: for example, at contact points and on top, I added the option to vertex paint additional oxidation if need be to better suit my composition.
There is also a variation of the vertex paint shader for the bricks that I didn’t end up using, where the generation of the paint is driven by a Height map in the shader, and paint gets caught in the crevices first and then starts building upon the rest of the surface. Plus, there is also a noise texture used to break up the edges of the paint instead of a linear falloff.
In the vase shader, I also looked at the wonderful tutorial from Dekogon, where Clinton Crumpler goes through how to create an awesome shader to hide the repetition of your assets. This includes the ability to change the color tint based on world position and rotation, scaling without affecting texel density, the ability to change the trim paint color, and changing the normal intensity of the base material and the trim separately.
Assembling the Final Scene
For the final scene, I had a pretty easy job as most of the main parts just had to be duplicated. For the set dressing, I ended up hand placing almost everything in the scene and I tried to tell little stories everywhere I could. Placing the pillows as if someone had been sitting there listening to a teacher or placing plates on the benches as if people were coming to this place for a quiet meal.
For the main debris, I focused on carefully placing bigger elements first, keeping in mind the original structure and how it would fall apart if it were to be hit. For the smaller broken parts, I used the foliage tool and played with the settings to get more realistic results, but here, I also paid attention to having them piled up in smaller clumps rather than spreading them flat out.
As for the composition, I turned on the cinematic viewport in UE and used the guidelines to help figure out good camera angles. Since the space is circular and the walls are tall, it is rather difficult to get a good 16:9 aspect ratio image out of it that shows all of the environment and is not super distorted, so I rather opted for a square image to get more of the destruction and the sky in the image.
The aim for the other main shot was to show the duality of the environment putting the warm and calm left side against the destruction on the right. For this, I used a perfectly centered camera and set it to capture a very wide image of the entire environment. Also, I really wanted a cool banner shot.
I tried to figure out most of the camera angles early on to help with set dressing and to know where to put my focus on detail as I had to be very efficient with time.
Lighting & Post-Processing
There is nothing special to lighting here really. One of the main reasons to make this environment in UE5 was Lumen: to play around with it and see how it behaves throughout the creation of the whole project. Previously on my projects, I used baked lighting and dynamic as well, but I really wanted to see that dynamic GI in action now, and I have to say it’s great. I was quite happy with the results from screen-space GI and distance field AO in Unreal Engine 4, but seeing light bounce around in real-time with Lumen never gets old.
Another great resource that is more relevant than ever is the two-part blog post “Texturing Values For Environments” from Rogelio Olguin, where he explains how crucial the values of your textures are to lighting. With Lumen, you really have to dial in your textures correctly, otherwise, you will find yourself having crazy numbers when trying to balance your lighting in your scenes.
Here, I’m using the basic Unreal package for lighting, which consists of a directional light, skylight, sky atmosphere, and volumetric clouds. I also added a height fog and turned it volumetric to get a very subtle godray.
A fantastic tip here from Jobye was to introduce complementary colors in my sky and directional light. I set the directional light to a lower temperature close to a sunset/sunrise value, which is 3000-4000, and introduced a very light tint of blue to my skylight to get a more contrasting result. Be very careful here as you can really quickly get a very stylized result.
For post-processing, once again, I didn’t do anything complicated. I used a small amount of vignette to draw in the focus towards the center of the images and added a hint of bloom to get my directional light to pop a little. I also did a tiny bit of color correction to bring it all together, but I like to get as far as I can with my textures and lighting and have color correction as a little extra safety net to tie things together if needed.
Main Challenges and Final Thoughts
All in all, the creation of this environment took a bit more than a month, and it involved a lot of learning. There were a couple of issues along the way that came from UE5 being in early access. These were mainly that Lumen as of today does not support translucency and opacity masks, so I had to balance lighting for foliage quite a lot as it cast crazy shadows. A great workaround, if you are struggling with this as well, is to just turn off “affect distance field lighting” altogether for your foliage actors. You’ll get a much nicer result and you can then try to use additional lights if needed.
Another issue I came across was connected to vertex painting in UE5 as it is broken at its current stage, and you have to do a bit of workaround to get it to work. In short, to be able to continuously paint, you have to select an asset you don’t want to paint on and then also select the one that you do want to paint on. This way, on the second asset, you will be able to paint as normal, otherwise, you have to repeatedly press Escape to deselect your object and then select it again to be able to paint as it breaks after one brushstroke.
Finally, it is not really an issue, but something that kept me a bit frustrated working on this project was my computer because I’m working off of a rather weak laptop, so being in UE5 means 30 fps as a starting point, and it goes downhill to the point of sometimes working in tens of frames, which is quite painful when you want to work quickly, and it keeps your motivation in check.
I am very happy with how this environment turned out considering it only took a little more than a month to finish and I’m very thankful to Jobye for taking the time every week to point out areas to improve. I’m also very thankful to everyone at 80 Level, DiNusty, and SkillTree discord groups for their feedback and for the crazy amount of knowledge I picked up since joining them. You guys are the best!
A small tip I could give to anyone heading into a big project would be to always plan everything out as much as possible and spend most of the time breaking down your process and figuring out how you will tackle any problems that come your way. Something Jobye had to remind me a couple of times towards the end of the project was to stop second-guessing my decisions as I kept wanting to iterate more and more on parts that were already at a pretty good spot. If you spent enough time planning out your project, you should have a clear vision of your goals and how to get there, so you don’t need to question yourself later in the process.
You may find these articles interesting