Diffuse, albedo or color, are all terms that different software and engines apply to this element. It defines the color of the material, and as such can be called the most basic property it has. In physics terms, it relates to how the material interacts with light resulting in our eyes being able to perceive color.
We split materials in two groups: Metals (Conductors) and Non-Metals (Dielectrics). Non-Metals have simple IOR (Index of Refraction) values while Metals exhibit a more complex IOR. Because of their complex nature Metals don't have any diffuse colour - they are pure reflection and their colour tint comes from the light they reflect/absorb . Therefore, for Metals we use pure black in the diffuse colour (for a Spec/Gloss workflow) and that's why here we will only talk about Non-Metals.
We are working with CGI and we are now quite used to choosing our colour values in the range of RGB 0-255. When it comes to real world colour values we work with Colour Checkers for calibration of our textures/footage. When we get used to looking at colour checkers next to textures we may notice that real world objects are actually darker/brighter than we initially thought.
One could find a lot of information on the internet on the topic about correct values for white and black. This information might be quite confusing - some people say that max white is 243 RGB, some say 230 RGB, some say it's 0.95 RGB, 0.9 or simply 90%. The confusion might come from the fact that some people are taking about sRGB (gamma 2.2) and some about Linear RGB values (check the Linear Wokflow article). However, when we talk about reflectance values, we should be talking in linear values as reflectance is measured in linear %.
The basic colour picker in 3ds Max shows only linear colour values. That's why we are going to use the Corona Improved Picker for demonstration purposes.
When talking about 90% max white, people are actually talking about this setup in linear space (sRGB is disabled and we type the value in the 0-100% scale):
The Corona Color Picker gives us the ability to switch between different colour scales and more importantly between sRGB and Linear RGB colour spaces.
When we switch to 0-255 scale we can see that 90% actually is 230 Linear RGB.
The picker translates % values into Linear RGB values.
As most people are using the standard 3ds Max colour picker - here is how 90% max white should look there. The default colour picker works only with linear values. Imputing sRGB values will give incorrect results.
And here is how it will look in a VRayColor map.
If we now enable the sRGB switch we can see that 90% max white equals 243 sRGB.
This is the reason behind all the confusion and frustration that happens when someone is new to these terms and that's why values you find on the internet can be all over the place. Always make sure the values you are using are in the space you're working - as mentioned above imputing sRGB values where you should put Linear RGB values will give incorrect results. For reference - colours picked from the web are in sRGB space unless otherwise stated.
As a general rule here are the appropriate values for white and black:
Pure White = 90% (230 Linear RGB or 243 sRGB)
Pure Black = 1-3% (3-8 Linear RGB or 31-52 sRGB). Black can go down to 1%, however the safe zone is considered around 3%.
These values will make your renders appear a bit washed out. However, that's how they should appear. If you check a raw, unprocessed and linearized photograph you will see the exact same result - lack of contrast, generally boring. Contrast is something that's meant to be added when doing compositing/grading/retouching and when added to a raw render, the picture will start looking much more realistic. Furthermore, correct reflectance values are important for correct light calculations - too bright or too dark colours can produce unrealistic lighting solutions.
The above rule is valid not only for black and white but for the whole colour spectrum. Substance Designer has a dedicated node that checks if any colour value exceeds 243 sRGB. Let's say that for example we want to make a "nice" green wall:
We've settled on this colour, however, this green has literally too much green in it. It will appear a bit nuclear when rendered, will produce unrealistic colour casts and will reflect too much light in general.
If we follow our rule about reflectance values we can lower the overall Value of the color to 243 sRGB (Corona Color Picker value is always shown in sRGB regardless of the sRGB switch). We can now see that our colour darkens uniformly and our Green channel sits at 229 Linear RGB - just like it should be.
So, what is the Diffuse map?
This map should represent the raw color of the material ideally with no lighting information. As discussed above, the color range for dark values should stay within 1-3% and the brightest color value should not go above 90%.
As mentioned, the ideal diffuse map should have all lighting information removed and only pure colour should remain. This gives us correct Reflectance (luminance) values to feed our render engine and will yield more realistic results in the end. However, using only pure colour will give poor results in most cases - areas of more detail like cracks or grout gaps on brick walls will appear too bright, without enough depth. That's why we need to add back some of that lighting information in the form of an Ambient Occlusion (AO) map. In VRay the best and easiest way is to do this with a VRayCompTex map set to Multiply:
So why remove the lighting information in the first place when we will add it later on anyway? In short: because we have more control and get more realistic looking overall results.
The long answer: when we remove lighting information from textures we do not only remove ambient light but also direct light. The latter is especially deadly if we want to render realistic materials - imagine a texture lit from the left but in our scene the light source is on the right. Not going to look pretty. With removing all lighting information we also get correct colour luminance values which helps immensely when we need to replicate something from the real world.
Furthermore, when we split the colour from everything else we have complete control over how it looks - if we want it darker, brighter or with a different hue it doesn't matter. That's why we want to have our ambient occlusion map separately - otherwise we will colour correct colour and lighting information simultaneously. Having it as a separate layer also gives us control over how much of the ambient shadows we wan't back into our diffuse. For ex. in cases where we use geometric Displacement we might want less AO compared to when we only use Normal/Bump maps.
If we don't have an AO map but have pure colour Diffuse and a Normal map, we can bake the AO map from the Normal with software like Knald or Substance Designer.
An additional note on specific materials:
Fabrics: avoid using an AO map even if you have one available. Fabrics are soft and translucent so they rarely exhibit the type of occlusion that an AO map adds. Using AO with fabrics will make them look rigid and hard while they should be the opposite.
Translucent materials: the same applies here. An AO map can break the "softness" that is usually common for Translucent materials.
In 90% of cases we use (or should use) diffuse maps for Non-Metals. Depending on the workflow used, on the program they have been generated/exported from and on artists' personal preferences you can find various names for these maps - diffuse, color, albedo, basecolor.
In essence these maps are the same, however, it is important to note that at the moment there are two workflows used for building PBR materials - Specular/Glossiness and Metal/Roughness. The difference between them is that in the former (which is the main in VRay), the diffuse of Metals is pure black, while in the latter the coloration of the metal is embedded in the diffuse (for ex. if we want to make gold with Spec/Gloss we are going to use a black colour in the diffuse and yellow in the reflection; with Metal/Rough workflow we will use yellow in the diffuse and pure white in the reflection).
This means that a Diffuse map of a metal produced for a Metal/Rough workflow will actually be a Reflection map (usually you will find these named albedo or basecolor). Furthermore, as Metal/Rough workflow is mainly oriented towards the game industry where every texture counts, often times one will find Metals and Non-Metals mixed in the same map. In such cases it is important to know if this map is corresponding to our material workflow. In any case, the best way to build mixed materials in VRay is to create separate materials and blend them together.
Specular/Glossiness (left) vs. Metal/Roughness (right)
Diffuse Roughness parameter is used to simulate very rough surfaces or surfaces covered in dust. Nice example of where it might find good implementation is old weathered wood, dusty objects, skin and fabrics. Unfortunately, prior VRay Next Update 2, the Roughness parameter uses a Lambertian BRDF which just doesn't work. Everything starts to appear flat and toon-like once the roughness starts to rise. This makes it practically unusable for realistic rendering. In VRay Next the roughness switches to Oren-Nayar BRDF and it does look considerably better, however it still dims the Diffuse parameter too much. Still, it can be used with values between 0-0.5.
When sampling colours, make sure which space are you working in - sRGB or Linear RGB.
Diffuse RGB values should be in the 3%-90% range (8-230 Linear RGB; 52-243 sRGB). In some cases one can do down to 1% (3 Linear RGB; 31 sRGB).
For best results we multiply a Diffuse map (with no lighting information embedded) with an AO map before plugging it into our material.
In VRay we work in the Specular / Glossiness workflow. Make sure diffuse maps you use/create are for the correct workflow.
Diffuse Roughness parameter doesn't work realistically in VRay. Don't use it as it will give fake appearance to your materials.
Linear Workflow: for Diffuse maps we use Gamma 2.2 (VRayHDRI: sRGB).
Linear Workflow: for Ambient Occlusion maps we can use Gamma 1.0 (VRayHDRI: Inverse Gamma: 1.0) or Gamma 2.2 (VRayHDRI: sRGB) for more contrast.