The main goal for this environment was to improve upon the original environment in the game as I thought it had much more potential than was actually realised. I first saw this place during a play-through with a friend and it instantly struck me with its fantastic atmosphere, architecture and sense of mystery.
As my main software to create most meshes I use Maya as I’m most comfortable with it and used it professionally for many years. I used ZBrush whenever I couldn’t just model it or add extra details such as notches and dents during the texturing process.
For texturing I used Substance Designer to create basic textures like tileables as well as my main surfaces like the floor tiles and wall surfaces. For all the props and the kit pieces, I used Substance Painter.
Before I started this project I bought the Design Works art book and found the original concept for this space and really wanted to capture the detail and expand
on it with my own interpretations trying to stay in keeping with the aesthetic and lore (to an extent) of the series.
To get a better understanding of what Dark Souls is I watched another play-through of the game that also explained some of the lore. During that time I took a lot of screenshots of the architecture, props and general atmosphere as I wanted it to feel like “Dark Souls” rather than my work though it was unavoidable that I put my own spin on it.
Some of the props like the caged bodies, swords and candleholders were directly taken from the game and the concept book. Also, because I live in Cambridge (UK) I had the opportunity to visit a few places with similar architecture and take a few more detailed pictures to create better textures.
Below is concept art from Dark Souls III (The Chambers of Deacons of the Deep). Original concept art owned by FromSoftware, Inc.
Originally I intended to just create the circular area without the rooms that radiate off of the chamber. Before I got to that point I wanted to nail the size of the room as well as the supporting pillars which were integral to the picture (the original
This took a couple of days of experimenting with the diameter and the height of all the pieces as they were all connected to each other which meant as soon I wanted more pillars or change the size of the room I had to rework all the pieces connected to it. Keeping this in mind I kept them very simple in the beginning to render any rework that had to be done could be finished in a couple of minutes rather than spending hours nudging vertices around.
At first, I blocked in the whole room and tried to match the concept by eye staying in Maya until there were no (big) gaps in the geometry anymore and set up a camera that roughly matched the concept and was locked in its transformation so I wouldn’t accidentally move it around when adjusting meshes or moving around in the scene.
After I did the first pass on it I cut the cylindrical pieces like the floor and the walls into quarters or smaller to make them more manageable in Unreal and also modular.
Then I exported all the meshes to Unreal and used a Blueprint to recreate the cylindrical layout without moving them around by hand and applied a simple collision to all the meshes so I could walk around and get a better grasp on the size of the room without falling through the floor.
This was hugely important to get a better understanding of how the scale feels when walking around. As visible in the blockout for the pillar everything was too oversized and at the same time too small which meant I increased the empty space to give it a bit more room to breathe and decreased the size of the architectural meshes in it to make them more believable as well as changing the spacing of each pillar so the arches wouldn’t need to be too big as I wanted them to be visible in the final picture.
This also helped to make it feel less like it would collapse too easily.
Modular Workflow and reusing kit pieces
I would only move to a more detailed layout when I felt like the blockout would work in Unreal when walking around in it. After feeling confident about the layout with simple meshes I went on to detail out the blockout and would establish the exact dimensions and align them to be on the grid if I went off during the adjustment phase. Also, I would break them down into more modular pieces if necessary.
After creating a detailed blockout I would break it down further and create sub meshes that the final asset would be composed of as it would be unnecessary to have every module to be unique with its own texture set.
This was achieved by creating high res meshes that were then baked down into the modules to reconstruct the asset and still keep the correct texel density. In the case of the huge structure in the middle, I used 3 texture sheets for all the pieces as well as the wall material and the trim material for extra details and surfaces around it.
By creating these sub-modules that also used the grid I was able to not just use them on the construction in the middle but also other pieces in the environment reducing the number of unique assets as well textures in the environment without looking too repetitive.
At the start of the project, I was experimenting with tessellation and displacement for the floor segments and created a simple material to experiment with the look and feel of it but ultimately decided against it because I got some artifacts from the tessellation around the sharp corners of the displacement and for a cleaner result I had to increase the tesselation by a lot which made it harder to work with it.
Still, I wanted to keep the look of it so I made sure that my texel density was set in stone as well as the shape of my height map of my material as a big change to the texture would mean I’d have to redo the following steps.
To generate the geometry for these tiles I brought the height map into Zbrush and subdivided the basic plane until I had enough geometry to create a clean result and used displacement to create essentially the same mesh I had in Unreal but with a clean quad topology over the jagged triangulation.
As a next step, I would jump back 1 or 2 divisions and delete all higher and lower divisions. This is not necessary but makes the calculation for the decimation much faster as long as all the major form changes were preserved. This is followed by a very aggressive decimation that preserves the primary shape but gets rid of all the extra polygons that were unnecessary as I would rely on the normal map to create the final look.
After importing it back into Maya I instanced the object around to see how it will tile and check for any obvious gaps and decimation errors as well as thin triangles.
After aligning a minimal amount of vertices I would go and fix the normals to work with the original normal map.
As the last step I needed to fix the normals to work with my normal map.
In the first image, the normals are just softened automatically which in conjunction with the normal map would overcorrect them and look wrong. Because the texture was made from a plane all the vertex normals have to point up 90 Degrees to use the correct normals from the texture. This only applies to surfaces that have been displaced and then exported as meshes.
As shown in the graphic the normals look correct on the second image and the mesh is ready for the engine.
Trim texture process
For this project, I wanted to try a different workflow for trim sheets rather than creating trims that can be used in many different areas. I wanted to create TrimMeshes which is a tiling mesh strip that is specific to the shape like a traditional bake. I knew I didn’t need them to be reusable on any kind of mesh and this way I could create strips that don’t bend the normals too strongly which can cause visual artifacts.
There are a few caveats to it though. Using the strip and snapping it to other meshes and to itself works very well but if they’re supposed to be used on more difficult geometry they become more fiddly to use.
If the trim has geometry that flows in a different direction than the direction it’s supposed to tile in it is impossible to just stretch out the geometry and unfold it in one direction.
This kind of geometry won’t be able to be extended easily and can only be reused but not modified in any meaningful way other than by the use of deformers.
As I wanted to have a lot of detail in the arches I decided to create a more simple version without any geometry that flows in a different direction. This way I could add or remove geometry where necessary and made them more flexible to use without compromising on the visual fidelity.
Creating variation in the wall texture
And finally to create the dirty and leaky look on the walls I created a composite mask with 3 different textures to save on texture samples and draw calls. The first leaky mask will use the UV’s created for the mesh to match the leaking with the gaps between the blocks.
The other 2 masks use a 2nd UV channel that is laid out in a way to stay in the bounds of 0-1 in Y as they would only appear at the top and bottom of the mesh where they connect to the next surface where dirt would accumulate naturally.
I would then simply tint the base texture and blend it on top and mask it together with a vertex paint channel to remove the effect in certain places. Then I used the same technique for the other two masks with some additional switches to turn off the effect on objects that didn’t use either all 3 mask channels or didn’t use it at all.
Thank you for reading, I really hope you found something useful that you can use in your next project!
Please follow me on my Artstation: https://www.artstation.com/rroeder91
Thanks to Robert for allowing us to have such an in-depth look at his process. If you liked this environment breakdown and want to see more like it from other inspiring artist’s make sure to follow us on :