I've read through
http://www.marmoset.co/toolbag/learn/pbr-practice
Maybe I'm just really stupid, but I still couldn't figure out the answers to the questions I have:
How is it an improvement from the diffuse/spec/gloss workflow and
In order to adopt to this new workflow, what exactly am I supposed to do differently? What do I lose or gain control over by switching over?
Replies
Some caveats, don't put AO or anything like that in your albedo. In Toolbag, and other PBR supported engines the shaders will have slots for these maps now. And, since gloss and AO are grayscale, you can put these in the same texture in different channels to save memory. The metalness can go in the alpha. Which is a nice by-product of this workflow, more bang for your buck.
I THINK I've covered the basics. If I am wrong anywhere, anyone who knows the correct answer please correct me. I need to know this stuff accurately too
So to shift your workflow, now all you have to worry about is painting accurate albedo and metallic color values into your diffuse map (usually without AO), and simply create a mask for what is metallic.
The stuff on the toolbag site is informative but doesn't really explain what exactly has changed from the traditional workflow.
What I'm getting so far is essentially spec and gloss have been merged into one property called 'roughness' that simultaneously controls both highlight radius and intensity, since the two are inherently tied anyway?
I'm not really sure what implications this has on the diffuse/albedo map however. It just means that in cases like metal, there's no albedo map at all, since high reflectivity doesnt really allow for surface colors?
The 'gloss' value used in the old method was essentially always there to describe the roughness of the surface (tighter highlights for glossier surfaces like polished wood vs looser highlights for rougher surfaces like unpolished wood). Now you'd use the roughness value to describe that (low roughness for polished surfaces and higher roughness for less polished ones).
The difference is that the old method was mostly a hack of changing the radius/sharpness of the highlight and not actually a shading model to describe the polish/roughness in a physically based way.
I'm still v. confused about the whole metalness thing though. In UE4, is it essentially the reflectivity of the surface? Or is reflectivity defined by roughness?
I read somewhere that is the same thing as a gloss map but inverted as black becomes white and white becomes black, is this a correct assumption?
also I never used gloss maps so i got no idea where to start out whit this. does anyone got good tutorial on how to create a glossmap cor roughness map?
thanks
With roughness, black is the most reflective, white is totally diffuse. well, technically 0 and 1. All of the detail you used to put into your spec maps, now goes into roughness. In my short experience with PBR. I have primarily used maps as masks to lerp between two values of roughness,
I much prefer texturing in marmoset, since you get instantaneous material updates, whereas in UE you have to reimport the textures each time, which is a huge pain especially when making tons of small adjustments.
This worked well before, but now it seems they use different texture maps from one another?
You can also change the reflectivity module from specular to metalness to get the same behavior as UE4 there too.
You'll want to use a metalness map instead of a specular map if authoring for standard UE4 shaders.
I'm just going back and studying the diving helmet textures now.
So, a metalness map essentially specifies whether something is metal or not in a 'binary' sense (as in it is just black and white with no real in between values) and then the metal parts are 'modulated' via the gloss/roughness maps as far as surface variation goes? Is that about right?
Metalness defines whether the surface is a raw metal or not (this is important, painted metal isn't metal for instance, its paint).
For metalic surfaces, the specular intensity is pulled from the albedo map, while the diffuse is darkened to 0 (raw metals reflect nearly 100% of light, so they don't really have a diffuse component).
For insulators, or non-metals, the diffuse color is pulled from the albedo map, while the specular intensity is set to a fix value (0.04 or so), as most non metals reflect light in vary narrow range of values.
Gloss/roughness maps define how glossy or rough a surface is, and how tight or wide the specular reflections are. Glossier surfaces have tighter, more intense highlights, while rougher surfaces have wider/blurrier and more dim highlights. This applies regardless of material type.
All of this is explained in depth in the two tutorials we put together for the Marmoset site:
Read this one first to understand the concepts: http://www.marmoset.co/toolbag/learn/pbr-theory
Then this one to understand the practical implications: http://www.marmoset.co/toolbag/learn/pbr-practice
If you've already read them, read them again! A lot of the questions you're asking here are explained in these articles. It seems like you're starting to undestand this a bit more so I think a re-read would be very helpful.
Also, get in there and try creating content with this workflow, I think you'll learn a lot more by trying it than by asking questions.
I'm still unclear on some things, like for instance how I would represent a shiny insulator like plastic or car paint.
I'll start messing around with putting it into practice tommorow though and hopefully that will help me understand even more.
Thanks again for all your feedback, it's cleared up a lot of stuff!
Create the diffuse color for them in the Albedo
Metallic set to black
Roughness would have a quite a white (or black if you're inverting it) value to make the surface fairly glossy
I would also like to know where these values are used for each material, e.g. 0.04 for charcoal or something like that!
These values are for Specular map, but if you use Metalness, you don't have to worry about specular levels of the non-metal materials. And you put values for metal materials in your Albedo map.
Superfranky - thanks, this seems a lot easier. Howcome metalness isn't used all the time, or is just down to different engines having different workflows? So for something like, say, cracked leather, this would be painted in the Albedo and highlights would be changed in the roughness? Isn't there a lack of control for specularity if there's no spec map for it, as it's set to black on the metallic map?
As far as glossy plastic goes, you should be able to do this just fine with a metalness map and your gloss map. Something like a car paint shader is more complex and would likely require a custom shader.
The gloss/roughness map again, simply defines how rough or smooth the surface is. If the surface is a glossy plastic, you make it glossy in the gloss map. For wear and tear and such, say for where the gloss coating on the plastic is worn off, you would make it more rough in the gloss map. You shouldn't be painting highlights or lighting of any sort into any maps with modern shaders.
The best way to visualize these concepts is to load up TB2/EU4, add a sphere, and play with simple paramateric materials. Adjust the gloss/roughness values, observe how the reflections change. Play with the metalness value, etc.
For a quick understanding of the differences, a metal will have reflections with color to them and a non-metal will have reflections that are the same color as the light source (so white highlights for white light).
What you choose depends on what type of paint you're making.
If you're making a metallic paint then use a metallic value of 1 and use a fairly low roughness value so that it's polished/shiny.
If you're doing something like interior paint then use a metallic of 0 and change the roughness depending on what type of finish you want.
'Flat' might have a roughness of 1.0 and 'semi-gloss' might have a roughness of 0.2, if you wanted something that had reflections like glass you might use a value of zero.
Notice in that picture that the highlights are white. The paint is non-metallic, you would set the metalness to 0.
The 0.02 for graphite refers to the base color. So for RGB you'd have 0.02, 0.02, 0.02
It's almost black but you should never set any base color to 0. Graphite tends to be pretty rough and diffuse looking so you would set the roughness close to 1 depending on how much of a highlight you want. Generally you don't have to touch the specular value, if you want something to look more diffuse then increase the roughness. Adjust the specular value when you want to keep the same sharpness of the reflections but reduce the intensity as seen on the parts of the surface that are facing the camera (sort of like changing the IOR). It'd be best to leave that value to the end.
What if you had an object/material that had non-metal and metal parts on one texture map?
The best thing to do is to get a good feel of what sliding between 0 and 1 for metalness does and using that as your guide (if you want a little bit more color in the specular then maybe add a little metallness). At the end of the day it's just a shader model and you have to use it in whatever way gets the right look.
edit:
non-metal to metal
edit2:
and here's roughness (on a non-metal)
a roughness of 0 is polished and shiny and roughness of 1 is almost diffuse
here's roughness on a metal
I was reading about this as well and was mentioned in Andrew Maximov's tut, you never want to fudge the values, just have it as 0-1 like you said. Thanks for the detailed explanation as well Gestalt!
This isn't to say it's not possible to do something in between, but the material you'd be representing would have unusual qualities. For example, if you're trying to do a spray paint that has both polymers and metallic flecks in it, then you might be able to get away with generalizing that as something fractional that isn't quite a full metal or full non-metal. Just keep in mind they're two different shader models for two different types of materials.
Then you have rust, or very old and worn metals that simply don't reflect like a raw, pure metal does, which can be easily represented with a non-metalic value.
In some cases a soft fade makes sense, for like dust or other micro-surfaces where the actual particle is probably smaller than a pixel in your texture, or for material transitions in general, If you stick to rigidly to only 0 or 1 transitions can be very harsh. Those are probably the only situations I would recommend having non binary values in normal use.
Sorry if that makes no sense
for UE4: Yeah that all makes sense to me. The only question I have is what if the material you are making has non-metals and metals? Say a wooden door with metal hinges and handle? Or a sci-fi painted door with metal scratches? Can you use a metalllic map in UE4? Is it worth if for scratches?
https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/index.html
yes, you can use metalness map in UE4
If you have wooden door with metal hinges then you paint metal parts of your texture white in metalness map and non-metal parts black.
If you're working with UE4 your best bet is to make a mask texture for where your material goes and multiply a scalar to control the roughness. You can add or subtract scratches from this if you want full control of how the roughness is used.
I'm working with Marmoset. Maybe I should look into UE4 too.
Not really true at all. Roughness is essentially a gloss map, not a spec map. It determines how sharp or soft your specular reflection is. The details don't have to match up with your normals necessarily. Some of them can, but a good gloss/roughness map has details in it that aren't a part of the diffuse, normal, or spec. Roughness with the metalness workflow is what is going to give you the most control over your material definition.
The control for it is simply to put brighter values for shinier materials and darker values for for more matte materials ( in marmoset). For scratches and wear it depends on what the surface material is and what material is underneath the surface. It also depends on how the wear was made. There is no set rules it is really about observing materials and determining what you want. The brushed metal look will require a anistropic shader.
Note that these aren't the 'physically correct' values for anything as that is some shit I don't even wanna THINK about yet let alone try to tackle.
Also I probably fucked a lot of stuff up here, but this is my first try with PBR. Just sharing this to externalize my though process mostly.
____
My maps. Sorry for the wasted space in the images, this was pretty quick so I didn't bother making a 'proper' unwrap.
Metalness (for this first one since its just black and white I overlayed the UVs to make the mapping a bit clearer since it was pretty quick and messy)
Pretty straightforward, full black for the plastic section and full white for the metal.
Albedo: Simple overlays with some texture variation between the metal and plastic.
Microsurface/Gloss/Roughness:
This has the broadest range of texture variation, esp on the metal. A lot of the data is unique to this map, but the dirt and variation in the albedo is also present here.
The 'roughness' levels are relatively close for both materials.
Otherwise not that different from a spec or gloss map, guess I conceptualized this as closer to gloss though, since what we used to think of the 'base brightness' for these materials was handled via the metalness values. And it is after all a 'gloss' slot. I am somewhat fortunate in this regard as I spent a lot of time wrapping my head around what a gloss map was, before this PBR thing.
I could see this probably being a big stumbling block for people who didn't necesarilly bifurcate the idea of gloss map vs. spec map in the times of the Old Way though.
Screenshot of the material in TB2:
I dunno, looks like some metal and some plastic to me. Keep in mind I'm not some texturing genius, I was barely getting the hang of it before, so if this looks shitty, let me know.
I also wanted to adress the whole argument of having 'transitional' metalness value, since the verdict seems to be out on whether they should be allowed to happen. My rationale was if there was any dirt or residue over the metal, it would effectively interfere with the metalness of that surface and thus should be (faintly) feature to the metalness map. So I took some of the dirt and added it at 10% opacity to the metalness map. Yall can judge if it looks 'better' or not.
One aside. When I made the plastic a darker value than the metal, I get these really ugly shading artifacts in the transitional area. Anyone know why? I could see this being very problematic for obvious reasons.
Regarding the dark plastic: first off how dark are you going? Don't go below 30/255. You might not be doing that though, and it won't be the cause, but it'll make it less bad.
I think that's a hard one to solve, and it's caused by 'low res' textures. Super-high res textures wouldn't exhibit that, but it's not the solution. I'd try to premultiply the dark albedo a bit more into the metal, like have it bleed over the edges a bit more, effectively make your metal mask extend a bit more than the albedo mask.
Hey, thanks for feedback. I should have specified (though I'm sure it's probably clear enough) with the dark plastic thing, i was doing this in albedo. I actually took off the gloss map altogether and used a constant value to see if somehow the gloss map was causing it, but it was definetely the albedo doing it.
These textures are 2k, (shrank them for uploading) but I dunno what exactly you mean by super high res tho. Like above game res?
I don't remember how dark I went ( didn't save changes when I did it ) But it was pretty dark, like almost black.
The severity of the artifacts seems directly tied to the luminosity of the plastic half in the albedo, with them being most apparent when the plastic is black and dissapearing at the midtone range. If I do the opposite (black metal and white plastic) there is no apparent artifacting.
I don't know about anyone else but i get up to 2GBs with 4096 and a few layers it would be great to hear about anyone else's loads as I want to know if this is a problem or normal that i chug 2gbs in memory with high res textures.
^Still sort of on topic.
It's completely normal, PS eats a ton of RAM. I think 100mb file will eat 4gb of Ram, or if you don't have so much it will eat the space of your scratch disk.
I had a quick question, kinda off topic but didn't think it was worth starting another thread for - how do you guys feel about how PBR will apply to stylised work, e.g. Stuff like Dota or other titles with more of a 'toony' theme?
Will apply just fine i think, PBR dosnt force realism, it more just forces you to be consistent with your self.
And regarding resolution: i meant stupid high res, like 16k or something. not viable as a solution.
EDIT: To better explain. Metalness makes your albedo black and then uses the color/ value in your albedo map to control reflectance. Wherever there is a grey value in the metalness map the albedo color is being used for both the albedo and reflectance. So what this means is that the bright reflectance color you placed in your albedo for the metal now has alot more diffuse showing. This is what causes that halo.
This seems to be a draw back to the metalness workflow. You don't have any control over the blending of the diffuse and reflectance. Now material masking in udk will most likely help with this issue. I don't see a very good way to handle it in Marmoset.
Here is my scene/ textures and a comparison shot:
https://www.dropbox.com/s/afc05uln2i9sva7/Example.zip