logo80lv
Articlesclick_arrow
Research
Talentsclick_arrow
Events
Workshops
Aboutclick_arrow
profile_loginLogIn

Unreal Engine 5-Powered Recreation of Dark Souls' Firelink Shrine Explained

Adam Plechatý walked us through the production process behind Bonfire Lit, a thorough recreation of the Firelink Shrine from Dark Souls, explaining how the scene was modeled, textured, rendered, and lit.

In case you missed it

You may find these articles interesting

Introduction

Hi everyone, I'm Adam, an Environment Artist and a proud dad from Czechia. I've been working in game development for the past five years.

I got into the industry quite late, having worked for one of the bigger gaming companies in various non-art positions before dipping my toes into Unreal Engine 4. At first, I just wanted to use the engine to visualize my apartment that I was redoing at the time, but it didn't take long, and a whole rabbit hole opened up, and I took the leap. It was one of the best decisions I ever made!

Being a self-taught artist in my thirties means I studied and experimented a lot, mostly on my own. YouTube proved quite effective, especially at the very beginning. I took two CGMA courses that accelerated my progress tremendously – Lighting for Games with Omar Gatica and Modular Workflows with Clinton Crumpler. And last but not least, I couldn't have done it without the DiNusty Empire community on Discord, where I learned so much by watching Jeremy's (a.k.a. DiNusty) streams. Engaging with other artists and giving and getting feedback has become the latest pillar in my learning.

My latest shipped title is Scorn, a horror first-person game inspired by the works of Giger and Beksinski. It was my first big production, so I learned a ton while working on one of the game's environments as a level artist. I was responsible for taking it from the advanced greybox phase to a fully realized environment, as well as some optimizations and set dressing in other levels to help with the rest of the production.

Getting Started With the Firelink Shrine Project

I've been a massive fan of the Souls series ever since the first Dark Souls and long before I became an Environment Artist. Firelink Shrine in the first game is such an iconic area with a great deal of atmosphere and mysterious lore behind it. It's at this point the game opens up, and there are many paths here, most of which take you to your death this early on. I think nostalgia played a huge role in my decision to remake it. And perhaps I was looking for an excuse to replay Dark Souls without feeling guilty! 

What also transpired is that I really enjoy spending time in the world Hidetaka Miyazaki and FromSoftware created. Despite all the hardcore gameplay, the "git gud" culture around the Souls series, and the horrible nightmares the game might give you, it has a soft heart, and there is something very romantic about it, especially the Firelink Shrine location. After playing a lot of Dark Souls 3 and hearing rumors about Demon's Souls getting a remake, I decided to give it a shot, not knowing, at the time, what I was getting myself into…

Firelink Shrine from Dark Souls. This image served as my key art.

I started the project about four years ago, and at that time, it proved way too challenging – I put it on hold and resurrected it a couple of times during that period. Every time I felt like my skills improved, I would have a go at it. I came back to it right after finishing the Demon's Souls remake on the PS5. Bluepoint Games knocked it out of the park – this was the look I was after with Firelink Shrine, so their art direction became one of the main leading lines in my project.

The contrast above made me realize how much work it would be to make the remake of the location feel really impactful. Bluepoint Games Demon’s Souls served as a benchmark for me.

Since I was remaking an already existing location, I didn’t want to use a ton of references so that I wouldn’t stray too far from the source material. I used concept art and screenshots from Demon’s Souls to get close to the technical and artistic benchmark Bluepoint set. And, of course, I spent a lot of time in Dark Souls to study the brilliant design FromSoftware made. I also like taking walks in the woods, so each visit there also served as a reference to get a feel for overgrown, mossy locations like the Firelink Shrine.

I wasn't terribly organized with my PureRef board. A lot of references were taken in real-time from playing either Demon's Souls or Dark Souls on my other monitor.

Planning the Composition

The composition was kind of already set for me by FromSoftware. The view from the bonfire towards the aqueduct in the distance is iconic and shows the immense depth of the whole location. The path on the left leading up to the aqueduct as well as the huge wall on the right – both are excellent leading lines that invite the eye to look (and go) exactly where FromSoftware wants you to. 

It was important to get the blockmesh into the engine as soon as possible to set the initial lighting, camera properties, scale, and composition of the scene.

The blockout was the only thing I kept from four years ago when I started the project. To make the area stay absolutely true to the source material, I used modding tools for the first game to extract collision data for the level in the .OBJ format. This data was then imported into Blender to serve as a one-to-one blueprint for me to follow when doing my blockout. I knew I wanted to start iterating in the engine as soon as possible, so I exported this big chunk into UE5 to get everything set up in terms of composition, distances, and scale (shout out to the UE Mannequin). After that, I could start swapping it for proxy meshes one by one and start iterating on them.

Since my workflow was heavy on ZBrush sculpts, during the asset production phase, I would import my high poly meshes into the scene to easily iterate on the amount of detail needed on the asset even before I started doing UVs and textures. That way, I could go back to ZBrush and tweak the sculpts without having to go through the process of high to low poly more than once. Thanks to UE5 and Nanite being able to handle so many polygons, I could work with the assets inside the engine from the start and not have to rely just on the ZBrush viewport.

