Home Technical Talk

Physically Informed Spec Value Library

1
ngon master
Offline / Send Message
radiancef0rge ngon master
Ive started a google doc with specular range RGB values for various material types. The ranges here are gather from various resources that are available publically and a few that I have gathered using cross polarization photography. Im currently building a scanning rig to expand the library.

The values there right now are in no way 100% accurate but they are good approximations, may take some tweaking to look perfect.

I thought it would be good to make it public so if people wanted to add their own values they could. Just leave a comment and I can go ahead and add to the list. And of course if you have different values I would be interested in hearing them!

Here is the link

Carlos has been kind enough to combine all of the information into a searchable webpage accessed HERE which is populated by a google doc HERE. Thanks man!

Replies

  • Revel
    Offline / Send Message
    Revel interpolator
    I'd love to see this but the link didn't work for me.
    Any idea why?
  • Computron
    Offline / Send Message
    Computron polycounter lvl 7
    This was just posted today: http://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/

    Its the same guy from the "Remember Me" studio (Dontnod) who released the last chart that was pretty popular, but now with updated UE4 values.
  • EarthQuake
    Here is some scan data I put in a spreadsheet when I was writing the Marmoset PBR tutorial:

    https://docs.google.com/spreadsheet/ccc?key=0AlSRuM7BFhPVdGV4OXRETlYwYVVqbkp6aDNwYm1XaHc&usp=sharing#gid=0

    Data is pulled from Quixel Megascans content

    Reflectivity in SRGB and linear space, roughness/gloss in SRGB and linear space, as well as albedo in HEX SRGB, SRGB, and linear space. This sheet was helpful when whipping up the following chart:

    materialref01.png

    I would recommend putting all your data into a sheet so it can easily be sorted. Feel free to add my data to your list.

    Also some math (courtesy Jeff Russell):

    sRGB to linear: http://www.wolframalpha.com/input/?i=Piecewise%5B+%7B%7BS%2F19.92%2CS+%3C%3D+.04045%7D%2C+%7B%28%28S%2B0.055%29%2F1.055%29%5E2.4%2CS%3E.04045%7D%7D+%5D+where+S+%3D+0.5
    linear to sRGB: http://www.wolframalpha.com/input/?i=Piecewise%5B%7B+%7B12.92*L%2CL%3C%3D.0031308%7D%2C+%7B1.055*%28L%5E%281%2F2.4%29%29+-+0.055%2CL%3E.0031308%7D+%7D%5D+where+L+%3D+0.5
  • radiancef0rge
    Offline / Send Message
    radiancef0rge ngon master
    Ah cool thanks for the data EQ. :) Ill convert my values and add them all to a spreadsheet sometime tomorrow.
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
    I've been working on something similar for myself...thanks for sharing guys! I was really excited about this so I went ahead and started pulling a bunch of the data together.

    (now taken down - sorry)
  • cptSwing
    Offline / Send Message
    cptSwing polycounter lvl 11
    Great thread, and very helpful database, carlos!
  • SuperFranky
    Offline / Send Message
    SuperFranky polycounter lvl 10
    Great databases, thanks guys.

    Btw, how do you convert linear color to srgb? How to use values from SL_GetSpecularColor.exe in photoshop?
    rgb,srgb etc. what values to use in photoshop and how?

    Just when I thought I know what's going on, it confuses me even more :)
  • D4V1DC
    Offline / Send Message
    D4V1DC polycounter lvl 18
    Chalk full of sexy will have fun with these sometime soon, thanks for sharing.
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
  • radiancef0rge
    Offline / Send Message
    radiancef0rge ngon master
    How to use values from SL_GetSpecularColor.exe in photoshop?

    This program isnt really for using in photoshop it gives you a linear space RGB value for your spec map.

    1. Download the recompiled version for Win7 here
    2. Using the database here download the txt file for the material you want
    3. Run the exe in command line like this SL_GetSpecularColor.exe ###.txt where ### is the filename of the downloaded material text file
    4. Profit from returned RGB value

    Obviously I dont take credit for this its lagarde's program and workflow. I just recompiled the program from the source
  • SuperFranky
    Offline / Send Message
    SuperFranky polycounter lvl 10
    This program isnt really for using in photoshop it gives you a linear space RGB value for your spec map.

    1. Download the recompiled version for Win7 here
    2. Using the database here download the txt file for the material you want
    3. Run the exe in command line like this SL_GetSpecularColor.exe ###.txt where ### is the filename of the downloaded material text file
    4. Profit from returned RGB value

    Obviously I dont take credit for this its lagarde's program and workflow. I just recompiled the program from the source
    So Final Linear color then multiplied by 255 to get an rgb value to use in photoshop, right?
  • radiancef0rge
  • SuperFranky
    Offline / Send Message
    SuperFranky polycounter lvl 10
    yeah :)

    Awesome. But when I want to use this database http://carlosmontero.com/pbr_database/ for example, which value do I use and convert to rgb? Spec(SRGB) or Spec(Linear) ? What's the difference?
  • Matt Fagan
    Offline / Send Message
    Matt Fagan polycounter lvl 9
    Great stuff, thanks Joe!
  • Jeremy Tabor
    Offline / Send Message
    Jeremy Tabor polycounter lvl 13
    Sweeeeet! Thanks for putting these together, guys.
  • EarthQuake
    Awesome. But when I want to use this database http://carlosmontero.com/pbr_database/ for example, which value do I use and convert to rgb? Spec(SRGB) or Spec(Linear) ? What's the difference?

    This depends on if you want a SRGB(gamma) or Linear space value, which will depend on what your engine/shader expects as an input. If you're unsure, ask your programmers/tech artists.
  • Lextripper
    Offline / Send Message
    Lextripper polycounter lvl 7
    Thanks for sharing!
    +1
  • gamerenrique
    Offline / Send Message
    gamerenrique polycounter lvl 6
    Thx for sharing!
  • luthyn
    Offline / Send Message
    luthyn polycounter lvl 8
    Thank you so much!! :) Very helpful!
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
    Just realized my google doc was visible but not editable...fixed.
  • marks
    Offline / Send Message
    marks greentooth
    Linked this to a graphics programmer (with extensive PBR experience) - his feedback:
    dafuq is 'spec (rgb)' for metals with the A - B notation? o_O

    oh, not just metals

    is taht supporese to be a range or wut? some have a range in RGB and a regular value in sRGB

    also the sRGB is a fraction, and RGB is 0-255? wat.

    I wouldn't use it, seems very confused.

    ...

    ohgod even the sRGB <-> linear conversion math supplied is wrong

    ...

    what the fuck, roughness, seriously?


    Have to say I kind of agree, the supplied content in the database is pretty all over the place.
  • Xoliul
    Offline / Send Message
    Xoliul polycounter lvl 14
    I'll have to echo that a bit, it's all over the place, a lot of it doesn't make sense. I really don't want to be a jerk and detract from the effort here, but people should take great care when using this. I can only point them towards Seb Lagarde's stuff, that's one of the only trustworthy sources out there.
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
    Yeah...well I definitely wasn't trying to present anything as definitive, and agree any data should be used with care.

    I guess I was hoping, as radiancef0rge seemed to be, that we could build something more definitive together. the doc has data from Lagarde, Quixel, people around here, etc. And it's openly editable.

    If the math is wrong, or data there doesn't make sense...let's fix it.
  • marks
    Offline / Send Message
    marks greentooth
    I guess this is the conversion math you want.

    x = LINEAR_INPUT_FRACTION
    a= 0.055

    if x <= 0.04045
    then
    (
    result = x / 12.92
    )
    else
    (
    result = pow ((x + a) / (1 + a)) 2.4
    )

    return result


    x= sRGB_INPUT_FRACTION
    a= 0.055

    if x <= 0.04045
    then
    (
    result = x * 12.92
    )
    else
    (
    result = (( 1.0 + a ) * (pow x (1 / 2.4)) - a)
    )

    return result
  • haiddasalami
    Offline / Send Message
    haiddasalami polycounter lvl 14
    what the fuck, roughness, seriously?

    Mind elaborating on this Mark? Agree with Carlos. This is a start to getting some good solid information for PBR out to artists in a presentable format.
  • marks
    Offline / Send Message
    marks greentooth
    Well you know ... take some sandpaper to your desk. The material reflectance values are the same, you just roughed it up a bit so the light scatters a bit more.

    Measured roughness is a bit arbitrary imo, any material can plausibly have a large range of roughness values without being "incorrect". It's far easier to eyeball values for roughness and get reasonably correct values. I don't think there's much need to actually measure roughness values.
  • haiddasalami
    Offline / Send Message
    haiddasalami polycounter lvl 14
    marks wrote: »
    Well you know ... take some sandpaper to your desk. The material reflectance values are the same, you just roughed it up a bit so the light scatters a bit more.

    Measured roughness is a bit arbitrary imo, any material can plausibly have a large range of roughness values without being "incorrect". It's far easier to eyeball values for roughness and get reasonably correct values. I don't think there's much need to actually measure roughness values.

    Ah I see what you mean. Yeah I think the values are meant for general reference but in the end it all depends how your art direction whats that material to be or variations of it that someone probably setup.
  • stevston89
    Offline / Send Message
    stevston89 interpolator
    Roughness is almost exactly the same as a gloss map. Everyone keep making a big deal about the change in terms with PBR when the work flow is almost exactly the same unless your are using metalness. The only differences are don't bake lighting into your diffuse and try to use real world values for your reflectance ( almost the same thing as spec) values. ( That is a bit of simplification).
  • EarthQuake
    marks wrote: »
    Well you know ... take some sandpaper to your desk. The material reflectance values are the same, you just roughed it up a bit so the light scatters a bit more.

    Measured roughness is a bit arbitrary imo, any material can plausibly have a large range of roughness values without being "incorrect". It's far easier to eyeball values for roughness and get reasonably correct values. I don't think there's much need to actually measure roughness values.

    Sure roughness simply varies, all the data that I added was from actual scans, so its specific numbers for those materials. I don't think anyone is saying you always need to use a specific roughness value or anything like that, this is just a point of reference.

    Also lol at your cranky programmer. Why not actually help out if you're going to get so worked up about it? Its a lot easier to deride someone else's effort than contribute I guess. In general I agree that its a bit confusing, but nothing that is impossible to fix.

    I totally disagree about measuring roughness btw, all of Quixel's megascans data has gloss/roughness scan data, and its super useful. Even though roughness can very heavily, for a given material there is still generally a range. EG, you're never going to have charcoal with a mirror like surface.
  • EarthQuake
    perna wrote: »

    :poly004:

    A. Graphite, not charcoal

    B. Even then, the surface is still very rough, unless you have the resolution to represent every micro-pore in the normal map, you're not going to use a full mirror gloss/roughness to represent a material like this.
  • h3r2tic
    Offline / Send Message
    h3r2tic polycounter lvl 6
    Hey, I'm the asshole whom Mark quoted making the rude comments. Sorry about that, I was being harsh to a random link sent to me via instant messaging, had no clue my comments would end up on this forum (or anywhere on the internets, for that matter).


    So for a change I'll try to be helpful in a polite way :)

    Let's start with roughness. As Mark mentioned, roughness can vary greatly within a material -- it only characterizes the slope distribution of microfacets on a surface. There is no point putting it in a generic table, as it will vary all over the place. You could potentially have another table for just roughness values, with entries like "sandpaper grade P20", or "this one particular type of plastic on this brand new surface, at this exact spot." Furthermore, "roughness" is not used as a strict physical quantity in computer graphics, but rather, as a loosely defined parameter into the specific BRDF model which a given renderer uses. Unreal Engine 4's roughness is probably going to be different from mia_material's roughness, or Marmoset's roughness. In order to have something reusable across the board, we would need to agree on one particular definition of it, or provide the raw data which goes into the BRDF, e.g. the alpha^2 parameter which the Trowbridge-Reitz/GGX model uses.

    On the other hand, it makes sense to tabulate the spec level, as it is going to be mostly constant over a surface of a single material. For a pure and flat material, spec color is directly linked to its index of refraction via the Fresnel equations (it can vary a bit due to micro-occlusion from dents and scratches). Most of the time you'll be getting detail from the roughness map, which can be all over the place, and generally will not be constrained by any measurements. TL;DR: you can eyeball roughness and go crazy with it. Or use actual textures of it, not just singular values.

    A bit more on spec color: is going to be grayscale for dielectrics, and tinted for metals. A monochromatic value for metals like copper is not very useful; an sRGB or linear RGB triplet would be much better.

    As for color space conventions: It is pretty confusing to provide linear RGB in the 0-255 scale, as you typically don't store linear RGB in 8-bit formats -- if you do, you suffer badly from quantization artifacts. Linear RGB is most commonly used internally in shader math, and constant parameters you provide to materials; it will be in the 0-1 range. sRGB on the other hand usually comes from textures, and will typically be in the 0-255 range.
  • marks
    Offline / Send Message
    marks greentooth
    EarthQuake wrote: »
    Sure roughness simply varies, all the data that I added was from actual scans, so its specific numbers for those materials... this is just a point of reference.

    ...all of Quixel's megascans data has gloss/roughness scan data, and its super useful.

    Sure, scanned data in the form of a texture map is pretty damn useful and I'd love to to be using those that's for sure!
    EarthQuake wrote: »
    Even though roughness can very heavily, for a given material there is still generally a range. EG, you're never going to have charcoal with a mirror like surface.

    Yeah this is kinda the point I was making, as long as your artists aren't dumb it's not super difficult to eyeball a value within that range - reference points are nice but not essential.
    Reflectance amounts on the other hand are way more important to use measured data for.
  • EarthQuake
    marks wrote: »
    Sure, scanned data in the form of a texture map is pretty damn useful and I'd love to to be using those that's for sure!

    Yeah this is kinda the point I was making, as long as your artists aren't dumb it's not super difficult to eyeball a value within that range - reference points are nice but not essential.
    Reflectance amounts on the other hand are way more important to use measured data for.

    Yep, agree 100%.
  • EarthQuake
    h3r2tic wrote: »
    Hey, I'm the asshole whom Mark quoted making the rude comments. Sorry about that, I was being harsh to a random link sent to me via instant messaging, had no clue my comments would end up on this forum (or anywhere on the internets, for that matter).


    So for a change I'll try to be helpful in a polite way :)

    Haha, no worries, I think we all do the same when we don't expect our comments to be posted publicly. :poly124:
    Let's start with roughness. As Mark mentioned, roughness can vary greatly within a material -- it only characterizes the slope distribution of microfacets on a surface. There is no point putting it in a generic table, as it will vary all over the place. You could potentially have another table for just roughness values, with entries like "sandpaper grade P20", or "this one particular type of plastic on this brand new surface, at this exact spot." Furthermore, "roughness" is not used as a strict physical quantity in computer graphics, but rather, as a loosely defined parameter into the specific BRDF model which a given renderer uses. Unreal Engine 4's roughness is probably going to be different from mia_material's roughness, or Marmoset's roughness. In order to have something reusable across the board, we would need to agree on one particular definition of it, or provide the raw data which goes into the BRDF, e.g. the alpha^2 parameter which the Trowbridge-Reitz/GGX model uses.

    On the other hand, it makes sense to tabulate the spec level, as it is going to be mostly constant over a surface of a single material. For a pure and flat material, spec color is directly linked to its index of refraction via the Fresnel equations (it can vary a bit due to micro-occlusion from dents and scratches). Most of the time you'll be getting detail from the roughness map, which can be all over the place, and generally will not be constrained by any measurements. TL;DR: you can eyeball roughness and go crazy with it. Or use actual textures of it, not just singular values.

    A bit more on spec color: is going to be grayscale for dielectrics, and tinted for metals. A monochromatic value for metals like copper is not very useful; an sRGB or linear RGB triplet would be much better.

    As for color space conventions: It is pretty confusing to provide linear RGB in the 0-255 scale, as you typically don't store linear RGB in 8-bit formats -- if you do, you suffer badly from quantization artifacts. Linear RGB is most commonly used internally in shader math, and constant parameters you provide to materials; it will be in the 0-1 range. sRGB on the other hand usually comes from textures, and will typically be in the 0-255 range.
    Thanks for posting, certainly some good info here.

    Reflectivity for metals certainly should be represented in color values, the only reason my data was basic brightness values is that I needed to quickly sort them for this chart. The color info is in that chart and it should be easy to pull that into the database.

    Something like: metal (y/n), metalic reflectance (HEX - SRGB/Linear) and reflectance (% - SRGB/Linear) probably makes more sense.

    One thing that makes me very curious, because I understand the theory that no(or very few) non-metals have colored reflections, is why does there seem to be so much color in the measured spec data for Quixel's scans? I wonder if that is a technical issue or if there is some other explanation?

    I'm not really sure how to address the roughness issue, I guess a big disclaimer that just says "IT VARIES!" near that column or something. Hopefully if someone is at this list, they have a fairly good understanding of the basic concepts. There are a lot of resources that explain the how and why but I think the biggest missing resource is a centralized database of known values, which is what we're attempting to do here.
  • radiancef0rge
    Offline / Send Message
    radiancef0rge ngon master
    Addressing the range issue - I may be wrong and I would be interested in hearing the reasons but if you ARE using 0-255 values for a 8 bit texture map you cant possible tell me and have me believe you that the entire world of reflective materials can be represented with those 256 values.

    Perhaps those variations are more relevantly expressed in roughness. However! I checked my ranges and EQ's Quixel data falls almost exactly into the middle of each of my measured ranges.
  • marks
    Offline / Send Message
    marks greentooth
    Addressing the range issue - I may be wrong and I would be interested in hearing the reasons but if you ARE using 0-255 values for a 8 bit texture map you cant possible tell me and have me believe you that the entire world of reflective materials can be represented with those 256 values.

    Perhaps those variations are more relevantly expressed in roughness. However! I checked my ranges and EQ's Quixel data falls almost exactly into the middle of each of my measured ranges.


    Are we talking about reflectance or roughness here? I don't think there's any reason you can't fit a wide enough spectrum into 0-255 for reflectance - many people have already done it and it seems to work fine.

    In fact a bunch of people I've seen aren't even using per-pixel inputs for reflectance, just one constant per material definition - the perceptual variation in specular response is generally driven by the roughness term which is where all your textural detail/variation lives. Which again, appears fine in the 0-255 value range.
  • EarthQuake
    perna wrote: »
    Graphite is a form of coal, so is this:

    ... and obviously there exist all the various gradations between the different materials, from rough to shiny.

    Sure, and so are diamonds, however I doubt an artist will get confused by the difference between diamond and charcoal on a reflectance reference chart. Idealy a decent chart would have enough data points so you can can get an idea of the different roughness values between charcoal, graphite, and diamond, even if all are just different forms of carbon.
    It was supposed to be amusing observation, hence the smiley that you quoted.

    But since you took it so seriously, I'll respond in kind: Not only are there all sorts of different grades of materials, but different atmospheric conditions and factors like ageing, coating, and impurities as well. What this boils down to is that any kind of measured data only serves as a guide. No more. You still very much need the eye of an artist, and you can still break the rules and go against the numbers to get the look that you want/need.
    Of course, but has anyone here suggested otherwise? This is a guide meant for reference, its not an end all-be-all list of values that every artist needs to use. In most cases, its simply a starting point.
  • radiancef0rge
    Offline / Send Message
    radiancef0rge ngon master
    marks wrote: »
    Are we talking about reflectance or roughness here? I don't think there's any reason you can't fit a wide enough spectrum into 0-255 for reflectance - many people have already done it and it seems to work fine.

    In fact a bunch of people I've seen aren't even using per-pixel inputs for reflectance, just one constant per material definition - the perceptual variation in specular response is generally driven by the roughness term which is where all your textural detail/variation lives. Which again, appears fine in the 0-255 value range.

    Agreed the process varies per engine. The two engines I have worked on accepted an 8bit texture for specular.
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
    Regarding Specular range: I was just under the impression that sometimes measured reflectance data is in the 0-1 range, and in some circumstances (like photoshop color picker for instance) its useful to be in the 0-255 range. Both have applications right? Why not store both and help artists not have to do the conversion themselves? Maybe we just need to store both the SRGB and Linear values in both ranges?
  • radiancef0rge
    Offline / Send Message
    radiancef0rge ngon master
    EarthQuake wrote: »

    Of course, but has anyone here suggested otherwise? This is a guide meant for reference, its not an end all-be-all list of values that every artist needs to use. In most cases, its simply a starting point.

    Qft. Hence "informed" also
  • EarthQuake
    cman2k wrote: »
    Regarding Specular range: I was just under the impression that sometimes measured reflectance data is in the 0-1 range, and in some circumstances (like photoshop color picker for instance) its useful to be in the 0-255 range. Both have applications right? Why not store both and help artists not have to do the conversion themselves? Maybe we just need to store both the SRGB and Linear values in both ranges?

    Yeah the different sets of data are useful for different reasons, I think the main issues is just looking at it, its confusing.

    Not sure if this is something you could set up, but maybe we could stick to one base value, with a little button to convert to different values, say:
    Base value = RGB(SRGB), 255, 255, 255 scale
    Convert to: RGB(Linear) 255, 255, 255 scale
    0-1 (SRGB
    0-1 (Linear)

    Maybe that's overkill and would be even more confusing though.
  • cman2k
    Offline / Send Message
    cman2k polycounter lvl 17
    Here's a more high-level thing;

    Let's say the spreadsheet stores a wide variety of data, it can store things in 0-1 range and 0-255 (and maybe some math done automatically). It can store reflectance values with color for measured data, but also the median luminosity of those reflectance values converted for use in a metalness workflow (again maybe more auto-math). For reflectance we could store range and average, and for roughness we put some big disclaimer label disclaimer (APPROX!).


    And then on the front-end, if you could use some drop-downs or checkboxes to say "show me data for a metalness workflow, where my albedo is SRGB and reflectance is linear, and I want to see average reflectance" or "show me data for a pure pbr workflow where all data is linear, and I see the possible range of reflectance". All it would be doing is hiding/showing different sets of data based on your use case.


    That'd be pretty useful right?
  • EarthQuake
    perna wrote: »
    That's not actually the point I made. And diamond isn't actually a form of coal, but that's irrelevant.

    The point I made is that charcoal and anthracite coal are classified gradations. Since these exist, all the between points need to exist as well. And each single gradation can not have a unique name, there would be a limitless amount, which means that the loose definition of "coal" actually encompasses a range of values. There's no god who makes these materials on-spec, they're results of natural processes which are different each time.
    Sure, but there's nothing stopping us from listing a reasonable amount of common variations. I guess we could argue endlessly what would constitute reasonable though.

    I'm writing in reference to you disagreeing with Marks about Roughness. I agree with him that since Roughness depends on so many factors other than the internal composition of the material, such recorded values have limited use.
    Never did I disagree with the basic concept that roughness varies (in fact quite the opposite if you read the whole thread). The basis of my disagreement was that measured roughness values have no use, I think they do.
    Also, a lot of artists DO in fact think that these values are "real" somehow; that they are God's own values and that they are fully "physically accurate", whatever that means. So it's well worth stressing that this is not the case. The best value we get from such measurements are their relative nature: Seeing at which point a material lands between two other materials, and then in-engine you determine the ranges and curves for these values as you yourself see fit.
    Certainly, I guess I just get sick of writing disclaimers at some point. Hopefully people are doing their own research as well if they've found their way to this thing. If not, I'm not sure a million disclaimers will really help, but who knows. I've written quite a lot on the topic and I've linked to the article in this thread, I guess I could re-write it here too but honestly I don't have the time or energy for that.
  • EarthQuake
    cman2k wrote: »
    Here's a more high-level thing;

    Let's say the spreadsheet stores a wide variety of data, it can store things in 0-1 range and 0-255 (and maybe some math done automatically). It can store reflectance values with color for measured data, but also the median luminosity of those reflectance values converted for use in a metalness workflow (again maybe more auto-math). For reflectance we could store range and average, and for roughness we put some big disclaimer label disclaimer (APPROX!).


    And then on the front-end, if you could use some drop-downs or checkboxes to say "show me data for a metalness workflow, where my albedo is SRGB and reflectance is linear, and I want to see average reflectance" or "show me data for a pure pbr workflow where all data is linear, and I see the possible range of reflectance". All it would be doing is hiding/showing different sets of data based on your use case.


    That'd be pretty useful right?

    Yes, I like the sound of that. I think one of the most common issues have when looking at reference charts is how to apply that information to a specific engine/shader/workflow. If we can set up some math that gives you just the info you need for a common situation, that would be great.
  • Gestalt
    Offline / Send Message
    Gestalt polycounter lvl 11
    I would imagine the reason the scan data had color in some of the specular would have to do with not being able to get out all of the 'diffuse' (if it's tinted the color of the diffuse). It may also have to do with the model they're making the data for, depending on the color of the specular. There could be something more obscure too, I don't have the data so I can't really comment too much.

    I tried to get my own data for skin a while back and the polarized light filtering method isn't absolutely perfect. What I was calling the specular still had a hint of the skin color. I then tried to subtract out more of my diffuse color (assuming the filtering wasn't perfect) and got a blueish tinted specular like you would expect if you wanted to add your specular color on top of your diffuse and get white.

    At the end of the day the data depends on how you're using it in the model and if you're expecting to add your specular and get white then your specular colors need to counter the diffuse color. UE4's model already takes into account the specular so there isn't even an option to color it (besides metallic). If the specular has a little bit of the diffuse color to it maybe you could get away with just a bit of metalic... (I'm not completely sure how a complex material with some metal suspended in it would react). I'd be interested in learning more theory.
  • EarthQuake
    Gestalt wrote: »
    I would imagine the reason the scan data had color in some of the specular would have to do with not being able to get out all of the 'diffuse' (if it's tinted the color of the diffuse). It may also have to do with the model they're making the data for, depending on the color of the specular. There could be something more obscure too, I don't have the data so I can't really comment too much.

    I tried to get my own data for skin a while back and the polarized light filtering method isn't absolutely perfect. What I was calling the specular still had a hint of the skin color. I then tried to subtract out more of my diffuse color (assuming the filtering wasn't perfect) and got a blueish tinted specular like you would expect if you wanted to add your specular color on top of your diffuse and get white.

    At the end of the day the data depends on how you're using it in the model and if you're expecting to add your specular and get white then your specular colors need to counter the diffuse color. UE4's model already takes into account the specular so there isn't even an option to color it (besides metallic). If the specular has a little bit of the diffuse color to it maybe you could get away with just a bit of metalic... (I'm not completely sure how a complex material with some metal suspended in it would react). I'd be interested in learning more theory.

    Yeah, I have a hunch it has something to do with the polarization, but I don't really know enough about exactly what they're doing with their scanner.
  • h3r2tic
    Offline / Send Message
    h3r2tic polycounter lvl 6
    Some dielectric materials with a complex internal structure will give you colored spec. Cloth is a fine example; you could probably do an experiment in which you would model all the individual yarns as pure dielectric materials with monochromatic spec. If rendered with full global illumination (including the caustics) at the micro scale, it would probably look fine. But as you observe bulk scattering of the material at the macro level, or measure it using common scanning hardware, the complex lighting interactions look like colored spec off a material which is technically a dielectric.
  • [Deleted User]
    Offline / Send Message
    [Deleted User] insane polycounter
    The user and all related content has been deleted.
  • Gestalt
    Offline / Send Message
    Gestalt polycounter lvl 11
    That makes sense. Does anyone know if the 'roughness' model in UE4 accounts for that coloration?
  • EarthQuake
    Can an admin remove the entire charcoal debate? This is confusing enough.

    I'm making my own spreadsheet with simple hex values that I can actually use while making art. :poly142:

    No charcoal for you, Waggle!
1
Sign In or Register to comment.