Aaron Winnenberg shared a breakdown of his marvelous lab scene created with the help of Maya, Substance and Unreal Engine 4.
The intention of making this scene was to practice visual storytelling and practice static lighting in Unreal. I had little to no intention of making it very dynamic or interactive, however I would want it playable at a decent frame rate should I change my mind in the future.
With that in mind I could plan performance costs ahead of time. I knew I’d have room for unique texture sets per mesh and my poly counts could be a little on the higher side from what I usually do. However, I wound up with 6k polys being the highest count for any of the models in my scene.
Before I start any project, I like to set up my scales for the modular pieces I’ll be making. I bring in the Unreal mannequin to Maya and start with a simple plane to set up the dimensions. From there I’m easily able to model according to the original scale I set. In this case the plane was 500 x 400 Maya / Unreal units (previously set to match in Maya’s settings).
I wanted to practice using Painter’s normal painting tools, so I decided to model everything without any high poly baking (which also sped up my workflow significantly). Keeping any faceting in check, but also keeping the poly count reasonable should I decide to develop a playable version.
I got to have a lot of fun texturing this scene even though the process was fairly simple.
For most of the assets, I created a base material to play with in Substance Designer before bringing it into Painter for use on the models.
Since there wasn’t any high poly baking involved with the models, I generated an AO and curvature map in Painter using only the original mesh.
With the AO and curvature maps baked I was then able to use Painter’s smart materials and masks for things like edge wear and dirt buildup.
I wound up painting a lot of normal detail to the models (which sometimes can be more fun than baking a high poly in my opinion).
In some cases I brought the textures straight from Designer into Unreal (packing the rough, metal and ambient into an RGBA merge node).
The guts you see on the floor by the hospital bed are actually just a material I made in Designer and brought straight into Unreal on a slightly lifted and tessellated image plane. The geometric detail comes with the heightmap multiplied by vertex normal and a scalar parameter.
Aside from the HDRI, decals and a masked material I used for the grass outside the building there’s really only 3 master materials being used for this scene.
The “Master” material I created to be very parameterized in order to test various lighting situations on my assets. Roughness, metalness, ambient occlusion and specular all got parameterized for slight tweaking once I was happy with a lighting situation. The metal, rough and AO were all packed into one texture as well as my emissive being packed into the Alpha of my color maps. This method of texture packing is generally universal among all my projects.
The cryotube material I made was the only real interesting one I made for this scene. I used the same transparent lighting mode as the previous transparent material with the exception of masking some floaty bits into a bump offset to make it look like liquid floating around inside the tube.
Since the goal of this project was to practice static lighting, I did quite a bit of research on static lighting in Unreal. I wound up looking through a lot of people’s archviz projects to find settings that eventually suited what I was going for.
Before any initial bakes, I went through and changed the lightmap resolution of a lot of my assets. The larger the asset, the higher the resolution. The walls in the scene being the biggest objects got 1024 lightmaps, down to the smaller objects getting 512.
With the increase in lightmap resolution, I set the scale of lighting quality in my lightmass settings up to 5, as well as some other lightmass tweaks. The bake times significantly increased, but so did the quality.
I think the most relevant change I made in lightmass was to the number of indirect bounces. Almost everything in my scene is very shiny, so I wanted to emulate how the surfaces would affect lighting a room like this in real life.
The lights themselves were nothing much more than a basic spotlight. The post process had a couple tweaks to make the ambient occlusion a little more pronounced.
Outside the building and in the hallway I made use of dynamic lights with the volumetric scattering.
Since my lighting was baked, I wound up with a lot of control with my post process volume in regards to Global Illumination. My tweaks were subtle but having that extra power was really helpful. Playing with AO levels in the post process is something else I often play with in my scenes.
Another tweak I made to the scene (keeping in mind of how it would affect performance) was increasing the reflection resolution. Having a lot of shiny objects in the scene made this tweak very worth it.
OTHER FUN BITS
The blood streaks in the scene made use of Unreal’s deferred decals. Something I hadn’t played with in a long time. The material setup for the decal uses parameters to adjust roughness, opacity and color. I’m also using switch parameters to select between various masks I packed into a single texture.
I created a single spline mesh construction script to generate all the tubes and wires in the scene with the option to switch between tubes, wires or whatever mesh I wanted to use.