Material Design Tricks in UE4

Nicole Gorny discussed the way ‘Space Beer’ scene was created with tiling materials, realistic water, and amazing lighting. 

Nicole Gorny discussed the way ‘Space Beer’ scene was created with tiling materials, realistic water, and amazing lighting. 

Introduction

Hi, my name is Nicole Gorny I am a graduate of Full Sail University in Orlando, FL. I graduated as a Computer Animation student with my focus in Shading and Lighting. I didn’t start making anything related to games until my first job, which was a small studio in Orlando, the team responsible for making short films was switched to help support a game the studio was also making. I never looked back. From there I worked in Simulation where I used Unreal Engine 4 to make training games for the Military. Now I work at Crystal Dynamics.

Space Beer

The Space Beer scene was a concept piece by the amazing artist Min Nguen. I wanted a new project to test using the RGB channels of a texture to define where tiling materials would go. This way you would be able to still get edge damage and dirt/dust, but would not lose fidelity when you get close to the asset.

With that I wanted to see the efficiency vs quality for generated maps. So effectively with each texture I could get 4 masks, or 5 if I used black as a base of the texture. The Blue channel would be a generated Curvature map that I used for scratches on the edges of objects the Alpha would be the AO that I used for dust or dirt. The maps I generated in Substance Designer or Painter. Black would be the base material then red and green for material variation. Also I wanted to try out using splines for wires and pipes, because why not.

Production

I was trying out quite a few new ways to work, so I decided to stick with Unreal. I am comfortable with the material editor, which is where most of the trial and error would take place. I usually start a project with a blockout, first with primitives for quick iteration. Always testing my level with the size of the character. With this you can also test lighting and play with cameras a bit. Not until I had started building out assets did I find I wanted to add something to that left side that ended up becoming a lab area. From blockout, I then started making more finalized models. I would also make basic materials to try out the RGB masks, just to test the waters.

1 of 2

Assets

Honestly before this project I never really had to make high polys and bake them. I learned it in school, but at my jobs there was no need for it. So I struggled re-learning ZBrush as well using booleans in Maya to do a ton of hard surface modeling. I ended up doing about 80% of the high poly in Maya with booleans then would take that into ZBrush. Dynamesh at a high rez, and reproject details if needed. In Zbrush I did most small details like wires or screws. I kept everything in the pieces I would bake in so it was easier to name and bake in Substance with their bake by mesh name feature. I ended up working as Blockout>Highpoly>lowpoly.

Foliage

Speedtree all the way, I was focused mainly on practicing hard surface and the RGB workflow so I found the fasted way to get a good result for the foliage was to use a premade tree and edit it to fit my scene. It is a small but important part of this scene.

Materials

The materials had to look awesome up close, because they were tiled and not on a 1:1 texture sheet for each asset I was able to get a ton of detail out of them. I wanted to practice creating materials from scratch in Substance Designer, so I set out with that in mind. One of the biggest problems I ran into was with the Material function plugged into Materials I could only source 12 textures. Which seems like plenty, but when you have 5 material functions. Say, stainless steel, black rubber, painted metal, scratched steel and dirt. Each one having it’s own albedo, roughness and normal. You plug that all into a material with at least one RGBA mask texture, sometimes two it adds up quickly. I ended up packing the albedo, roughness and normal into one for the tiling materials in most cases. So it would take a count of three textures down to one.This example of the keg I broke the mask and the AO and Curvature into different maps to keep the graph a little neater.

Here is where the RGB channels are used to mask off the material function.

Each channel is just a black and white mask. Anything with a _MF is a material function, they are the tiling materials. I made a small library for this project. This might make it easier to visualize each channel.

This is doing the same thing, just with some extra controls. The problem with the auto generated AO and Curvature is that it was too perfect. So I created some generic scratches, dirts and clouds then packed them in RGB channels to pick and choose which ones I wanted. I would Multiply, Add or use the AO/Curvature into a alpha of a Lerp to add variation to the mask.

1 of 2

These are all tileable material functions that get plugged into the material. They are very simple, and this helps to keep the texture count down.

Water

Actually, I just watched like 5 tutorials on how people made water in Unreal and I took a little from all of them. I had a high frequency normal and a smaller frequency normal and had them scroll over the UV’s at slightly different speeds. Color and Opacity to change based on Fresnel and Depth Fade.

Rendering

This was the biggest part where I was bugging all my peers for critiques. My first “final” lighting pass was very flat, but I had been staring at the project for so long it looked great to me. It was pointed out to me that the overhead lights in the lab were very flat and distracting. I wanted to get more of the sunlight being the main lighting source with the warm bounce light coming in. The cool lights were there to be a contrast to that warm sunlight. Such as the blue lights in the water, the monitors and the lights by the glass to the fermentor room.

Lessons Learned

You can, in fact, get pretty good results from automated maps. I would probably use this on props or assets that are not hero assets. It is a good start for hero assets, but you definitely want to build on top of that. I think the main challenge was the one I mentioned before with having too many textures set up in a material. As far as advice goes it usually helps to get the broad strokes first, things are easy to adjust and test in this phase. Always get critiques, this can give you a new perspective on your project also new ideas for overcoming problems when you run into them. Last I would say is don’t be afraid to change things. Sometimes you can get to attached to your work, and that can get in the way of progression.

Nicole Gorny, Environment Artist at Crystal Dynamics

Interview conducted by Artyom Sergeev

Follow 80.lv on Facebook, Twitter and Instagram

Join discussion

Comments 6

  • Jhett Szostak

    Neat, this method seems to be becoming the new standard. I notice Star Citizen does something similar. helps break up tiling easily

    0

    Jhett Szostak

    ·5 years ago·
  • Tomasz

    One more question, if you use normal, roughness and albedo information in one texture, what compression method do you use for it?

    0

    Tomasz

    ·6 years ago·
  • Palguta Milos

    So you don't pack full color albedo? you just lerping between color nodes in UE4 based on R channel in texture right? Or is there some real way to pack RGB information to less channels and reconstruct it in UE? If so, please share. Thanks.

    0

    Palguta Milos

    ·6 years ago·
  • Tomasz

    Haven't thought of that, thanks!

    0

    Tomasz

    ·6 years ago·
  • Afonseca Bruno

    Hi Tomasz, to be able to pack the albedo you'd turn it into a gradient map and lerp between two (or more!) colours like you mention. In the case of the normal map, you can pack the R and G channels of it, and calculate B on the fly (To do that, sample those channels as linear, convert them from [0,1] space to [-1,1] with a ConstantBiasScale node of -0.5/2, then calculate B with a DeriveNormalZ node.
    That leaves you an extra channel for your roughness :)

    0

    Afonseca Bruno

    ·6 years ago·
  • Tomasz

    Hey Nicole, awesome job on the environment! Honeslty, the only thing that got me thinking is: how exactly did you combine albedo, normal and roughness inputs into one texture? I assume that you saved albedo as a grayscale map that served as alpha for lerping between two colours, but even with having albedo in one channel, you still need 4 more to fit normal and roughness information.

    0

    Tomasz

    ·6 years ago·

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