Building Environments in Unreal 5

WIP Environment

This is a very early glimpse of an environment project I've been working on. The modeling/shading is still WIP, and I plan on adding a lot more details throughout the scene, so you'll need to ignore the obvious lack of polish. Now that that disclaimer is out of the way, I want to share a little bit about this project. My goal was to jump in on this in hopes of understanding the workflow/process of designing environments using Unreal Engine 5. Throughout my experiment I was immediately impressed by how easy it was to create real time photorealistic scenes in Unreal without the software getting in the way of my creative vision. I was able to compare my experience using both Unreal 4 and Unreal 5 workflows, which I've documented below. Here is a demo reel showing renders from my environment, I'd recommend watching this with sound, hope you enjoy!

Reference

When I first decided to create an environment in Unreal, I looked at some images online for inspiration. Here are some images that I saved that show some of what I was aiming to recreate in my own environment. I knew I wanted to build something that would push me artistically and technically, in hopes to be able to achieve this level of detail in a game engine.
Now comparing these reference images to the render's I'm showing above, I know I still have a lot more work to achieve this level of detail that I'm aiming for. Having gone through this project for 2 years now, I realized that an environment like this its best to work rough to fine, and not get caught up on the tiny details too early. My goal was to quickly chip away at the bigger set pieces first, then work my way down to the fine polish. That being said, this has definitely been a very rewarding experience for me, and I hope to have more to share with you soon as I continue to iterate on this project going forward.

Layout

After I felt confident in the overall art design of the environment I was wanting to build, I then proceeded to plan out the layout of the scene in Unreal. This gave me the chance to walk around in real-time and lock down the scale. Also during this process I started to plan out and place modular assets in my scene. This would give me the ability to work rough to fine by allowing me to place blocked versions of my models and instance them throughout the scene initially. Then later if I wanted to update the blocked models with a higher resolution version, Unreal's Content Browser would give me the ability to quickly swap those out with the updated asset, which would also update the instanced models .

Also during the layout phase, I was able to see how lighting would effect the scene depending on the placement of my windows. Looking at the image below I knew I needed to create a dome opening to allow more light to cast on the statue in the center of the room. Being able to see these things early on really allowed me to alter crucial design decisions before I got too far into the modeling stage.

Modeling

"King's Statue" - Using the Bake Down Process

When I first started this project, Unreal 5 wasn't a thing yet. In Unreal 4, like most typical real-time workflows, hi resolution models had to be baked down with normal maps in order for Unreal Engine to display them at a decent frames per second. Knowing I was going to build a statue model with this much detail, I wanted to really plan out my workflow in order to make this easier for me.  Below I explain my process with you and how I achieved the results you see above, which was captured in Unreal Engine.

Maya - Pose Low Poly Character

I knew I needed a way to easily pose this character. In Maya I imported a generic male model asset, rigged it with bones and controls, modeled the base geo for his clothing and skinned those to his rig as well. I also setup a simple cloth rig to sim the roman skirt as he settled into his pose. Using the rig controls I animated him from a t-pose into a sitting pose which gave me his posed geo to take into the next part of the modeling process.

Marvelous Designer - Drape Cloth Cape

After getting him posed the way I liked it, I created a rough blocking geo of his chair. Taking his posed geo and chair I exported that data to import into Marvelous Designer. In Marvelous I created the pattern and drape of his cape. This allowed me to quickly design the look of the cape and how it wrapped around his body. It also made it easier to design the look for how the cape would rest against the steps. This process also became very useful when I worked with the drape of the curtains and rug in my scene.

Zbrush - Sculpt High Poly Model

Once the rough blocking of his pose and cloth were established, the next step was to import this data into Zbrush to start sculpting the high poly model. I was able to use my IPad and pressure sensitive pen to sculpt the model you see above.

Maya - Retopologize and UV Low Resolution Model

After finishing the Zbrush model, the next step is to re-topologize the low resolution mesh to be able to bake down the normal maps of the high mesh. Now I know Zbrush has it's own retopo tools which I've used, but I've also used the ones in Maya which I'm a bigger fan of. To do this, first I like to decimate my Zbrush model which will optimize the poly count in order to import into Maya and Substance Painter. If done right the decimate process shouldn't visually change the look of the high poly model but should decrease the poly count a lot. In the example above I was able to decimate my Zbrush model originally from 52 million points down to 10 million points. After I import my decimated mesh into Maya, I turn on Maya live mode and then use the handy create polygon tool to start building out my low resolution mesh, using the high mesh as a guide. Once I finish modeling my low resolution mesh, I then UV that mesh. Since I'm dealing with a very large model and I want the textures to hold up when our camera gets super close to this it in game, I decided to break off this model into 6 separate 4k maps. For me it's better to initially work at the highest texture quality, then optimize down if your game setup requires it.

