Why did U4 use roughness/metallic vs Specular/Glossiness?

Why did Unreal choose one over the other?

It’s based off physically correct materials, specular isn’t actually a thing in the real world, it’s all reflections.

There must be another reason since Unity 5 and CryEngine are using Spec/Gloss. I just like to know the thought-process…

They may not have changed the terminology but the behavior of the material must be the same if they are using PBS. Basically roughness determines the specularity/glossiness of the material, and metallic is used for metallic materials so that they tint the reflection color based on diffuse like real metals. You would fake it by using a colored speculars in the old system.

Both CryEngine (the new steam version) and Unity 5 are (will) also use physically based shading, unity3d and the free version of CryEngine use the spec/gloss shading method.

PBR/PBS allows for much more realistic materials to be created, and enables the lighting to use the material properties directly instead of the older slower method.

For more on how it works, and why it was implemented, have a look through :
.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/index.html

Also, article goes into even greater detail on PBR (not specific to UE4, just talks about the method in general)

I understand why they’re using it, but I’m wondering why there are two different methods of creating the shaders now; either spec/gloss and rough/metal. I’m also wondering why two companies are going a different route vs. Unreal.

I use Substance Designer, and creating textures for S/G and R/M are very different.

All 3 (when unity 5 is released) will use the same method, PBR. The reason for the switch is because it allows greater realism with greater performance. I will let you read up on how it works in detail, but it is the new method being used in the game engines.

The old versions Cryengine 3.5 and before, and unity3d use the old method.

Info:
Cryengine PBR - Log In - Documentation

  • In CE, gloss = roughness

Unity 5 PBR - Physically Based Shading upcoming in Unity 5.0 | Unity Blog

You’re right, Physically Based Shading/Rendering is the new standard moving forward. I understand why, but the difference Im reading is how to create those shaders. U4 uses Roughness/Metallic, where-as Unity and Cry uses Specular/Glossiness. From my understanding creating those two textures to input those channels are different.

Just to clear a possible confusion Metallic isnt Glossiness.

Unless I’m mistaken, you can’t create Parameter nodes of 0-1 (black to white), plug those into Rough/Metal, and get the same results if you plug in those same parameter numbers into a shader that uses Spec/Gloss.

Sorry for a late response, I was hoping one of the Unreal Dev’s would chime in on why they chose the metal/rough over gloss/spec system, I am not sure about the exact reason, but I believe it is more efficient to render way. However I can help with how they get converted in UE4.

If you have a Gloss texture, you can take the output of that, plug it into a “OneMinus” node, and plug it directly into the roughness channel. You can also use your specular map as a mask to Lerp between different roughness values instead of plugging it directly into Roughness.
I have also found that you can usually use the alpha channel of the specular and plug it into the roughness slot as well.
And have also read that you can plug the gloss directly into roughness, so I am unsure which is correct. (plug in directly, or apply a OneMinus to it first)

I think the reason why the other programs went way in Cryengine’s case at least, you can not modify the shaders in their engine, you can only create materials using the built in shaders. The gloss/spec technique may change in the future, as they only stated incorporating pbr a couple months ago. I am not sure about Unity5 though.

Hopefully a unreal dev reads and can go into more detail for you! :slight_smile:

It’s just a natural way of thinking about materials, first off. “Roughness” as a material parameter kind of explains itself and what it is that it does. “Metalness” is a good way to store an important parameter into a single channel, making for high performance.

It’s based off an excellent presentation on how Disney did their new physically based pipeline, allowing for often self explanatory parameters that can all interact with each other in predictable ways. The only real question is why Unity and Crytek haven’t done the exact same thing. Playing around with metalness and roughness for even a few minutes gives you the exact picture of what both do without much fuss.

Besides being faster (you only need 1 texture channel apiece to store each, much less than spec/gloss) it also just gives you nigh physically correct results without even having to think about it.

The material model is based off of Disney’s. I’ve had experience in the past with a physically based model that was DiffuseColor, SpecularColor, and Gloss. There is nothing more or less physical about it. It is just a different interface to the artist. In my experience there are things about it that are problematic that I intended to solve.

