Home Technical Talk

PBR Roughness/Metallic vs Specular/Gloss

polycounter lvl 13
Offline / Send Message
arvinmoses polycounter lvl 13
So while working on a mat using roughness/metallic and converting for a spec/gloss system I noticed something strange.

By default a 0 metallic value = 59ish specular value. So you've got a range of about 0-59 spec values that you're not able to achieve with metallic. The strange part - at least with my particular material is the acceptable values for organic non-metals - ranging from about 40 - 60ish create a vast difference in the look of the material.

Notice the roughness metallic mat looks kinda pale compared to the richer colors in the spec/gloss

Ideas on why this is, and how to logically achieve comparable results using roughness metallic?

specVsmetal.png

Replies

  • cryrid
    Offline / Send Message
    cryrid interpolator
    Notice the roughness metallic mat looks kinda pale compared to the richer colors in the spec/gloss. Ideas on why this is, and how to logically achieve comparable results using roughness metallic?

    Now I may easily be wrong on this, but I thought the whole point of the metallic workflow was to sacrifice some of that accuracy you're looking for in order to speed up production times and possibly cut down on the amount of textures required by just giving non-metallics a shared, pre-defined specular value.
    When you're slaving away creating a ground texture with the camera zoomed right in, you may notice the slight difference a tiny change in specular makes, but will people who are playing the game notice when their camera is at more of a distance and they're busy doing other things to stop and compare materials? The difference between the two halves of that image aren't glaring to me. If the accuracy is worth the extra work, just switch shaders to one with a spec map, or maybe a metallic shader that has a different spec value for non metallics.
  • Der Hollander
    There's definitely an appreciable difference in the two textures, although I'm on the fence about chalking it up to light location. The important point is, that no matter how rough you make a material in metal/roughness workflow, it will always reflect at least .5 (Or whatever GGX specular value defaults to) meaning that certain materials will be shinier than is "correct" or "physically accurate" or whatever term you want to use.

    There's been rumblings going around it seems, that a secondary-specular map (I've heard it called a Reflectivity map, just to make this generation's terms more confusing) for your non-metallics is becoming a thing to control the specular value beyond the baseline .5 specular value Metallic PBR-shaders slap onto everything.

    If you're using UE4 (or possibly Marmoset 2, I dunno) you could try to input a grayscale specular map to essentially "boost" the roughness map by forcing the shader to return a lower specular value for particularly rough/non-reflective materials.

    The baseline in the shader remains at .5, I think, so make that white and go down from there. If you want it to go above .5, I think you need to introduce scalars into your material.
  • arvinmoses
    Offline / Send Message
    arvinmoses polycounter lvl 13
    Thanks guys! Yea that really makes sense. I'm using toolbag right now.

    Yea this gens terminology has been so crazy. I get so lost converting maps sometimes. I'm a texture artist at Gametextures.com and our goal is to get all the mats to look similar in all the engines, but at the same time get the best look/quality possible.

    I've always worked with roughness metallic rather than spec/gloss, but this go around I decided to try building a spec map instead of the straight convert and noticed a stark difference.

    @Der that's a good point. Changing the light didn't fix it necessarily but did make it significantly less obvious.

    Still a frustrating predicament but thank you guys so much for the explanation.

    So if I understand correctly - spec/gloss is gonna give more control and thus for some mats give you a better looking material. Roughness/metallic is there to speed up the process and use a system that's easier to grasp than having to look up spec values per mat. And unfortunately some systems like UE4 won't have it.

    @Der as far as the reflectivity map is this equivalent to UE4's specular channel where you can for a lack of a better word - finagle - the reflectivity?

    Here it is with a better light setup for balance.

    5mgnJfw.jpg
  • leleuxart
    Offline / Send Message
    leleuxart polycounter lvl 12
    arvinmoses wrote: »
    @Der as far as the reflectivity map is this equivalent to UE4's specular channel where you can for a lack of a better word - finagle - the reflectivity?

    Yeah, pretty much. Like Der said, engines that use Metalness automatically set specular to the same value across all non-metals, since most non-metals fall within the same range, give or take a few digits. Unreal leaves the Specular node open for variation(although they don't recommend it for most cases) or stylized stuff. If you're doing a single tiling texture or have a texture that uses most of the same real-world materials, you wouldn't have to use a texture either. A simple Constant 1 between 0 and 1 would work too.
  • Tokyo_Funk
    Hi guys, 

    Just to clarify on metallic vs specular, is metallic a form of specular or its own thing? Someone told me that metallic is not a type of specular and I just want to clear this up.
  • Fabian Fischer
    Offline / Send Message
    Fabian Fischer polycounter lvl 8
    Hey Tokyo_Funk,

    it is kinda like a Specular map, yes, even if it has not the same usage.
    The metallic map defines metal. White means: Metal, Black means: insulator (non-metal)

    The conversion from an insulator to a metallic look is done by the BRDF/Shader.

    In the Spec/Gloss workflow you need to define a metallic colour in the specular map, instead of just saying 'This is metallic'.
    So the Metallic map and the specular map are not the same but are kinda comparable.


    Best Regards
  • Tokyo_Funk
    Thank you for that explaination Fabian. Nice and clear.
  • kodde
    Offline / Send Message
    kodde polycounter lvl 19
    To add on to the explanation(confusion?) of metallic:

    This is the way I'm used to working with PBR:
    0 in metallic texture = Use a uniform standardized value to define your reflectivity curve:
    1 in metallic texture = Fetch the value to be used to define your reflectivity curve from the Albedo texture.

    I.e. If you do define metallic surfaces you also need to tell the surface what kind of metall it is by coloring the same area in the Albedo texture with the "correct" IOR based value. There's lookup charts for this.

    The concept of having a reflectance texture sounds a lot like having a separate texture to define the IOR based values instead of storing them in the Albedo as I described above? The same as having a separate "substance" texture which I was used to working with a few years back. Am I right on this?
  • kodde
    Offline / Send Message
    kodde polycounter lvl 19
    Why would you want both a metallic texture/channel and also a separate reflectance texture if this is the case? The reflectance would dictate whether it was a metal surface or not through it's luminance/coloring.
  • Tokyo_Funk
    That Marmoset.co explanation was pretty detailed on all the albedo stuff.  -> https://www.marmoset.co/toolbag/learn/pbr-practice

    From what I have played with working in metallic layers, there is much more control in regards to reflective and how dull the texture can be. If you have something like an old car with rust and paint chipping away, the rusted areas of the metal can be made less shiny on the roughness map to make it look like the rust has dulled the surface. Seeing a slightly shiny paint go to a dull metal and then a really dull rust adds more to the overall image believably.
  • almighty_gir
    Offline / Send Message
    almighty_gir ngon master
    UE4 has a "Specular" input, and Toolbag2 has an "Advanced Metalness" module which mimics the same thing. In both cases, specularity has a range of 0.00 - 0.08 and when no texture is applied, outputs a 50% grey (therefore, the final output without a map is 0.04).

    You can input a grayscale specular map into this, and when you do it gives you full access to the 0.08 range, this is important because some materials (gemstones particularly) are above the 0.04 that metalness defaults to for non metals.

    As mentioned above, the whole point of the metalness workflow is to simplify things, because over 90% of non-metals in the real world fall into such a similar range that it just makes sense to give them a blanket reflective value. If you really need the increased range, the tools are there, but they're deliberately obscured (in UE4 by just not talking about it even though the input is there) and in Toolbag2 by calling it "Advanced", because unless you know exactly what you're doing, chances are you just don't need it.
  • almighty_gir
    Offline / Send Message
    almighty_gir ngon master

    kodde said:
    Why would you want both a metallic texture/channel and also a separate reflectance texture if this is the case? The reflectance would dictate whether it was a metal surface or not through it's luminance/coloring.
    It's for "fringe" cases of non-metallics that fall outside of the 0.04 reflectivity range. Some gemstones can go up to 0.16 for example, while skin is 0.028 and water is 0.016, which are both much lower (almost half for skin and below half for water) than the blanket value. The "specular" input in UE4 and Toolbag2's "Advanced Metalness" module both only affect non-metallics.
  • kodde
    Offline / Send Message
    kodde polycounter lvl 19

    kodde said:
    Why would you want both a metallic texture/channel and also a separate reflectance texture if this is the case? The reflectance would dictate whether it was a metal surface or not through it's luminance/coloring.
    It's for "fringe" cases of non-metallics that fall outside of the 0.04 reflectivity range. Some gemstones can go up to 0.16 for example, while skin is 0.028 and water is 0.016, which are both much lower (almost half for skin and below half for water) than the blanket value. The "specular" input in UE4 and Toolbag2's "Advanced Metalness" module both only affect non-metallics.
    Couldn't you just use one texture to define the whole 0.0-1.0 range instead? Or is it an accuracy issue? The Advanced Metalness maps RGB 0.0-1.0 into 0.00-0.08 reflectance?
  • kodde
    Offline / Send Message
    kodde polycounter lvl 19
    Or maybe it's a matter of having it just as an option to use in rare cases when it's needed? Otherwise the metallness(on/off)+albedo approach is good enough?
  • almighty_gir
    Offline / Send Message
    almighty_gir ngon master
    kodde said:
    Or maybe it's a matter of having it just as an option to use in rare cases when it's needed? Otherwise the metallness(on/off)+albedo approach is good enough?
    exactly this... if 90% of materials can be expressed with the metallic map alone, it makes sense to use that for the majority of things.

    especially because in theory you don't even need a texture map for the extended range, you could plug a constant in instead if you are into the layered material workflow.
Sign In or Register to comment.