diff --git a/blight-game/src/main/java/de/blight/game/config/GraphicsSettings.java b/blight-game/src/main/java/de/blight/game/config/GraphicsSettings.java index e96ea62..94f06ff 100644 --- a/blight-game/src/main/java/de/blight/game/config/GraphicsSettings.java +++ b/blight-game/src/main/java/de/blight/game/config/GraphicsSettings.java @@ -17,10 +17,10 @@ public class GraphicsSettings { * lambda/zExtend/zFade/backface können zur Laufzeit angepasst werden. */ public enum ShadowQuality { - // mapSize splits lambda zExtend zFade backface - LOW ( 1024, 2, 0.70f, 40f, 5f, false), - MEDIUM ( 2048, 3, 0.75f, 60f, 8f, true ), - HIGH ( 4096, 4, 0.80f, 80f, 10f, true ); + // mapSize splits lambda zExtend zFade backface ssaoR ssaoI + LOW ( 1024, 2, 0.70f, 40f, 5f, false, 0f, 0f ), + MEDIUM ( 2048, 3, 0.75f, 60f, 8f, true, 1.0f, 1.5f), + HIGH ( 4096, 4, 0.80f, 80f, 10f, true, 1.5f, 2.5f); public final int shadowMapSize; public final int splits; @@ -28,15 +28,20 @@ public class GraphicsSettings { public final float zExtend; public final float zFade; public final boolean backface; + public final float ssaoRadius; + public final float ssaoIntensity; ShadowQuality(int shadowMapSize, int splits, float lambda, - float zExtend, float zFade, boolean backface) { + float zExtend, float zFade, boolean backface, + float ssaoRadius, float ssaoIntensity) { this.shadowMapSize = shadowMapSize; this.splits = splits; this.lambda = lambda; this.zExtend = zExtend; this.zFade = zFade; this.backface = backface; + this.ssaoRadius = ssaoRadius; + this.ssaoIntensity = ssaoIntensity; } } diff --git a/blight-game/src/main/java/de/blight/game/scene/WorldScene.java b/blight-game/src/main/java/de/blight/game/scene/WorldScene.java index 85ca548..ad10793 100644 --- a/blight-game/src/main/java/de/blight/game/scene/WorldScene.java +++ b/blight-game/src/main/java/de/blight/game/scene/WorldScene.java @@ -736,6 +736,15 @@ public class WorldScene extends BaseAppState { // Schatten als Filter – vermeidet das Setzen von ShadowMap-Texturen in Scene-Materialien fpp.addFilter(shadowFilter); + // SSAO – Stärke und Radius abhängig von Schattenqualität (LOW = kein SSAO) + if (graphicsSettings.shadowQuality.ssaoRadius > 0f) { + com.jme3.post.ssao.SSAOFilter ssao = new com.jme3.post.ssao.SSAOFilter( + graphicsSettings.shadowQuality.ssaoRadius, + graphicsSettings.shadowQuality.ssaoIntensity, + 0.2f, 0.05f); + ssao.setApproximateNormals(true); + fpp.addFilter(ssao); + } // Globales Wasser bei Y=0 (bedeckt die gesamte Karte unterhalb der Wasserlinie) try {