Gloss to some people isn’t obvious in how it works. What does gloss mean? Although high gloss and low gloss are perfectly clear to me on more than one occasion there has been confusion or debate about which produces sharper or blurrier reflections. Roughness is clear to everyone. It is immediately understandable and clear as to what effect it has on light. The unfortunate thing is that it is opposite the intuitive intensity of specular reflectance. means that roughness maps look inverted visually. For reason some engines have gone with “smoothness” instead, which if I were to do it again I would strongly consider.

DiffuseColor and SpecularColor have a complex relationship that requires a great deal of artist training and is very error prone. Artists need to be taught that metals have black diffuse and colored specular, nonmetals have noncolored specular of about 4%. What is that in sRGB space? These sound simple but trust me, making sure the textures followed rules like is a long and difficult process. Having the parameter Metallic is much simpler. Is metallic, yes, no? Now there is nothing to learn or screw up except setting metallic to something not 0 or 1. The learning process with material model I have seen go much better.

An additional advantage is storage savings. Materials can often assume constants and not require textures for Metallic or Specular. The GBuffer gains one channel by storing Metallic and Specular instead of SpecularColor.

There is a downside being that it disallows some nonphysical materials with diffuse and colored specular. Occasionally that can cause issues but most of the time is a good thing.

There are many others going the metallic route, Frostbite and The Order come to mind. The Disney presentation made a really big splash.

Just to illustrate what Brian said, video shows the differece between Roughness/Metallic and Specular/Glossiness models and why first one is more intuitive and easier to use: http://vimeo.com/100514711

And I think with Cryengine it’s more about the lighting fidelity they are able to achieve rather than actual PBR-materials workflow. Last time I checked (when it went EaaS and landed on Steam) they still had a 1-255 range Spec sliders you know :slight_smile:

Thanks everyone for your thoughts and suggestions!

When describing PBR which uses Metallic/Roughness it just makes more sense and its a good way to help re-train for PBR thinking, it’s good not to think that those two maps are just splat the Spec/Gloss maps in, you can almost get away with inverting the Gloss for Roughness but it is a different way of thinking and its good to break from the old way and have a new ‘Standard’, I sense that the Metallic/Roughness is the one that is gonna stick. I am a Unity Alpha/Beta tester and I have had long conversations about changing the naming in Unity 5

Based off a a podcast I heard with some of the Marmoset guys (I believe there was an Unreal representative present) they stated that roughness / metalness and spec / gloss are interchangeable terms for all intents and purposes. They chose to change the names primarily to keep from confusing people over which shading “standard”, if you will, is in use. Roughness / metalness are just more accurate descriptions of what is happening with real materials.

Please correct me if is spreading misinformation, but it was my understanding of what they said. (Couldn’t locate the link for that podcast… :frowning: )

The biggest different though is in the usage and why the naming is important.

Glossiness 0=not glossy, 1=glossy
Roughness 0=not rough(glossy), 1=rough (glossy)

Specular is a not well defined process, you can use it to change specular colour and intensity
Metallness is quite different from specular colour in that it defines where the specular colour inherits from the underlying albedo where the intensity is a function of the energy conservation of PBR

There are some notes from the ‘Real Shading in Unreal Engine 4’ presentation at Siggraph 2013 which should provide some insight. Check out the ‘Material Model’ section on page 9 which discusses the reasoning behind ‘Roughness’ and the omission of the ‘Specular’ parameter.

It’s available from the excellent Unreal Engine guides and white papers - Unreal Engine page (or directly from https://de45xmedrsdbp.cloudfront.net/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf).

Couple reasons I imagine. Metal/Rough are both gray scale images in PBR. Spec/Gloss in a PBR workflow requires that Spec be RGB. is because it’s Diffuse texture only holds the color information for non-metals and is black where it’s metal. The Specular texture is black everywhere except where the metal is, then displays the color of the metal where there is metal. That is two extra channels, and more confusion.

The other reason is Base Color/Albedo. Metal/Rough enforces a strictly PBR safe color texture. Spec/Gloss as a shader is still somewhat behind, even as a PBR workflow, if only because it relies upon the old Diffuse shader.