Zahar Scherbov prepared another breakdown of his material, this time an Ice Material in Substance Designer.
I came up with the first idea of ice material a long time ago. Basically, the materials with a depth effect appeal to me. For this reason, ice is quite exemplary to implement this idea. These days I happen to come across with different variations of ice materials, and I thought that I could have something to say.
From the very beginning, I decided to render my ice material in UE4, which therefore has changed my entire production pipeline.
So, I could divide all ice material development into two parts, SD development and assembly final material in UE4.
Honestly, material logic in UE4 is based on blended layers passed through BumpOffset. This approach did help me to realize the effect of parallax. I used this method only in BaseColor pass and EmissiveColor.
How Does It Work?
The first level of base color is quite simple, just TexCoord goes to grayscale mask. The second layer is similar to the first with one difference. Here I use first BumpOffset function with HeightRatioInput parameter = 0.1 The main difference between the third and second layers is a unique grayscale mask and HeightRatioInput= 0.2
The next thing I do is add all obtained layers between themselves and pass through Lerp with two Vector 3. So, I get a BaseColor map.
Now let’s have a look at BumpOffset node options.
For more parallax effect in cracks of ice, I used a unique grayscale mask in BumpOffset height input. This map appeared to be blurred; over years of experience did I understand that it was the right way to reach a desirable result.
I blended TexCoord of this mask with the Reflection Vector, and this experiment was successful! Personally, all realistic effect got concentrated in this place.
Although my material looks translucent, it doesn’t work like that.
I have no SSS or translucent in my ice. One moment I made up my mind that it would be EmissiveColor. Why? Because this material doesn’t need additional lighting.
When it comes to the Emissive, here I use my BaseColor pass and add to it a FuzzyShading function. It gave me a very unexpected result.
Without a doubt, I made all the maps for my material in SD. However, I made procedural real-time material in UE4.
My Recipe of Ice Cracks
Two Tile Sampler + Levels + edge detected. Next, I used Warp and slope blur for more shape deformation. One more interesting thing here is a Direction Warp + tile sampler, these guys helped me to make more realistic ice cracks shape.
Little bit more cracks of ice.
About Masks and Ice Layers
I tried to convey a feeling of depth in each layer mask. What does it mean? For example, the upper layer mask is the brightest and clearest, the next layer duplicate’s the previous one, but with some attenuation effect and random cracks shape. The third and the deepest layer consists of main cracks and a little trick, Shadow node.
According to this logic, I have three independent masks containing information about my material at different depths.
And, of course, I made my branded bubbles in all layers. Without a doubt, I could say that it multiplies the effect of parallax and depth.
I united all four masks in one graph, it’s very handy because if I want to change something, it changes in all masks at a time.
Finally, some words about optimization.
Admittedly, I thought about the optimization of my material at all stages of the development.
My material uses 4 grayscale maps merged in one texture and one Normal map texture. I am getting the color with Lerp of two Vector 3 and grayscale mask. Therefore, I have no BaseColor map at all, + I can change the color of ice in real-time.
I can’t say that my material is very simple in calculations, but I think it can be used in actual game projects.
For me, the most important in material artist profession is a desire to improve the current result. I have witnessed many people who think that PBR materials consist only of properly selected mathematical values, and some of them state that a neural network can do this job. But in my opinion, satisfactory results can only be obtained by countless experiments, trying new connections and combinations forgetting the rules and guides.