Some questions regarding PBR and Lighting in general

Started by
4 comments, last by DiharaW 8 years, 1 month ago

So i've been learning OpenGL for a few months and i wrote a simple Engine for the sake of learning and implementing new techniques. I've implemented a considerable amount of stuff like SSAO, HDR, Bloom, Cascaded Shadow Maps, Variance Shadow Maps and so on. I recently started reading up on Physically Based Rendering and i ended up realizing that my knowledge on Lighting itself isn't very good. I live in Sri Lanka and programmers here don't even know what Graphics Programming is, so asking these questions on this forum is my only option.

  1. What are the Ka, Kd, Ks terms in a usual Blinn-Phong shader? are they Material properties? Because some shaders represent them as floats and some as vec3s. Or is Kd equal to "max(NdotL, 0.0)" and Ks equal to "pow(max(NdotH, 0.0), 32.0)", in which case are they the 'Intensities' of each of them? Or are these 3 terms just constants meant to be controlled by artists?
  2. In PBR, are the Kd, Ks terms determined using Metallicness and Roughness values? Because i've been reading this article : http://www.codinglabs.net/article_physically_based_rendering_cook_torrance.aspx , and in this it says the sum of Ks and Kd cannot exceed 1.
  3. I've been trying to implement a Cook-Torrance specular following this article : http://content.gpwiki.org/index.php/D3DBook:(Lighting)_Cook-Torrance but i have some confusion regarding that. Should "pow(max(NdotH, 0.0), 32.0)" be replaced by the "Rs" term from the code on that article? Because when i tried that, the ambient light areas looked pitch black and the specular highlights were all wrong.
  4. Why does the Cook-Torrance shader in the CodingLabs article use multiple samples while the GPWiki article does not? Is it to accurately represent the distribution of light?

...and i think that's all the questions off the top of my head. Really sorry if this is a lot, but i'm still a beginner and need a lot of clarification. Anyways i hope you guys and help me out! Thanks in advance!

Advertisement

1 - "K" is often used as shorthand for "constant" (konstant??). So Kd would be a material value that's multiplied with the diffuse term.

e.g. diffuse = Kd * max(NdotL, 0);

2 - "metalness" is an alternative workflow where instead of authoring "diffuse" (Kd) and "specular reflectivity" (Ks) colours, they instead author a "colour" and "metalness" values.

You then generate Kd and Ks by something like:

Kd = color * (1-metalness);

Ks = mix( vec3(0.03,0.03,0.03), color, metalness );

You don't have to use this workflow, but it's becomming popular because it's much easier for the artists to get correct results with.

3 - pow(max(NdotH, 0.0), 32.0) is the Blinn-Phong specular function, with a hard-coded "shininess" factor of 32...

That article says that their Rs term = (F*R*G)/((N•V)*(N•L)) ... and that their R term is their "specular function".

4 - there's a lot of different variations on Cook-Torrence. In that article, they call the three main terms F, R and G. In other literature you'll see them called F, D and G (i.e. R = D).

You can use different Fresnel functions, Roughness/Distribution functions, and Geometry functions, and still call it "Cook-Torrence".

1 - "K" is often used as shorthand for "constant" (konstant??). So Kd would be a material value that's multiplied with the diffuse term.

e.g. diffuse = Kd * max(NdotL, 0);

2 - "metalness" is an alternative workflow where instead of authoring "diffuse" (Kd) and "specular reflectivity" (Ks) colours, they instead author a "colour" and "metalness" values.

You then generate Kd and Ks by something like:

Kd = color * (1-metalness);

Ks = mix( vec3(0.03,0.03,0.03), color, metalness );

You don't have to use this workflow, but it's becomming popular because it's much easier for the artists to get correct results with.

3 - pow(max(NdotH, 0.0), 32.0) is the Blinn-Phong specular function, with a hard-coded "shininess" factor of 32...

That article says that their Rs term = (F*R*G)/((N•V)*(N•L)) ... and that their R term is their "specular function".

4 - there's a lot of different variations on Cook-Torrence. In that article, they call the three main terms F, R and G. In other literature you'll see them called F, D and G (i.e. R = D).

You can use different Fresnel functions, Roughness/Distribution functions, and Geometry functions, and still call it "Cook-Torrence".

Thank you so much! That cleared up a lot of things!

In your answer to my second question, by "color" do you mean "Albedo"? And what about the values you sample from the Specular Map? Is that no longer useful with PBR? Or do you need both a Specular Map and a Roughness Map?

And is the Final Fragment Color determined like this?

FinalColor = Kd * max(NdotL, 0) + Ks * Rs + Ambient

Not to come off a sounding rash, but those are basic lighting questions and PBR is a little more involved. How are you currently doing your lighting in your engine ? Before jumping into PBR I would begin with simple Blinn-Phong and something a simple material model.

I found this very useful: https://interplayoflight.wordpress.com/2013/12/30/readings-on-physically-based-rendering/

Especially the SIGGRAPH stuff. The 2006 link is broken, but it can be found here: http://old.siggraph.org/publications/2006cn/course17.pdf

Not to come off a sounding rash, but those are basic lighting questions and PBR is a little more involved. How are you currently doing your lighting in your engine ? Before jumping into PBR I would begin with simple Blinn-Phong and something a simple material model.

I actually did a bit more reading and realized that my initial understanding was in fact correct, it's just the wording on some articles that threw me off and confused me a little. Until yesterday i was using Blinn-Phong, but now i got the Cook-Torrance specular working, along with Image Based Lighting. It seems to work, apart from the black spots on the edges, is it something wrong with the Fresnel?

Edit : This is with a Roughness of 0.1. I guess i'll try a different Distribution and Geometric calculation.

T1ec7SP.jpg

I found this very useful: https://interplayoflight.wordpress.com/2013/12/30/readings-on-physically-based-rendering/

Especially the SIGGRAPH stuff. The 2006 link is broken, but it can be found here: http://old.siggraph.org/publications/2006cn/course17.pdf

Ahh thank you!! I found those links really helpful! smile.png

This topic is closed to new replies.

Advertisement