The Modeling Workflow

My modeling workflow changed quite a lot from the early days of the project. While back then, I was spending a long time in Blender, trying to push and pull vertices on the ruins to make them look old and crumbling, with this iteration, I went mostly with the combination of displacement and sculpting in ZBrush. 

I took advantage of the new modeling tools in UE5 and displaced a height map on a simple mesh directly in the engine. That way, I could judge the scale of the texture much more easily in the context of the whole environment. The modeling tools in UE5 are a fantastic addition, they allowed me to iterate faster without having to hop into other programs.

This shows the workflow of remeshing a simple blockmesh in UE5, then displacing a Height Map in modeling tools, and finally, a finished asset after a ZBrush pass with an applied Normal Map. This mesh is around 40k tris.

Meshes with displaced textures provided a nice base for me when brought into ZBrush. There I made the full detail pass which meant either adding the window arches on the ruins, crumbling stones on the aqueduct or even modifying the meshes with live booleans and then adding another detail pass with alphas, for example. I love sculpting, and since this was for a personal project, I definitely spent longer in ZBrush than I would have in production.

This workflow was used for all of the architectural pieces apart from the huge wall, which was made in Blender and, in the later stages, dressed directly in the engine. I used some of the modular pillars seen on the wall and repurposed them into dressing assets – like the part of the broken bridge in the background. To me, it's always super fun to think of your kit as lego pieces that can be used in creative ways I didn't even think of in the beginning. And what's more, reusing assets I've spent a chunk of time on in my production schedule feels really satisfying.

From one mesh, I was easily able to get four modular pieces that sit atop the aqueduct. These would be further dressed with decals and some ivy in the engine.

Smaller assets like the stairs and the well didn’t use any displacement and were sculpted in ZBrush. The most complicated asset in terms of modeling was actually the coiled sword sticking out of the bonfire. It took some time to get the shape of it right since it’s such an iconic prop of the series. I ran it through a quick ZBrush pass, though in hindsight, I feel like I was making just another excuse to spend some more time sculpting. And last but not least, the tree was generated in an amazing free app called Tree It and then further sculpted in ZBrush to give me some extra detail for texturing.

Vegetation and the smaller debris that was used to ground the assets were taken from Megascans as well as the two or three Height Maps I used for displacement on my architectural pieces. Vegetation is something I definitely want to explore in future projects.

Texturing

Having a scene that consisted of mostly big assets, it was important for me to choose a proper texturing technique that would keep my texel density high and consistent throughout the scene. One method I thought about was using trim sheets, but since I wanted to go with denser and more heavily sculpted meshes, that could prove less than effective.

In the end, I settled on RGB masked workflow using bake information to generate masks in Substance 3D Painter and feeding them as color information into my custom shader in the engine. There I would blend multiple tiling materials together, which provided me with great consistency between different sets of assets and also sped up the texturing process quite a bit.

Thanks to this I could also keep my textures relatively small, most of the time using 1k maps and sometimes even 512. The RGB mask for this workflow can be kept even lower, at something like 128 or 64 with the use of variation masks adding the granular detail. I recommend this resource, which covers it very well. This is definitely a workflow I want to continue using in my next projects with further refinements.

Generating masks in Substance Painter is pretty easy with a combination of built-in generators, effects, and grunges to make the masks look organic. I set up the project to export only Normal and Albedo Maps, in this case, the red-green-blue-black map that would drive the textures in the engine. The black being the base rock texture and the RGB channels serving as edge, cavity, and dust-grime-moss maps.

For my tiling materials, I used Substance 3D Designer to generate Albedo and Normal Maps, which I would plug into the custom RGB shader in Unreal Engine. I exposed key parameters in the master material so that I could control things like texture tiling, albedo saturation, roughness min and max values, and Normal Map strength in each channel.

This material served 90 percent of my assets, even the smaller ones like the well or the tree, with some exceptions. I kept my master shader organized with material functions for each of the tiling textures. Thanks to this, I could iterate super fast and tweak the materials pretty much in real-time, hopping back and forth between Designer, Painter, and Unreal.

For the castle wall on the right, I used simple tiling textures created in Substance 3D Designer and blended them together through vertex paint in the engine. I utilized some Megascans decals to finalize the dress and removed any visible tiling on the wall. I like tinkering in Designer, sometimes using ZBrush to prepare my height there and importing it to Designer for procedural capabilities. This time I made the texture purely in Designer since I knew it was going to be pretty far away, so the detail didn't have to be so crazy. I reused the same texture on the bridge in the background.

Assembling the Scene

Despite having the composition basically set from the beginning, it was still important to frame the image nicely and make the scene perhaps a bit more dramatic than it is in the game. While the tree on the right made for a nice vignetting element with its branches pointing to the focal point, the left side of the foreground felt a bit empty and distracting to the final composition. 

