diff --git a/examples/subpasses/subpasses.cpp b/examples/subpasses/subpasses.cpp index 6219412c..8486c353 100644 --- a/examples/subpasses/subpasses.cpp +++ b/examples/subpasses/subpasses.cpp @@ -48,7 +48,6 @@ public: }; struct { - glm::vec4 viewPos; Light lights[NUM_LIGHTS]; } uboLights; @@ -766,7 +765,6 @@ public: // Update updateUniformBufferDeferredMatrices(); - updateUniformBufferDeferredLights(); } void updateUniformBufferDeferredMatrices() @@ -794,16 +792,11 @@ public: for (auto& light : uboLights.lights) { - light.position = glm::vec4(rndDist(rndGen) * 6.0f, 0.25f + std::abs(rndDist(rndGen)) * 4.0f, rndDist(rndGen) * 6.0f, 1.0f); + light.position = glm::vec4(rndDist(rndGen) * 8.0f, 0.25f + std::abs(rndDist(rndGen)) * 4.0f, rndDist(rndGen) * 8.0f, 1.0f); light.color = colors[rndCol(rndGen)]; light.radius = 1.0f + std::abs(rndDist(rndGen)); } - } - // Update fragment shader light position uniform block - void updateUniformBufferDeferredLights() - { - uboLights.viewPos = glm::vec4(camera.position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f); memcpy(uniformBuffers.lights.mapped, &uboLights, sizeof(uboLights)); } @@ -825,8 +818,8 @@ public: { VulkanExampleBase::prepare(); loadAssets(); - initLights(); prepareUniformBuffers(); + initLights(); setupDescriptorSetLayout(); preparePipelines(); setupDescriptorPool(); @@ -843,16 +836,9 @@ public: draw(); if (camera.updated) { updateUniformBufferDeferredMatrices(); - updateUniformBufferDeferredLights(); } } - virtual void viewChanged() - { - updateUniformBufferDeferredMatrices(); - updateUniformBufferDeferredLights(); - } - virtual void OnUpdateUIOverlay(vks::UIOverlay *overlay) { if (overlay->header("Subpasses")) { @@ -863,7 +849,6 @@ public: if (overlay->header("Settings")) { if (overlay->button("Randomize lights")) { initLights(); - updateUniformBufferDeferredLights(); } } } diff --git a/shaders/glsl/subpasses/composition.frag b/shaders/glsl/subpasses/composition.frag index a111d455..c060fe6f 100644 --- a/shaders/glsl/subpasses/composition.frag +++ b/shaders/glsl/subpasses/composition.frag @@ -18,7 +18,6 @@ struct Light { layout (binding = 3) uniform UBO { - vec4 viewPos; Light lights[NUM_LIGHTS]; } ubo; @@ -30,40 +29,24 @@ void main() vec3 normal = subpassLoad(samplerNormal).rgb; vec4 albedo = subpassLoad(samplerAlbedo); - #define ambient 0.15 + #define ambient 0.05 // Ambient part vec3 fragcolor = albedo.rgb * ambient; for(int i = 0; i < NUM_LIGHTS; ++i) { - // Vector to light vec3 L = ubo.lights[i].position.xyz - fragPos; - // Distance from light to fragment position float dist = length(L); - // Viewer to fragment - vec3 V = ubo.viewPos.xyz - fragPos; - V = normalize(V); - - // Light to fragment L = normalize(L); + float atten = ubo.lights[i].radius / (pow(dist, 3.0) + 1.0); - // Attenuation - float atten = ubo.lights[i].radius / (pow(dist, 2.0) + 1.0); - - // Diffuse part vec3 N = normalize(normal); float NdotL = max(0.0, dot(N, L)); vec3 diff = ubo.lights[i].color * albedo.rgb * NdotL * atten; - // Specular part - // Specular map values are stored in alpha of albedo mrt - vec3 R = reflect(-L, N); - float NdotR = max(0.0, dot(R, V)); - //vec3 spec = ubo.lights[i].color * albedo.a * pow(NdotR, 32.0) * atten; - - fragcolor += diff;// + spec; + fragcolor += diff; } outColor = vec4(fragcolor, 1.0); diff --git a/shaders/glsl/subpasses/composition.frag.spv b/shaders/glsl/subpasses/composition.frag.spv index 9257020c..8d620d0c 100644 Binary files a/shaders/glsl/subpasses/composition.frag.spv and b/shaders/glsl/subpasses/composition.frag.spv differ