SO I've modeled and textured a couple of things using a Marmoset 2.0, and I was able to get my assets looking pretty okay. Although I'm not too skilled in texturing, I was pretty confident that I was doing things alright, until I heard that PBR requires precise values for each material. I tried to texture something in Marmoset using
this chart to get my base materials, and it ended up looking kind of off to me. When I fiddled around with it myself, however, I was able to get it to look better. I feel very weird about this, and I'm not sure if this is a correct way to do things. If anyone who knows more about texturing/PBR theory could provide some insight, I'd greatly appreciate it!
Replies
Roughness/gloss should have a lot of variation, it helps things look clean or dirty, or add variation between materials that are similar. Reflectivity shouldn't be played around with as much, things are normally metal or non metal, and blurring those lines can get weird.
And Also this depends on if you are making one asset, an entire game, or one level. If it's for one asset, just do whatever looks best. If you are working on a game, you have to remember that there's tons of different lighting variations, and you should look at your asset in those situations before really pushing values much beyond realistic vales. If it's just for one level, then it's less for an issue.
Researching, finding, snagging or whatever you do to get those "PBR calibrated" values is important to give yourself a jumping off point. Take the values you've found or made, and do quick test renders in your engine. Spoilers, they'll probably look wrong right out the gate unless you're really familiar with your engine's lighting models. Play around with it, but be sure to keep your swatches, or hex values or whatever your base is so you can always go back if you find you've made a hot mess of things.
Your Roughness map will probably be where you spend the lion's share of your texturing time, as that's where all the neat little details that really sell models happens, and it's also the map you can play around with the most.
Disclaimer, to the following statement. Being physically accurate and looking good aren't the same thing. Maintaining plausible values is more for the technical reason of looking consistent in different lighting environments without having to tweak materials.
That being said, even if you are trying to maintain plausible values, the charts are only there as a jumping off point. They're just there to give you an idea of what value range you should shoot for when working with certain real world materials. Ultimately charts are only there to act as guidelines to keep you within the realm of the observed plausible materials.
blue plastic, black plastic, white plastic... they're all brighter or darker, or more saturated colour values. what's important to understand though, is that the reflectivity of all three of them is the same. they're all the same material, they all reflect the same amount of light.
this is why the metalness workflow is so popular (memory conservation aside). because almost all non metals have the same, or within such a small range of the same reflective value that just giving them all the same value makes no difference.
so my advice would be: use measured values (where possible) for reflectance, or 0.04 (linear) when no measured value is available. pour as much detail as you can into the roughness/gloss map, this is what is going to define your material more than anything else. and use whatever you want for your albedo.
If I can go into photoshop and make a roughness and albedo whatever I want aslong as I use SRGB and follow the rule of no AO or Highlights...
I would of thought reflection could be a single value; i.e. just a flat grey and keep adjusting until I feel the visual is "correct" but how is this linear? and what makes it 0.04?
I understand Fresnel is a 0-1 ratio; and I know how it works in real life;
I think my struggle really is; what is "linear" and how is it achieved.
There are basically two ways to create maps like glossiness and specular maps etc.
Option 1) You type in the values numerical in Photoshop and then paint with that value. Most often this will be the case for parametric and percentage values which require a monochrome map.
Say for instance you want to numerically create a texture that makes a material reflect 50% light. You would simply flood your texture canvas with RGB 128 128 128. Save and import it into your 3D app. This type of texture SHOULD NOT be linearized upon import, because you didn't rely on your nonlinear vision when creating it. The resulting map is already LINEAR, because RGB 128 128 128 maps precisely to the float value 0,5 (50%) of your reflectivity channel.
Option 2) You create the aforementioned reflectivity map perceptually, i.e. you flood the Photoshop canvas with a random graytone and then tweak that gray (not numerically!) with Curves, Brightness, Levels etc. until TO YOUR EYES the canvas look like 50% (or whatever percentage) of the monitor's maximum luminosity.
Due to the monitor's 2.2 gamma curve (which darkens the midtones), the perceptually created gray won't likely be RGB 128 128 128 as before, but most likely much closer to the RGB value 187 187 187, (the value which will make your monitor emit 50% of its maximum luminosity). This image is thus roughly in the nonlinear sRGB space and therefore NOT LINEAR.
When you save it in Photoshop, assign it the sRGB color profile and upon import linearize it in your 3D app. You can now use it for physically correct rendering.
This is how I always decide whether to linearize an image or not (irrespective of the map type). On some days I would simply desaturate an albedo or diffuse map and edit it perceptually with color correction tool until my eyes like the distribution of the gray tones, but without ever checking pixel values. Result: sRGB file --> has to be linearized since I'm relying on my vision.
On other days I prefer to create textures wit precise numerical values for better control. In this way I would, for example, paint an areas of a texture with e.g. RGB 77 77 77 (~ float 0.3) in order to modulate one part of a surface with a glossiness of 0.3 (30%).
Another part of the texture might receive RGB 192 192 192 to yield a 0.75 (75%) reflective surface. Result: Linear bitmap --> no linearisation required!
I hope that somehow answered your question. Maybe I misunderstood you though.
Cheers!
There are basically two ways to create maps like glossiness and specular maps etc.
Option 1) You type in the values numerical in Photoshop and then paint with these values. Most often this will be the case for parametric and percentage values which require a monochrome map.
Say for instance you want to numerically create a texture that makes a material reflect 50% light. You would simply flood your texture canvas with RGB 128 128 128. Save and import it into your 3D app. This type of texture SHOULD NOT be linearized upon import, because you didn't rely on your nonlinear vision when creating it. The resulting map is already LINEAR, because RGB 128 128 128 maps precisely to the float value 0,5 (50%) of your reflectivity channel.
Option 2) You create the aforementioned reflectivity map perceptually, i.e. you flood the Photoshop canvas with a random graytone and then tweak that gray (not numerically!) with Curves, Brightness, Levels etc. until TO YOUR EYES the canvas look like 50% (or whatever percentage) of the monitor's maximum luminosity.
Due to the monitor's 2.2 gamma curve (which darkens the midtones), the perceptually created gray won't likely be RGB 128 128 128 as before, but most likely much closer to the RGB value 187 187 187, (the value which will make your monitor emit 50% of its maximum luminosity). This image is thus roughly in the nonlinear sRGB space and therefore NOT LINEAR.
When you save it in Photoshop, assign it the sRGB color profile and upon import linearize it in your 3D app. You can now use it for physically correct rendering.
This is how I always decide whether to linearize an image or not (irrespective of the map type). On some days I would simply desaturate an albedo or diffuse map and edit it perceptually with color correction tool until my eyes like the distribution of the gray tones, but without ever checking pixel values. Result: sRGB file --> has to be linearized since I'm relying on my vision.
On other days I prefer to create textures wit precise numerical values for better control. In this way I would, for example, paint an areas of a texture with e.g. RGB 77 77 77 (~ float 0.3) in order to modulate one part of a surface with a reflectivity of 0.3 (30%).
Another part of the texture might receive RGB 192 192 192 to yield a 0.75 (75%) reflective surface. Result: Linear bitmap --> no linearisation required!
Concerning your other question: 0.04 refers to the Fresnel reflectivity at facing angles (also refered to as F0, since the angle between your eye vector and the surface normal is 0°). The F0 reflectivity of dielectric materials approximately ranges only between 2 and 8% (i.e. 0.02 - 0.08). As this is a very small range when compared to metals, game engines using the metalness workflow usually omit the Specular map (F0) and simply hardcode it to 4% (0.04).
I hope that somehow answered your question. Maybe I misunderstood you though.
Cheers!
Linear simply refers to linear color space, as apposed to sRGB or gamma corrected color space. When your texture is gamma corrected, more values are used to represent the darker ranges to give them more precision. This means that with sRGB textures, mid-gray isn't 127.
Linear space on the other hand maps the color values in a linear fashion, so 127 is actually mid-gray.
You don't generally need to author your reflectivity maps in linear space, most engines will have an option to use sRGB or linear. The only map that REALLY needs to be linear space is a normal map, as normal maps represent very specific math. Gloss/roughness maps generally make sense in linear space as well, but again sRGB is perfectly fine here as they generally is not a "correct" roughness value, it depends on your gloss/roughness curve, the wear level of your material, etc.
I have a question I've been mulling over since playing around with some tillable textures and such using PBR...
How much control do we actually have over the Albedo; I know its recommended to use a similar median luminance value to that of the Quixel scans but obviously all wood isn't the same; how much range is available? Do I even have to refer to this or am I being OTT?
Also, in regard to using photosource textures like brickwork; what about crevices inbetween each brick; I know to remove lighting data, but if I removed the info splitting the bricks it would just look like 1 big rock...
cheers!!