Browse Source

shadows work again

Kajetan Johannes Hammerle 3 years ago
parent
commit
50cabc7b1d

+ 9 - 4
client/Game.cpp

@@ -70,13 +70,17 @@ void Game::tick() {
     } else if(mode == Mode::AUTO) {
         movedLength += moveSpeed;
     }
-
-    if(control.keys.test.getDownTime() == 1) {
+    
+    if(control.keys.test.isDown()) {
         mode = Mode::PLAYER;
     }
-    if(control.keys.test2.getDownTime() == 1) {
+    if(control.keys.test2.isDown()) {
         mode = Mode::AUTO;
     }
+    
+    if(control.keys.test4.getDownTime() == 1) {
+        renderSettings.shadows = !renderSettings.shadows;
+    }
     if(control.keys.test5.getDownTime() == 1) {
         renderSettings.ssao = !renderSettings.ssao;
     }
@@ -122,7 +126,8 @@ void Game::renderTextOverlay(float lag, Renderer& renderer, FontRenderer& fr) co
     renderer.scale(2.0f).update();
 
     String s;
-    fr.drawString(10, 10, s.append("FPS: ").append(fps.getUpdatesPerSecond()));
+    fr.drawString(10, 10, s.append("FPS: ").append(fps.getUpdatesPerSecond())
+    .append(" ").append("%0.8f", renderSettings.testBias).append(" ").append("%0.8f", renderSettings.testRadius));
     fr.drawString(10, 19, s.clear().append("TPS: ").append(tps.getUpdatesPerSecond()));
     s.clear();
     pos.toString(s);

+ 3 - 1
client/rendering/Engine.cpp

@@ -39,6 +39,8 @@ void Engine::renderShadow(float lag, const Game& game) {
     shaders.shadow.use();
     worldShadowProjView.set(worldShadowProj).mul(worldShadowView);
     shaders.shadow.setMatrix("projView", worldShadowProjView.getValues());
+    model.clear();
+    shaders.world.setMatrix("model", model.get().getValues());
     Renderer renderer(shaders.shadow, model, worldView);
     game.renderWorld(lag, renderer);
 }
@@ -59,7 +61,7 @@ void Engine::renderWorld(float lag, const Game& game) {
     fb.shadow.bindDepthTexture(1);
     shaders.world.setInt("shadows", renderSettings.shadows);
     shaders.world.setFloat("radius", renderSettings.testRadius);
-    shaders.world.setFloat("bias", renderSettings.testBias);
+    shaders.world.setFloat("zbias", renderSettings.testBias);
     Renderer renderer(shaders.world, model, worldView);
     game.renderWorld(lag, renderer);
 }

+ 1 - 1
client/rendering/RenderSettings.cpp

@@ -1,4 +1,4 @@
 #include "client/rendering/RenderSettings.h"
 
-RenderSettings::RenderSettings() : ssao(false), shadows(true), testRadius(0.5f), testBias(0.0005) {
+RenderSettings::RenderSettings() : ssao(true), shadows(true), testRadius(0.004f), testBias(0.003f) {
 }

+ 11 - 22
resources/shader/worldFragment.fs

@@ -8,12 +8,6 @@ layout (location = 3) out float worldShadow;
 layout (binding = 0) uniform sampler2D samp;
 layout (binding = 1) uniform sampler2D shadowSamp;
 
-uniform mat4 proj;
-uniform mat4 view;
-uniform mat4 model;
-
-uniform mat4 projViewShadow;
-
 in vec3 varPosition;
 in vec2 varTex;
 in vec3 varNormal;
@@ -21,7 +15,7 @@ in vec4 varShadow;
 
 uniform bool shadows;
 uniform float radius;
-uniform float bias;
+uniform float zbias;
 
 const int sampleAmount = 64;
 const vec2 samples[64] = {
@@ -49,23 +43,18 @@ void main(void) {
     worldPosition = varPosition;
     worldNormal = normalize(varNormal);
 
-    /*if(shadows) {
+    if(shadows) {
         vec3 pos = varShadow.xyz / varShadow.w;
-        float fbias = bias * (1.0 - max(dot(worldNormal, -light), 0.0)); 
-        float shadow = 0.0; 
-        shadow = float(texture(shadowSamp, pos.xy).r == 1);//float(texture(shadowSamp, pos.xy).r == 1);
-        //for(int i = 0; i < sampleAmount; i++) {
-        //    shadow += float(texture(shadowSamp, pos.xy + samples[i] * radius).r + fbias > pos.z);
-        //}
-        //shadow /= sampleAmount;
-        worldShadow = 1;//shadow;
+        float fbias = zbias * (1.0 - max(dot(worldNormal, -light), 0.0)); 
+        float shadow = 0.0;
+        for(int i = 0; i < sampleAmount; i++) {
+            shadow += float(texture(shadowSamp, pos.xy + samples[i] * radius).r + fbias > pos.z);
+        }
+        shadow /= sampleAmount;
+        worldShadow = shadow;
     } else {
         worldShadow = 1.0;
-    }*/
-
-    vec3 pos = varShadow.xyz / varShadow.w;
-    float test = texture(shadowSamp, pos.xy).r;
-    worldShadow = float(test >= 0.99 && test <= 1.01);
+    }
 
     worldColor = texture(samp, varTex);
-}
+}

+ 3 - 4
resources/shader/worldPostFragment.fs

@@ -21,9 +21,8 @@ void main() {
         color = vec4(texture(colorSamp, varTex).xyz, 1.0);
     }
     if(shadows) {
-        //float diffuseLight = 1.0;//float(dot(texture(worldNormalSamp, varTex).xyz, -light) > 0);
-        //float f = diffuseLight * texture(shadowSamp, varTex).r;
-        //color *= f * 0.5 + 0.5;
-        color *= texture(shadowSamp, varTex).r;
+        float diffuseLight = float(dot(texture(worldNormalSamp, varTex).xyz, -light) > 0);
+        float f = diffuseLight * texture(shadowSamp, varTex).r;
+        color *= f * 0.5 + 0.5;
     }
 }  

+ 1 - 1
resources/shader/worldShadowFragment.fs

@@ -3,5 +3,5 @@
 out vec4 color;
 
 void main(void) {
-    color = vec4(1.0);
+    color = vec4(1.0, 0.0, 1.0, 1.0);
 }