PBR - WHAT DO YOU WANT TO KNOW?
PODCAST DATE: SUNDAY, JUNE 15TH, 8PM GMT +2 ( 12 PM EDT )
Hi everyone,
it's been a while since we last did an episode, and so we wanted to come back with a bang. That's why we've decided to do a PBR-centric episode focusing purely on the topic of physically-based rendering and shading systems, the various systems that are out there, their pros and cons, and the general misconceptions that surround them.
Of course we're not doing this by ourselves: we'll have a panel of experienced developers on as guests, such as Joe (
EarthQuake ) Wilson, Andy (
Metalliandy ) Davies, Mark
"marks" Sneddon, and Lee (
Almighty_Gir ) Devonald.
BUT WE NEED YOU TOO!
Throughout the episode, our panel will be answering user-submitted questions, so ask us what you've always wanted to know about PBR,
right here in this thread! We'll make sure to go through them all before we start the podcast, and answer the most relevant ones. So if there's anything you're dying to know about PBR, please ask away! ( Also, please make sure before posting that the question you're about to ask hasn't already been asked or answered )
[ame="
http://www.youtube.com/watch?v=mO1smN6A93k"]The Gamedev Cast PBR Special - LIVE - YouTube[/ame]
Replies
I've found the UE4 maps way easier to work with but when reviewing quixels helmet demo the specular mask is increadibly detailed - i was under the impression it was a simple flat colors to describe the real world value... so since UE4 workflow lacks this mask how does it determine those values (if its from albedo, im not too sure about this, does albedo color become more important or need accuracy)?
Thx guys.
U WOT M8?
What to do if can't find a spec value for a material you need?
How to properly turn a texture found on the web into an albedo for bpr?
Roughness or Glossiness?
Photoshop or other third party software for texturing? Which one is the
best choice?
Scratches in roughness\spec map. Should their value be lower or higher than that of the material's?
What is the best lighting setting to preview textures in Marmoset?
Where to get spec values for human skin? What to do if I want to use photo textures for the skin?
Tips on the workflow.
A comprehensive overview of the basic workflow would be kinda nice. Like, I understand the core concepts of PBR, but I have to say I have no idea of where to begin or what would be involved. I've kind of been eyeing it and that... undermines the process and a lot of it's plusses entirely, haha.
Additionally, what values can actually be reliably measured? I've heard some conflicting inputs on that. Spec? Albedo colors? Roughness/Gloss? Metalness?
Of those values, can you measure them yourself from, say, a photo? Or is there something special or universal when it comes to those values? (Again, this is where I get stuck and start to just eye it.)
I feel kinda dumb asking such basic stuff, but I guess it's new. A bit of art-side perspective would be nice; I see a lot of stuff about the rendering tech and systems but heck if I can actually decipher that. I just draw pretty things, y'know, so the only thing I have understood from the get go somehow is albedo. :poly136:
(or is this a non-issue?)
edit: also, great questions so far, keep em coming!
So, like most game artists out there at the minute I've been looking into the whole PBR thing and Unreal4. There seem to be 2 different methods I've seen so far and I'm wondering which is the best to use and when.
Firstly, I've seen objects with texture sheets laid out pretty much as they have been for donkeys years. (1 set of t.pages for 1 object - with each map defining certain properties) So no change there.
Secondly, In the Unreal4 examples, I'm seeing something totally different. They appear to have a library of pre-made materials, which are applied to the object via masks. They seem to use this method on everything from walls to small props.
So my question is this,... is using masks to lerp between pre-made materials going to be the way things are done now? Even for things that would usually have their own texture pages? or is it just a case of Epic trying to show us what COULD be done... if we so desired?
If it's a case of either way could work and it's situational... then what factors do you need to think about before deciding which method to use?
With my little knowledge of the tech side of real time rendering, I assume masking between the materials would come at a higher render overhead than texture pages.
In the 'cave' showcase in Unreal for example, there is a wooden beam with leather wrapped around it, and that thing must have been using 5 or 6 different materials, all nested in one another. It was Crazy Town!
Any help with this would be greatly appreciated.
edit: Also, anyone have any thoughts on PBR on previous-gen (X360 / PS3)? I believe Black Ops used it, as well as Remember Me, and I'm curious how difficult (if at all) that was to implement on the older hardware.
I'LL 'AVE U M8! SWARE ON ME MUM!
I have some question then.
PBR values:
Getting accurate vaules, Ive seen some papers on PBR with some IOR (Incidence of Reflection?) math but to be honest it's over my head. I have no clue how the hell I translate any of what I have been read into rgb/hsv/etc. Right now I really feel like I'm trying to play is by eye. Ive seen the dontnod charts too... but it's not exactly ideal and is a bit unclear.
Furthermore should we be in Linear or gamma from now on?
And while Im at it, how the hell do I know if Im texturing in linear or gamma? Is there a button a switch, do I wave my junk at the screen?
Skin and PBR:
I feel like a lot of this (in terms of texturing) can sort of be all over the place depending on the character. Are there some hard and fast rules for handling spec and gloss for characters in PBR? What about subdermis maps, how heavily should they be relied on to bring a character to life?
From a tech art side:
From someone who getting into shaders (and implementing them myself at work) how easy is it to implement compared to "normal" shaders? (in Unity anyway)
I understand there are paid and free PBR shaders out there (We are using Unity but we are stuck on Unity 4.2 for now) but I would rather create them myself and incorporate Marmoset Skyshop too (the new update looks great).
[ame="http://www.youtube.com/watch?v=mO1smN6A93k"]The Gamedev Cast PBR Special - LIVE - YouTube[/ame]
What is the best lighting setting to preview textures in Marmoset? I find it hard to judge my PBR materials when they look different under different sky settings... Because of colored reflections some materials can appear dimmer or brighter than they really are, have different saturation etc.
How to turn a texture found on the web into an albedo for bpr? For example, I want to make a leather material using a texture of leather I found on cgtextures.com. Do I even want to do that in the first place?
These are questions I'm dying to know answers to
It depends, you need to use some logic here. Is the base of the metal sort of rough? Would scratching it reveal a smoother layer underneath? If so, you would want the scratch to be more glossy.
How about glossy plastic? If you scratch the top glossy coating, you probably reveal a rough undercoat. In that case, more rough.
Just try to think about the material the scratch or scrap is revealing, and if it would be more or less glossy than the top material, and you'll get your answer.
Well, the best thing to do is preview with multiple lighting environments really. There isn't a specific best one.
This is difficult, there isn't really any easy way to do this. You would probably want to compare it to values for known materials that are similar. Really there is no fool-proof "correct" way to do this, as albedo values can vary significantly. Red bricks are not always the same brightness or color for instance.
Also it sounded like one engineer and one artist took on the brunt of the conversion work, how much work did that end up being? Months of crunching to put it all together, or was it something more manageable?
I can't really talk about A:I too specifically, but as Lee mentioned the math isn't *that* much more expensive with PBR shaders. I'd say you probably don't need to worry about it unless you're targetting some kind of mobile platform OR your game is already heavily bound in pixel shading.
Again, I can't speak specifics but we found the biggest hurdles to be a lack of artist-oriented learning materials at the time (which there is now tons of online!) and learning how to correctly create PBR content.
As for energy conservation - as long as you use things like the chart below as your baseline for reflective values, then the shader should do all of the energy conservation for you.
the idea behind the metalness workflow is to simplify. if you look at the chart above you can see that the range that non-metals fall into is incredibly small. so when you work with the metalness workflow, it puts all non-metals at the same averaged value. with Cryengine, you'd need to manually set the reflectivity for all of the surfaces you're making, which is great as it gives you more accuracy, but in practice you'll be working within a few very different shades of grey.
Right, if you're using the metalness workflow you do not have an explicit full color specular intensity map.
Yeah, with the metalness workflow, the albedo map is both the diffuse and specular map in a way.
For metalic surfaces (white in the metalness map) the specular intensity and color comes from the albedo map, and the diffuse color is set to black (because pure metals reflect nearly all the light that hits them and absorb/scatter very little).
For non metal surfaces (black in the metalness map), the specular intensity is locked to a fixed value (about 0.04) as most non metals reflectivity is in a very narrow range. The albedo sets the diffuse color in this case like traditional shaders do.
The UE4 "specular" input really shouldn't be used, its a legacy feature they left in and it can result in physically inaccurate materials if used incorrectly.
Oops! I hadn't read that.. :poly122:
Thanks for the info Gir! Much appreciated!
Reflectance = albedo * metalness + 0.04 * (1 - metalness));
Diffuse = albedo * (1 - metalness);
so if you take whatever value is in your albedo, you multiply it by the inverse of the metallic map (so anything black, non metal is a multiplier of 1. anything that's white, metal, is a multiplier of 0. anything multiplied by 0 = 0, or black). so you could potentially "fudge" the values by understanding this math, and knowing that if you multiply by mid-grey (0.5) then you'd want a base value of 280, 280 * 0.5 = 140.
however i don't recommend fudging values if you want to maintain physical accuracy.
If that makes any sense
The first material is not metal, but painted metal. Its important to remember that the metalness value defines the top layer, if you have a layer of paint, dirt, or anything else on top of an otherwise metallic object, the material is not metal.
It doesn't have colored specular, the spec highlight is white as seen in the ref, so there is no need for you to worry about how to paint the specular color. Just tag it as non metalic, set the albedo color to the green diffuse color, and set up your gloss/roughness map to the appropriate value for a glossy paint.
For the keys, its a similar situation, the colored ones are painted, so not really metal.
Now if you're talking about a metallic paint or something, then that's a bit of a gray area, and you may want to use values other than 0 and 1 there for metalness.
That's a bit vague, what is "colored metal"? What you should think about is what the top layer is.
Is it raw metal?
Is it paint?
Is it rust? (not really metal)
Is it a rubberized coating?
etc
Then the material choices become easier.
The whole thing about sRGB and converting to linear sort of flew over my head a bit. Is this something that comes from high-end rendering? also, there was mention of a link with some way to convert the values, but i don't see it.
after a bit of reading i think it's to un-gamma correct the textures.. .is this correct?
also, there is a tutorial half way down this page,... http://maddieman.wordpress.com/2009/06/23/gamma-correction-and-linear-colour-space-simplified/ on how to convert your sRGB textures.... does this look correct?
cheers