]> git.tdb.fi Git - libs/gl.git/commitdiff
Refactor handling some material parameters in cooktorrance.glsl
authorMikko Rasa <tdb@tdb.fi>
Mon, 3 Oct 2022 20:44:46 +0000 (23:44 +0300)
committerMikko Rasa <tdb@tdb.fi>
Mon, 3 Oct 2022 22:24:29 +0000 (01:24 +0300)
Occlusion is now passed as a parameter to the lighting function.
Emission is handled outside of it since it's not properly a part of the
Cook-Torrance BRDF.

shaderlib/cooktorrance.glsl

index 25289ed57bc916af3eb41a4f9893d99289399618..5e933d5a55239d7db0fb18a35b068c2b768975f2 100644 (file)
@@ -153,7 +153,7 @@ vec3 cooktorrance_environment(vec3 normal, vec3 look, vec3 base_color, float met
                return (k_diff*base_color+k_spec)*ambient_color.rgb;
 }
 
-vec3 cooktorrance_lighting(vec3 normal, vec3 look, vec3 base_color, float metalness, float roughness)
+vec3 cooktorrance_lighting(vec3 normal, vec3 look, vec3 base_color, float metalness, float roughness, float occlusion)
 {
        vec3 color = vec3(0.0);
        for(int i=0; i<max_lights; ++i)
@@ -164,12 +164,8 @@ vec3 cooktorrance_lighting(vec3 normal, vec3 look, vec3 base_color, float metaln
                        color += cooktorrance_one_light_direct(normal, look, incoming.direction, base_color, metalness, roughness)*incoming.color*shadow;
                }
 
-       float occlusion = get_occlusion_value();
        color += cooktorrance_environment(normal, look, base_color, metalness, roughness)*occlusion;
 
-       if(use_emission)
-               color += get_emission_color();
-
        return color;
 }
 
@@ -183,8 +179,11 @@ void main()
 
        float metalness = get_metalness_value();
        float roughness = get_roughness_value();
+       float occlusion = get_occlusion_value();
 
-       vec3 lit_color = cooktorrance_lighting(normal, look, base_color.rgb, metalness, roughness);
+       vec3 lit_color = cooktorrance_lighting(normal, look, base_color.rgb, metalness, roughness, occlusion);
+       if(use_emission)
+               lit_color += get_emission_color();
 
        frag_color = vec4(lit_color, alpha);
 }