Salva Gómez shared the workflow behind the Doors Of Durin project, talked about the lighting setup, and explained why Unreal Engine 5 was chosen for the scene.
My name is Salva Gómez. I am originally from Spain but have been living in Canada for the last 5 years. I first studied Industrial Electronics and Automation Engineering followed by a Master’s in Industrial Design back in Spain, then I worked there for a couple of years as a mechanical designer/engineer.
I always loved art, design, and technology, so when I discovered 3D design during my engineering studies, I immediately fell in love and knew that was what I wanted to do. Then after my work experience in Spain, I came to Montreal where I perfected my skills in 3D. I worked in a small company for two and a half years doing ArchViz with Unreal Engine and then I moved to my current job in Pixomondo as Virtual Production Lighting Lead. During my time in Pixomondo, I contributed to building virtual environments using Unreal for TV shows like Star Trek: Discovery, Star Trek: Strange New Worlds and Avatar: The Last Airbender.
The Doors Of Durin Project
I love The Lord Of The Rings movies and books, and this project was a tribute to that. At the same time, I was excited about the new possibilities Unreal Engine 5 had to offer and wanted to test out the latest features they developed, mostly Nanite and Lumen. My main reference/inspiration was the same sequence of The Doors of Durin from the movie The Fellowship of the Ring. I chose this sequence because it’s so iconic and I love its mood in the movie, so I tried to recreate that in Unreal Engine by adding my own touch.
For this scene, I focused on lighting, mood, composition, and shaders. I used Megascans as a base for most of the assets I needed, like rocks, cliffs, weapons, etc. I modeled the doors in 3ds Max using a big cliff as a base. The trees are done in SpeedTree and the staff is a mix of different branches that I assembled together in 3ds Max and textured in Substance 3D Painter. I set up a master material for all the assets and used instances of that master to control the individual parameters of roughness, albedo, normal, etc., to get the desired look.
I used Nanite for most of the assets, and it was great after all this time using Unreal Engine 4 and having to keep in mind polycount, creating LODs, etc., for performance reasons. It felt great to just drag and drop a 1 million poly cliff into the scene and see that the framerate wasn’t going down. I could see there are still some unsupported features for Nanite, like translucency, foliage, and masked materials, but hopefully, the guys from Epic Games will have a solution for that soon.
To set up the door, I brought it into Substance 3D Painter after modeling it in 3ds Max to get normal and emissive textures that I would use afterwards in Unreal Engine to create the material. I used the original image of the door from the book The Fellowship Of The Ring as a texture, projected it into the geometry, and then exported the maps to use in Unreal.
When I was setting up the material, I used the emissive mask that I got from Substance 3D Painter as a base and then multiplied it by 2 different noise textures. I used a sequencer to animate the different parameters of the material, like the tiling scale of the noise textures, rotation, contrast, and the different multipliers and linear interpolations that I added to get more breakup in the animation.
To get a sense of the scale and composition, I always start blocking out the scene using the basic shapes from the engine content. Once I have the main elements in the scene, I set up the camera views and do the first pass on the lighting, very basic, just to have an idea of the direction, color, and intensity of the light. Once I have all that set up, I start populating the scene with assets.
Most of the assets that I used for the ground were rocks, so the first thing I did was to create a base for those rocks. I created a big plane in 3ds Max, then tessellated it until it had enough resolution, and applied a displacement modifier using a high-resolution pebble texture. Thanks to Nanite, I could import this directly into my scene without issues.
Then on top of that base, I started placing some rocks to get some breakup and variation. I also created a landscape layer below the rocks and applied a ground/dirt material to it; after that, I sculpted it to make it blend with the rocks. Setting up RVT also helped the overall blending between the rocks and the terrain.
Then, I set up some big cliffs that I used as the wall of the mountain where the entrance of the mines is. I also used RVT in these assets, so we didn’t see a hard edge where they were connecting with the ground.
For the trees, I mainly used SpeedTree. I created 4 different variations of trees but ended up using 2 of them. I used a couple of tree stumps that showed the roots in a similar way to what I previously had in mind as a base. Then, I built the trunk and the rest of the tree in SpeedTree. Next, I used Substance 3D Painter to match the stump and the rest of the tree textures so we wouldn’t see any seam, and this ended up working pretty well.
Once I imported them to Unreal, I set up the SpeedTree wind inside the trees' materials and created a parameter for the intensity. The wind in the scene was driven by a wind directional source.
As for the lighting, I normally try to keep it simple, mostly in exterior scenes, where I try to use just 2 light sources: skylight and directional. I try to keep as few additional/fill lights as possible to get a clean result on the lighting. Now with Lumen in UE5, the dynamic lights also contribute to the GI without having to bake them (and it looks better than SSGI and it’s cheaper than RT GI), so this is a great advantage that allows us to iterate way faster than before when we had to worry about baking times, lightmaps, etc.
For this project, I used Lumen for GI, screen space reflections (Lumen reflections didn’t support translucent materials in early access 2), and Virtual Shadow Maps to be able to get nice soft shadows in the Nanite meshes and also increase the shadow resolution overall. For the post process, I kept the exposure locked at 1 for minimum/maximum brightness. I also used a LUT with a subtle color correction that I did in Photoshop.
I added a lighting function in the directional light to create pockets of lights and shadow that gave a more interesting look to the scene: as if the clouds were moving and creating those light openings. To achieve this, I used a material with panning noise for the light function. Since this was a small scene with not so many elements, I wanted to introduce as much dynamism as possible to give some life to it, so the moving clouds, the wind in the trees, the moving particles used for the fog, etc., really helped the scene come together.
The fog particles were created as a Niagara system using flipbook elements, but I kept the effect really subtle by setting the opacity very low in the fog material. That, plus a base of exponential fog, helped a lot with the overall mood.
Thanks to Lumen, emissive materials now propagate light without me having to bake it, which gave a more realistic effect when the door appeared and slowly increased its emissive intensity throughout the animation. The result was that the elements close to the door were lit by the emissive material. However, I felt that it was not enough and I didn’t want to push the emissive value too much, so I placed two spotlights facing outwards on each side of the door. To make them work with the animation of the door, I attached them to the door by parenting them, so when the door opened, the lights followed the movement.
The lighting setup for the interior consisted of one main light that simulated the light coming from the staff and a couple of fill lights: one in the back to get some light on the entrance structure and one extra light on the right side to get some specular hits in some of the metal from the weapons.
I used the Sequencer to make the lights turn on at the time the doors opened and then played with the animation curve to get a flickering effect on the lights when they were turning on. I used the same animation curve for the 3 lights so that they were in sync.
Finally, for the water, I enabled the water system plug-in and modified the standard water shader to add a subtle moving noise to it, similar to what I had for the light function in the directional light. This gave the water nice variations in color and brightness. Then, I played with the parameters of absorption, scattering, normals, roughness, specular, etc., to achieve the desired look.
To be able to get a nice transition from wet to dry for the rocks and ground material, I used a DBuffer Decal that used just the Normal, Roughness, and Opacity channels of the material along with Metallic and Specular. This allowed me to create that wet look on the elements I wanted by setting the specular value to almost 1 and keeping the roughness very low. Adding a bit of metallic also helped since it makes the rocks darker and shinier as if they were wet.
The main challenge for this project was having to adapt from UE4 to UE5. While the interface is pretty much the same, I had to study how all the new features worked and which ones of them were actually working properly, since I used the early access version, which was not production-ready yet. I really think UE5 is going to be a game changer, not only for the gaming industry or companies that already use UE4 but for every industry that currently uses offline rendering to generate their content.
My advice for fellow artists and for anyone who is thinking about jumping into real-time content creation with Unreal Engine is that now is one of the best times to do it. Nowadays, it is easier than ever to get initiated in Unreal, with all the online resources and tutorials available, most of them for free. Also, we have the whole Megascans library available for UE users, MetaHumans, plus the release of UE5 and the fact that Lumen and Nanite make the creative process easier and faster. That said, I think it’s important to not forget about performance and optimization. I encourage the artists who are making their first steps in Unreal Engine to read the official documentation and try to get a good understanding of the basic aspects of how a game engine and real-time technology work versus traditional render engines.
You may find these articles interesting