diff --git a/data/shaders/pbr/pbr.frag b/data/shaders/pbr/pbr.frag index b102a5c8..cd69d6d0 100644 --- a/data/shaders/pbr/pbr.frag +++ b/data/shaders/pbr/pbr.frag @@ -86,7 +86,7 @@ float PBR_Shade(vec3 N, vec3 V, vec3 L, float roughness, float F0) // Visibility term float Vs = GEOM_SchlickSmith(dotNL, dotNV, alpha); - return dotNL * Di * Fs * Vs; + return Di * Fs * Vs; } // ---------------------------------------------------------------------------- @@ -118,7 +118,7 @@ void main() vec3 IBLreflection = texture(envmapiblrefl, inNormal).rgb; // Fresnel part - float fresnel = pow(max(1.0 - dot(N, V), 0.0), 1.5); + float fresnel = pow(max(1.0 - abs(dot(N, V)), 0.0), 1.5f + roughness); // Reflection part @@ -134,7 +134,7 @@ void main() // F0 based on metallic factor of material vec3 F0 = vec3(0.04); F0 = mix(F0, lightColor, material.metallic); - vec3 spec = lightColor * PBR_Shade(N, V, L, roughness, 0.2); + vec3 spec = lightColor * PBR_Shade(N, V, L, roughness, F0.r); reflection -= spec; // Diffuse part diff --git a/data/shaders/pbr/pbr.frag.spv b/data/shaders/pbr/pbr.frag.spv index 84480b3c..2faaa6b5 100644 Binary files a/data/shaders/pbr/pbr.frag.spv and b/data/shaders/pbr/pbr.frag.spv differ diff --git a/pbr/pbr.cpp b/pbr/pbr.cpp index edbbac87..962b3e67 100644 --- a/pbr/pbr.cpp +++ b/pbr/pbr.cpp @@ -196,7 +196,7 @@ public: glm::vec3 pos = glm::vec3(float(x - (GRID_DIM / 2.0f)) * 2.5f, 0.0f, float(y - (GRID_DIM / 2.0f)) * 2.5f); vkCmdPushConstants(drawCmdBuffers[i], pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(glm::vec3), &pos); mat.metallic = (float)x / (float)GRID_DIM; - mat.roughness = glm::clamp((float)y / (float)(GRID_DIM - 1), 0.05f, 1.0f); + mat.roughness = (float)y / (float)GRID_DIM; vkCmdPushConstants(drawCmdBuffers[i], pipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, sizeof(glm::vec3), sizeof(Material), &mat); vkCmdDrawIndexed(drawCmdBuffers[i], models.objects[models.objectIndex].indexCount, 1, 0, 0, 0); }