From 24dcabfb51f3e2f1d712aee90837aadaaae7ce66 Mon Sep 17 00:00:00 2001 From: Recrown Date: Mon, 3 Sep 2018 23:54:23 -0500 Subject: [PATCH] decent bloom system --- android/assets/shaders/bright_filter.fsh | 4 +- android/assets/shaders/combine.fsh | 21 +++++----- .../graphics/shaders/BloomShader.java | 12 +----- .../ui/components/GraphicsOptions.java | 29 +------------- .../desktop/screens/main/GraphicsPage.java | 12 +----- .../desktop/screens/main/MainScreen.java | 40 ++++--------------- 6 files changed, 25 insertions(+), 93 deletions(-) diff --git a/android/assets/shaders/bright_filter.fsh b/android/assets/shaders/bright_filter.fsh index 15f40c2..a4bee85 100755 --- a/android/assets/shaders/bright_filter.fsh +++ b/android/assets/shaders/bright_filter.fsh @@ -14,8 +14,8 @@ void main() { vec4 color = texture(u_texture, vTexCoord); float brightness = (color.r*0.2126) + (color.g*0.7152) + (color.b * 0.0722); - if (brightness > 0.7) { - gl_FragColor = color; + if (brightness > 0.6) { + gl_FragColor = color *0.75; } else { gl_FragColor = vec4(0.0); } diff --git a/android/assets/shaders/combine.fsh b/android/assets/shaders/combine.fsh index 6dbd790..a057434 100755 --- a/android/assets/shaders/combine.fsh +++ b/android/assets/shaders/combine.fsh @@ -11,18 +11,17 @@ varying vec2 vTexCoord; uniform sampler2D u_texture; uniform sampler2D u_texture1; -uniform float exposure; void main() { - vec3 origColor = texture2D(u_texture, vTexCoord).rgb; - vec3 blurredColor = texture2D(u_texture1, vTexCoord).rgb; - - const float gamma = 2.2; - origColor += blurredColor; // additive blending - // tone mapping - vec3 result = vec3(1.0) - exp(-origColor * exposure); - // also gamma correct while we're at it - result = pow(result, vec3(1.0 / gamma)); - gl_FragColor = vec4(result, 1.0); + vec4 origColor = texture2D(u_texture, vTexCoord); + vec4 blurredColor = texture2D(u_texture1, vTexCoord); + + vec4 result; + result = origColor + blurredColor; + result.a = vColor.a; + result.rgb *= vColor.rgb; + gl_FragColor = result; + } + diff --git a/core/src/zero1hd/rhythmbullet/graphics/shaders/BloomShader.java b/core/src/zero1hd/rhythmbullet/graphics/shaders/BloomShader.java index 261c798..c3b4fc8 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/shaders/BloomShader.java +++ b/core/src/zero1hd/rhythmbullet/graphics/shaders/BloomShader.java @@ -12,7 +12,6 @@ import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.viewport.ScreenViewport; public class BloomShader implements Disposable { - private int bloomLevel; private ShaderProgram gaussianBlurShader; private ShaderProgram brightFilterShader; private ShaderProgram combineShader; @@ -69,10 +68,10 @@ public class BloomShader implements Disposable { combineShader.begin(); combineShader.setUniformi("u_texture1", 1); - combineShader.setUniformf("exposure", 0.5f); combineShader.end(); gaussianBlurShader.begin(); + gaussianBlurShader.setUniformf("radius", 1.5f); gaussianBlurShader.setUniformf("resolution", hBlur.getWidth(), vBlur.getHeight()); gaussianBlurShader.end(); @@ -110,7 +109,6 @@ public class BloomShader implements Disposable { fboRegion.setTexture(lightFilterBuffer.getColorBufferTexture()); hBlur.begin(); screenBatch.setShader(gaussianBlurShader); - gaussianBlurShader.setUniformf("radius", 1f + 0.2f*(bloomLevel*1.75f)); gaussianBlurShader.setUniformi("pass", 0); screenBatch.draw(fboRegion, 0f, 0f, width, height); screenBatch.flush(); @@ -134,14 +132,6 @@ public class BloomShader implements Disposable { screenBatch.end(); //STAGE BATCH ENDS HERE } - public void setBloomLevel(int bloomLevel) { - this.bloomLevel = bloomLevel; - } - - public int getBloomLevel() { - return bloomLevel; - } - @Override public void dispose() { brightFilterShader.dispose(); diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/GraphicsOptions.java b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/GraphicsOptions.java index f89ec64..8815847 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/GraphicsOptions.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/graphics/ui/components/GraphicsOptions.java @@ -5,16 +5,13 @@ import com.badlogic.gdx.Preferences; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Align; public class GraphicsOptions extends Table { - private Label resolutions, shaders; - private Preferences prefs; - private Slider glowShaderLevel; + private Label resolutions; private ResolutionButton _3840x2160, @@ -26,21 +23,9 @@ public class GraphicsOptions extends Table { _1366x768; - public GraphicsOptions(Skin skin, final Preferences prefs, ChangeListener bloomLevelSliderListener) { + public GraphicsOptions(Skin skin, final Preferences prefs) { align(Align.center); defaults().space(10f); - this.prefs = prefs; - shaders = new Label("OpenGL Shader", skin); - add(shaders).fillX(); - row(); - - glowShaderLevel = new Slider(0, 4, 1, false, skin); - add(glowShaderLevel).fillX(); - glowShaderLevel.addListener(bloomLevelSliderListener); - glowShaderLevel.setValue(prefs.getInteger("glow shader")); - - row(); - resolutions = new Label("Resolutions: ", skin); add(resolutions).left(); row(); @@ -90,14 +75,4 @@ public class GraphicsOptions extends Table { row(); pack(); } - - public void saveOptions() { - Gdx.app.debug("Preferences", "Saved shading values values."); - prefs.putInteger("glow shader", (int) glowShaderLevel.getValue()); - } - - public int getBloomShaderLevel() { - return (int) glowShaderLevel.getValue(); - } - } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/GraphicsPage.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/GraphicsPage.java index 2d3f531..3efa9da 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/GraphicsPage.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/GraphicsPage.java @@ -15,9 +15,9 @@ public class GraphicsPage extends Page { private GraphicsOptions graphicsTable; private TextButton backButton; - public GraphicsPage(Skin skin, Preferences preferences, ChangeListener backButtonListener, ChangeListener bloomLevelSliderListener) { + public GraphicsPage(Skin skin, Preferences preferences, ChangeListener backButtonListener) { super(-1, 1); - graphicsTable = new GraphicsOptions(skin, preferences, bloomLevelSliderListener); + graphicsTable = new GraphicsOptions(skin, preferences); scrollPane = new ScrollPane(graphicsTable, skin); scrollPane.setFadeScrollBars(false); scrollPane.setFillParent(true); @@ -40,12 +40,4 @@ public class GraphicsPage extends Page { public void act(float delta) { super.act(delta); } - - public void saveOptions() { - graphicsTable.saveOptions(); - } - - public int getBloomLevel() { - return graphicsTable.getBloomShaderLevel(); - } } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java index d421660..a59eea7 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java @@ -22,8 +22,6 @@ import zero1hd.rhythmbullet.graphics.ui.Page; import zero1hd.rhythmbullet.util.ResizeReadyScreen; public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { - private boolean resizing; - private Stage stage; private Vector3 cameraPosition; private Listeners listeners; @@ -84,18 +82,15 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { } private void draw() { - if (!resizing) { - stage.getViewport().apply(); - screenBatch.begin(); - screenBatch.draw(background, 0, 0, stage.getViewport().getScreenWidth(), stage.getViewport().getScreenHeight()); - screenBatch.end(); - stage.draw(); - } + stage.getViewport().apply(); + screenBatch.begin(); + screenBatch.draw(background, 0, 0, stage.getViewport().getScreenWidth(), stage.getViewport().getScreenHeight()); + screenBatch.end(); + stage.draw(); } @Override public void preAssetLoad() { - resizing = true; stage.clear(); if (bloomShader != null) { bloomShader.dispose(); @@ -109,6 +104,8 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { @Override public void postAssetLoad() { + bloomShader = new BloomShader(screenBatch); + background = rhythmBullet.getAssetManager().get("backgrounds/mainBG.png", Texture.class); mainPage = new MainPage(musicController, musicMetadataController, rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), rhythmBullet.getScreenConfiguration(), listeners.musicSelectionPageButtonListener, listeners.optionsPageButtonListener); @@ -121,7 +118,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { keybindPage = new KeybindPage(rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), listeners.optionsPageButtonListener); stage.addActor(keybindPage); - graphicsPage = new GraphicsPage(rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.optionsPageButtonListener, listeners.bloomLevelShaderListener); + graphicsPage = new GraphicsPage(rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.optionsPageButtonListener); stage.addActor(graphicsPage); creditsPage = new CreditsPage(rhythmBullet.getSkin()); @@ -134,7 +131,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { stage.addActor(analysisPage); musicController.getMusicList().asyncSearch(false); - resizing = false; } @Override @@ -152,7 +148,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { public void saveAll() { if (optionsPage != null) { optionsPage.saveOptions(); - graphicsPage.saveOptions(); rhythmBullet.getPreferences().flush(); } } @@ -228,25 +223,6 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { } }; - ChangeListener bloomLevelShaderListener = new ChangeListener() { - @Override - public void changed(ChangeEvent event, Actor actor) { - int bloomLevel = 0; - if (graphicsPage != null) { - bloomLevel = graphicsPage.getBloomLevel(); - } else { - bloomLevel = rhythmBullet.getPreferences().getInteger("glow shader"); - } - if (bloomLevel > 0) { - if (bloomShader == null) bloomShader = new BloomShader(screenBatch); - bloomShader.setBloomLevel((bloomLevel-1)); - } else if (bloomShader != null) { - bloomShader.dispose(); - bloomShader = null; - } - } - }; - ChangeListener confirmedSongListener = new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) {