Material Design Tricks in UE4
Subscribe:  iCal  |  Google Calendar
Cologne DE   18, Aug — 20, Aug
Cologne DE   20, Aug — 25, Aug
Vienna AT   23, Aug — 25, Aug
Anaheim US   27, Aug — 30, Aug
SEATTLE US   30, Aug — 3, Sep
Latest comments
by puka
2 hours ago

Your feedback helps me a lot, A very meaningful event, I hope everything will go well happy wheels

by liki
2 hours ago

The article is very useful for us, please update every day candy crush soda

by mua
2 hours ago

Your share is the great knowledge I have gathered, you are an important person I admire, thank you run 3

Material Design Tricks in UE4
30 May, 2017
Nicole Gorny discussed the way ‘Space Beer’ scene was created with tiling materials, realistic water, and amazing lighting. 


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.


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.


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.


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.


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.

Sounds confusing, I know. Starting with the Curvature, which is the red channel of the curvature/AO. Sometimes the Map is covering to much area, so I use an SCurve to control that. Basicly what “Levels” does in Photoshop. The tileable scratches/dirt is multiplied on top to add variation to the Curvature. The red channel from the first mask is inverted and multiplied on top, just to say “I don’t want edge damage here”. All that makes up an alpha that you use for the edge scratches. Most of the extra math and adding detail can be done in Photoshop or Substance. But for this project I didn’t want to be bouncing, I wanted to be able to do it all in Unreal.

Here is the library of all the Material functions used to make this scene.

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.


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.


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 on Facebook, Twitter and Instagram


Leave a Reply

6 Comment threads
0 Thread replies
Most reacted comment
Hottest comment thread
4 Comment authors
Jhett SzostakTomaszMilos PalgutaBruno Afonseca Recent comment authors
Jhett Szostak
Jhett Szostak

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


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

Milos Palguta
Milos Palguta

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.


Haven’t thought of that, thanks!

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 🙂


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.