Substance Painter - Bake Down Normal Maps

Now that I have my low resolution mesh and my zBrush decimated high mesh both saved out, I can now import that into Substance Painter to do my normal map bake down process. Looking at the image above, this is how Unreal renders the mesh before and after normal maps are applied.  Surprisingly the results hold up pretty well depending on how close you get to the model. Now if you were to zoom in really close I'm sure the effect wouldn't hold up as well since this is technically a cheat. That's why its good to compare this current method of game modeling versus what you can do now in Unreal 5, which I document in the next section.

"King's Chest" - Using the Awesome New Nanite Feature in Unreal 5

I started my project working in Unreal 4, but as soon as they released an early access version of Unreal 5 I wanted to jump in right away to start playing with all the newest features. One of the features I was most excited about was the introduction of Nanite, a dynamic lod system that is able to render high poly model assets without slowing down the frames per second. Because of this, artists can now import their high polygon models directly from Zbrush, with no low to high normal map bakes needed! Having seen the recent demos I knew I wanted to give this a try and boy am I glad I did! The amazing amount of detail I'm able to produce in my project now is huge and will allow me to realize my creative vision in less time and in higher fidelity without taking a hit to my fps.

Zbrush - Sculpt High Poly Model

Here is me jumping right into Zbrush to create the King's Chest. Knowing this asset will go directly into Unreal, I'm able to jump right into the creative process.  No longer do I have to worry about the optimization steps it would take to get my model inside the game engine like I had to before. The model you see here was originally 17 million points but after decimation I was able to get it down to 888,000 points. Even though Unreal can handle an extreme amount of polygons I still decimate my models to save on file size and also to help with optimization when importing to other software packages like Substance Painter where I texture my models.

Import High Poly Zbrush Model Directly Into Unreal 5 Using Nanite

As you can see, after I import my high resolution model into Unreal Engine I get a super smooth fps. I'm sure you've seen the demos as well but if I were to duplicate this model 100 times, I'd still get a super fast fps! Looking at the render above I also show you a Nanite debug render which shows how the triangles are being dynamically formed based on how far away and how close I get to the asset. This tech is amazing and I'm sure it will change how real-time environments will be built in the future, the sky is the limit!

Texturing/Shading

In this next section I am showing you a few of the assets that I've textured and shaded in Substance Painter. What I love the most about this software is you have access to a wide selection of pre-built PBR shaders to choose from. Also what's nice is in my scenes if I want to see how my model will accurately look in my game, I can change the HDR background image to an HDR render I took from my game, and this will simulate what the source of the lighting will be in Substance Painter. This allows me to adjust my shaders just right and know they will look exactly the way I intended when I import them into Unreal. Not only does Substance Painter do normal baking but you can generate a curvature map which I tend to use to darken the cavities of the surface. This comes in handy for example on the King's Statue and King's Chest models where I want it to look like dirt has formed in the crevasses.

Lighting

Lighting with Lumens in Unreal 5 vs Old Engine Baking Process

In the render above, you'll see the power of Unreal Engine 5 and the addition of Lumens. What Lumens does is produce fully dynamic global illumination and reflections all in real-time. When my project was originally built in Unreal 4 and I wanted to achieve very similar lighting, I had to run a bake process using Lightmass GPU rendering. This bake process could take hours to get something back and in the end it wasn't fully dynamic so if a light or object in the scene were to change, you would have to re-bake your entire lighting all over again. This became very time consuming and was a headache. Now with Unreal 5 Lumens technology, I'm able to create photo-realistic scenes very easily in a fraction of the time, and on top of that it's super fast and doesn't require a lot of GPU resources. It's a game changer, and I'm excited to experiment more with it going forward!

Sequencer

In the demo reel movie you saw at the top of the page, I created all the camera work and timed the edit to music all within Unreal's Sequencer Editor. This made it very easy for me to see my animation and make quick adjustments to my cameras all in real-time! If I were to show you a live representation of this edit on my machine, you would see the exact same quality playback speed that I would get when rendering them to frames. It's pretty cool to be able to work this way and I predict future film productions will soon want to work this way as well. The technology required to produce the high fidelity we are use to seeing in film is starting to get there with the advancements in real-time rendering. It's exciting to see how far this sort of tech will go in the future!