From 26c39e9c6705fb932895891ecc70479cf8d5800a Mon Sep 17 00:00:00 2001 From: saschawillems Date: Fri, 2 Sep 2016 14:53:44 +0200 Subject: [PATCH] Fixed shadow back projections --- data/shaders/raytracing/raytracing.comp | 20 ++++++++++++-------- data/shaders/raytracing/raytracing.comp.spv | Bin 15720 -> 16208 bytes raytracing/raytracing.cpp | 4 ---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/data/shaders/raytracing/raytracing.comp b/data/shaders/raytracing/raytracing.comp index 92c881a2..3cf2ec91 100644 --- a/data/shaders/raytracing/raytracing.comp +++ b/data/shaders/raytracing/raytracing.comp @@ -12,6 +12,7 @@ layout (binding = 0, rgba8) uniform writeonly image2D resultImage; #define MAXLEN 1000.0 #define SHADOW 0.5 #define RAYBOUNCES 2 +#define REFLECTIONS true #define REFLECTIONSTRENGTH 0.4 #define REFLECTIONFALLOFF 0.5 @@ -68,7 +69,7 @@ void reflectRay(inout vec3 rayD, in vec3 mormal) float lightDiffuse(vec3 normal, vec3 lightDir) { - return clamp(dot(normal, lightDir), 0.25, 1.0); + return clamp(dot(normal, lightDir), 0.1, 1.0); } float lightSpecular(vec3 normal, vec3 lightDir, float specularFactor) @@ -91,6 +92,7 @@ float sphereIntersect(in vec3 rayO, in vec3 rayD, in Sphere sphere) return -1.0; } float t = (-b - sqrt(h)) / 2.0; + return t; } @@ -144,14 +146,16 @@ int intersect(in vec3 rayO, in vec3 rayD, inout float resT) return id; } -float calcShadow(in vec3 rayO, in vec3 rayD, in int id) +float calcShadow(in vec3 rayO, in vec3 rayD, in int objectId, inout float t) { - //todo: avoid backprojection for (int i = 0; i < spheres.length(); i++) { + if (spheres[i].id == objectId) + continue; float tSphere = sphereIntersect(rayO, rayD, spheres[i]); - if (tSphere > EPSILON) + if ((tSphere > EPSILON) && (tSphere < t)) { + t = tSphere; return SHADOW; } } @@ -210,9 +214,10 @@ vec3 renderScene(inout vec3 rayO, inout vec3 rayD, inout int id) return color; id = objectID; - + // Shadows - color *= calcShadow(pos, lightVec, objectID); + t = length(ubo.lightPos - pos); + color *= calcShadow(pos, lightVec, id, t); // Fog color = fog(t, color); @@ -236,9 +241,8 @@ void main() int id = 0; vec3 finalColor = renderScene(rayO, rayD, id); - const bool reflections = true; // Reflection - if (reflections) + if (REFLECTIONS) { float reflectionStrength = REFLECTIONSTRENGTH; for (int i = 0; i < RAYBOUNCES; i++) diff --git a/data/shaders/raytracing/raytracing.comp.spv b/data/shaders/raytracing/raytracing.comp.spv index fb3eabc93a35bc3748568397c79f0beb622f2c41..baa5002bad25e8a5db396f0c4fbd3defd6443042 100644 GIT binary patch literal 16208 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 literal 15720 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 diff --git a/raytracing/raytracing.cpp b/raytracing/raytracing.cpp index ec71658f..120fbba8 100644 --- a/raytracing/raytracing.cpp +++ b/raytracing/raytracing.cpp @@ -315,10 +315,6 @@ public: spheres.push_back(newSphere(glm::vec3(1.75f, -0.5f, 0.0f), 1.0f, glm::vec3(0.0f, 1.0f, 0.0f), 32.0f)); spheres.push_back(newSphere(glm::vec3(0.0f, 1.0f, -0.5f), 1.0f, glm::vec3(0.65f, 0.77f, 0.97f), 32.0f)); spheres.push_back(newSphere(glm::vec3(-1.75f, -0.75f, -0.5f), 1.25f, glm::vec3(0.9f, 0.76f, 0.46f), 32.0f)); -// spheres.push_back(newSphere(glm::vec3(-2.25f, -1.0f, 0.5f), 1.0f, glm::vec3(1.0f, 0.32f, 0.36f), 32.0f)); - //spheres.push_back(newSphere(glm::vec3(-2.25f, 1.0f, 0.0f), 1.0f, glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(2.0f))); - //spheres.push_back(newSphere(glm::vec3(0.f, 2.5f, 0.0f), 1.0f, glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(2.0f))); - //spheres.push_back(newSphere(glm::vec3(2.25f, 1.0f, 0.0f), 1.0f, glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(2.0f))); VkDeviceSize storageBufferSize = spheres.size() * sizeof(Sphere); // Stage