For that, I used fog cards (namely EasyFog for Unreal Engine made by the brilliant William Faucher) to darken the area and force the eye back to the center and up the crooked path leading to the aqueduct. The scattered fog also served as a great tool to convey a better sense of scale and depth in the scene, separating the different sections of the image. Overall I'm happy with how the final image turned out as I tried to respect the design and the art direction of the source material but wanted my personality to speak from it too.

This shows the difference between 1. zero fog, 2. added standard height fog and finally 3. fog cards creating the final image.

The knight was a late addition to the scene and was downloaded from the Epic Marketplace (Gothic Knight from TalkingDrums). I used a standard mannequin throughout the project for scale and liked the way his silhouette worked against the background while standing on the aqueduct. I swapped him for knight and the idea of him sitting at the bonfire was born. Posing him in the engine was quite easy thanks to the full rig he had.

The idea to have him disappear and then reappear for a short while in two other places in the video was to tell a little story without actually having to animate him. I’m happy with how that turned out.

Rendering and Lighting

The scene was assembled in Unreal Engine 5 because it allowed me to take advantage of its tools to quickly iterate. Lumen and its real-time GI provided me with a near-final look from the start. Thanks to the way I had my Substance 3D Painter and Designer outputs set up, I could practically dial in my textures in real-time. This went hand in hand with the way I set up my shader to be able to tweak the individual RGB channels and their respective textures inside the material instance. The visualization tools in UE5 were also great to fine-tune things like the albedo and roughness and, of course, the lighting.

Lighting is always my favorite part of the process because it's like painting, but with light sources. In order to achieve the look I set out for, I came to realize Lumen GI itself wasn't going to cut it, so a lot of additional lights were added with various intensities and temperatures. My goal was to have the foreground ruins bathed in the warm light of the bonfire while the further we went from it the colder and more foreboding it would become. A combination of green and blue tones in the midground and background worked well for that, as well as the use of fog cards, which accentuated this shift even more.

This shows the 1. Lumen GI followed by 2. Skylight with HDRi and finally 3. the scene with (many) added lights. In production the additional lights would have to be optimized.

As for post-production settings, while normally I would color grade the image in the engine, this time, I left the image untouched. After setting up my camera and sequencer, I rendered out the raw video and audio through the movie render queue and imported it for post in DaVinci Resolve. (Again, William Faucher has a great video on how to do this workflow, and I learned a lot from him.) This was actually my first time working with this program, so it was also a great learning experience. I pretty much tweaked the final image the same way I would in Photoshop with standard tools like curves, levels, and temperature. Just to make it pop.

With the color grade in DaVinci Resolve, I was able to come close to the art direction I admired in Demon’s Souls while the non-graded image is more akin to the source material.

Conclusion

Staying motivated and disciplined was probably the main challenge I faced due to the huge timespan in which I kept this project in progress on my hard drive. Life got in the way in some bad ways but also some very good ones (like getting married and having a daughter!). Many retries have also taken its toll and imposter syndrome would creep in regularly messing with my rhythm and creative energy. I had long wanted to take a mentorship with someone experienced and that’s when Jeremy Estrellado opened up mentoring slots and I immediately jumped on the opportunity. 

Thanks to his incredible energy, friendly attitude, and on-point feedback I was able to get rid of any negative feelings and push through with the project. His weekly streams on Twitch, where he works on his remake of Shadow of the Colossus, were also a great way to get some extra creative energy. I would often put his streams on my third monitor and part listen, part watch while working on my scene. Thanks to his interactions with the community live on the streams I felt more involved in the process, feeling like I was almost in a studio environment. Also, it made some tedious tasks such as UVing a lot more manageable.

As for any advice to fellow artists… I’d say think big but don’t overscope your projects, keep them smaller rather than bigger. At least in the beginning. What I mean by that is, it’s great to have big ambitions with your projects, because that’s how you grow, by challenging yourself. But to have a scene with lots of assets and textures and complicated shaders means a tremendous amount of work, something I grossly underestimated when I started the project. 

Knowing this and, if you decide to go for it, planning for it is very important if you don’t want to end up making a scene for as long as I did. There is a fantastic breakdown of an environment piece by Vincent Dérozier, where he shares a spreadsheet with meticulous planning and time estimation of 640 hours. Yep, environment art takes a long time and speed comes with experience. Having a solid plan and real expectations of how long something’s going to take is a must when tackling bigger scenes.

So I think that’s enough of me rambling. I hope this breakdown was at least a bit helpful and interesting to you. My gratitude to Theodore for doing this interview with me for 80 Level. It allowed me to come back to the project once more and have a look at it with (somewhat) fresh eyes.

A very special thanks to Jeremy Estrellado for being my mentor on this as well as Casper Wermuth who took the time off his busy schedule and gave me feedback as I was finalizing the scene.

You can find the full presentation of Bonfire Lit here. You’re also very welcome to get in touch with me either via my ArtStation or on my LinkedIn profile. Thanks for reading!

Adam Plechaty, 3D Environment Artist

Interview conducted by Theodore McKenzie

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more