From 1efbd9dcf231fec5b10574dd67d6d798ae4d2161 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Apr 2020 20:50:11 -0400 Subject: [PATCH] Faster shaders (?) --- core/assets/shaders/slag.frag | 90 +++++------------------ core/assets/shaders/tar.frag | 72 ++++-------------- core/assets/shaders/water.frag | 21 +++--- core/assets/sprites/noise.png | Bin 0 -> 12830 bytes core/src/mindustry/core/Control.java | 7 +- core/src/mindustry/graphics/Shaders.java | 21 +++++- gradle.properties | 2 +- 7 files changed, 70 insertions(+), 143 deletions(-) create mode 100644 core/assets/sprites/noise.png diff --git a/core/assets/shaders/slag.frag b/core/assets/shaders/slag.frag index afb161de6d..0d87812584 100755 --- a/core/assets/shaders/slag.frag +++ b/core/assets/shaders/slag.frag @@ -3,84 +3,34 @@ precision highp float; precision mediump int; #endif -//shade 1 + 2 -#define s2 vec3(100.0, 93.0, 49.0) / 100.0 -#define s1 vec3(100.0, 60.0, 25.0) / 100.0 +//shades of slag +#define S2 vec3(100.0, 93.0, 49.0) / 100.0 +#define S1 vec3(100.0, 60.0, 25.0) / 100.0 +#define NSCALE 300.0 uniform sampler2D u_texture; +uniform sampler2D u_noise; -uniform vec2 camerapos; -uniform vec2 screensize; -uniform float time; +uniform vec2 u_campos; +uniform vec2 u_resolution; +uniform float u_time; varying vec4 v_color; varying vec2 v_texCoord; -vec3 permute(vec3 x) { return mod(((x*34.0)+1.0)*x, 289.0); } - -float snoise(vec2 v){ - const vec4 C = vec4(0.211324865405187, 0.366025403784439, - -0.577350269189626, 0.024390243902439); - vec2 i = floor(v + dot(v, C.yy) ); - vec2 x0 = v - i + dot(i, C.xx); - vec2 i1; - i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); - vec4 x12 = x0.xyxy + C.xxzz; - x12.xy -= i1; - i = mod(i, 289.0); - vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) - + i.x + vec3(0.0, i1.x, 1.0 )); - vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), - dot(x12.zw,x12.zw)), 0.0); - m = m*m ; - m = m*m ; - vec3 x = 2.0 * fract(p * C.www) - 1.0; - vec3 h = abs(x) - 0.5; - vec3 ox = floor(x + 0.5); - vec3 a0 = x - ox; - m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); - vec3 g; - g.x = a0.x * x0.x + h.x * x0.y; - g.yz = a0.yz * x12.xz + h.yz * x12.yw; - return 130.0 * dot(m, g); -} - void main(){ + vec2 c = v_texCoord.xy; + vec2 coords = vec2(c.x * u_resolution.x + u_campos.x, c.y * u_resolution.y + u_campos.y); - vec2 c = v_texCoord.xy; - vec4 color = texture2D(u_texture, c); + float btime = u_time / 4000.0; + float noise = (texture2D(u_noise, (coords) / NSCALE + vec2(btime) * vec2(-0.9, 0.8)).r + texture2D(u_noise, (coords) / NSCALE + vec2(btime * 1.1) * vec2(0.8, -1.0)).r) / 2.0; + vec3 color = texture2D(u_texture, c).rgb; - vec2 v = vec2(1.0/screensize.x, 1.0/screensize.y); - vec2 coords = c / v + camerapos; - - float stime = time / 5.0; - - float mscl = 30.0; - float mth = 5.0; - - //if there's something actually there - if(color.r > 0.01){ - vec4 old = color; - color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)) * vec4(0.9, 0.9, 1, 1.0); - - if(color.r < 0.01){ - color = old; - } - - const float bs = 1.1; - - float n1 = snoise(coords / (30.0 * bs) + vec2(time) / 280.0); - float n2 = snoise((coords + vec2(632.0)) / (14.0 * bs) + vec2(0.0, -time) / 290.0); - float n3 = snoise((coords + vec2(2233.0)) / (25.0 * bs) + vec2(time, 0.0) / 380.0); - - float r = (n1 + n2 + n3) / 3.0; - - if(r < -0.5){ - color = vec4(s2, color.a); - }else if(r < -0.2){ - color = vec4(s1, color.a); - } - } + if(noise > 0.6){ + color = S2; + }else if(noise > 0.54){ + color = S1; + } - gl_FragColor = color; -} + gl_FragColor = vec4(color.rgb, 1.0); +} \ No newline at end of file diff --git a/core/assets/shaders/tar.frag b/core/assets/shaders/tar.frag index bdbd49c4b3..e0aebac243 100644 --- a/core/assets/shaders/tar.frag +++ b/core/assets/shaders/tar.frag @@ -3,69 +3,29 @@ precision highp float; precision mediump int; #endif -uniform sampler2D u_texture; +#define NSCALE 180.0 -uniform vec2 camerapos; -uniform vec2 screensize; -uniform float time; +uniform sampler2D u_texture; +uniform sampler2D u_noise; + +uniform vec2 u_campos; +uniform vec2 u_resolution; +uniform float u_time; varying vec4 v_color; varying vec2 v_texCoord; -vec3 permute(vec3 x) { return mod(((x*34.0)+1.0)*x, 289.0); } +void main(){ + vec2 c = v_texCoord.xy; + vec2 coords = vec2(c.x * u_resolution.x + u_campos.x, c.y * u_resolution.y + u_campos.y); -float snoise(vec2 v){ - const vec4 C = vec4(0.211324865405187, 0.366025403784439, - -0.577350269189626, 0.024390243902439); - vec2 i = floor(v + dot(v, C.yy) ); - vec2 x0 = v - i + dot(i, C.xx); - vec2 i1; - i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0); - vec4 x12 = x0.xyxy + C.xxzz; - x12.xy -= i1; - i = mod(i, 289.0); - vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 )) - + i.x + vec3(0.0, i1.x, 1.0 )); - vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), - dot(x12.zw,x12.zw)), 0.0); - m = m*m ; - m = m*m ; - vec3 x = 2.0 * fract(p * C.www) - 1.0; - vec3 h = abs(x) - 0.5; - vec3 ox = floor(x + 0.5); - vec3 a0 = x - ox; - m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h ); - vec3 g; - g.x = a0.x * x0.x + h.x * x0.y; - g.yz = a0.yz * x12.xz + h.yz * x12.yw; - return 130.0 * dot(m, g); -} + float btime = u_time / 8000.0; + float noise = (texture2D(u_noise, (coords) / NSCALE + vec2(btime) * vec2(-0.9, 0.8)).r + texture2D(u_noise, (coords) / NSCALE + vec2(btime * 1.1) * vec2(-0.8, -1.0)).r) / 2.0; + vec3 color = texture2D(u_texture, c).rgb; -void main() { - - vec2 c = v_texCoord.xy; - vec4 color = texture2D(u_texture, c); - - vec2 v = vec2(1.0/screensize.x, 1.0/screensize.y); - vec2 coords = vec2(c.x / v.x + camerapos.x, c.y / v.y + camerapos.y); - - float stime = time / 5.0; - - float mscl = 30.0; - float mth = 5.0; - - if(color.r > 0.01){ - color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)) * vec4(0.9, 0.9, 1, 1.0); - - float n1 = snoise(coords / 22.0 + vec2(-time) / 540.0); - float n2 = snoise((coords + vec2(632.0)) / 8.0 + vec2(0.0, time) / 510.0); - - float r = (n1 + n2) / 2.0; - - if(r < -0.3 && r > -0.6){ - color *= 1.4; - } + if(!(noise > 0.54 && noise < 0.58)){ + color *= 0.6; } - gl_FragColor = color; + gl_FragColor = vec4(color.rgb, 1.0); } \ No newline at end of file diff --git a/core/assets/shaders/water.frag b/core/assets/shaders/water.frag index d8319103a7..1d2b67f889 100644 --- a/core/assets/shaders/water.frag +++ b/core/assets/shaders/water.frag @@ -5,34 +5,33 @@ precision mediump int; uniform sampler2D u_texture; -uniform vec2 camerapos; -uniform vec2 screensize; -uniform float time; +uniform vec2 u_campos; +uniform vec2 u_resolution; +uniform float u_time; varying vec4 v_color; varying vec2 v_texCoord; +const float mscl = 40.0; +const float mth = 7.0; + void main(){ vec2 c = v_texCoord.xy; - vec2 v = vec2(1.0/screensize.x, 1.0/screensize.y); - vec2 coords = vec2(c.x / v.x + camerapos.x, c.y / v.y + camerapos.y); + vec2 v = vec2(1.0/u_resolution.x, 1.0/u_resolution.y); + vec2 coords = vec2(c.x / v.x + u_campos.x, c.y / v.y + u_campos.y); - float stime = time / 5.0; - - float mscl = 40.0; - float mth = 7.0; + float stime = u_time / 5.0; vec3 color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)).rgb * vec3(0.9, 0.9, 1); - float r = 0.0; float tester = mod((coords.x + coords.y*1.1 + sin(stime / 8.0 + coords.x/5.0 - coords.y/100.0)*2.0) + sin(stime / 20.0 + coords.y/3.0) * 1.0 + sin(stime / 10.0 - coords.y/2.0) * 2.0 + sin(stime / 7.0 + coords.y/1.0) * 0.5 + sin(coords.x / 3.0 + coords.y / 2.0) + - sin(stime / 20.0 + coords.x/4.0) * 1.0, mscl) + r; + sin(stime / 20.0 + coords.x/4.0) * 1.0, mscl); if(tester < mth){ color *= 1.2; diff --git a/core/assets/sprites/noise.png b/core/assets/sprites/noise.png new file mode 100644 index 0000000000000000000000000000000000000000..b9302dd5f4739c65e92d4071424435ef2cf480ea GIT binary patch literal 12830 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 ZFfHxgxy>9E0SpWb44$rjF6*2UngEcE7Y+ab literal 0 HcmV?d00001 diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 63564cb211..bbbdc415cb 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -167,8 +167,11 @@ public class Control implements ApplicationListener, Loadable{ if(core == null) return; //TODO this sounds pretty bad due to conflict - Musics.land.stop(); - Musics.land.play(); + if(settings.getInt("musicvol") > 0){ + Musics.land.stop(); + Musics.land.play(); + Musics.land.setVolume(settings.getInt("musicvol") / 100f); + } app.post(() -> ui.hudfrag.showLand()); renderer.zoomIn(Fx.coreLand.lifetime); diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index 3f4b7c6208..8723c687ea 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -2,6 +2,7 @@ package mindustry.graphics; import arc.*; import arc.graphics.*; +import arc.graphics.Texture.*; import arc.graphics.g2d.*; import arc.graphics.g3d.*; import arc.graphics.gl.*; @@ -12,6 +13,8 @@ import arc.util.ArcAnnotate.*; import arc.util.*; import mindustry.type.*; +import static mindustry.Vars.renderer; + public class Shaders{ public static Shadow shadow; public static BlockBuild blockbuild; @@ -251,13 +254,25 @@ public class Shaders{ public SurfaceShader(String frag){ super(frag, "default"); + + Core.assets.load("sprites/noise.png", Texture.class).loaded = t -> { + ((Texture)t).setFilter(TextureFilter.Linear); + ((Texture)t).setWrap(TextureWrap.Repeat); + }; } @Override public void apply(){ - setUniformf("camerapos", Core.camera.position.x - Core.camera.width / 2, Core.camera.position.y - Core.camera.height / 2); - setUniformf("screensize", Core.camera.width, Core.camera.height); - setUniformf("time", Time.time()); + setUniformf("u_campos", Core.camera.position.x - Core.camera.width / 2, Core.camera.position.y - Core.camera.height / 2); + setUniformf("u_resolution", Core.camera.width, Core.camera.height); + setUniformf("u_time", Time.time()); + + if(hasUniform("u_noise")){ + Core.assets.get("sprites/noise.png", Texture.class).bind(1); + renderer.effectBuffer.getTexture().bind(0); + + setUniformi("u_noise", 1); + } } } diff --git a/gradle.properties b/gradle.properties index 8100c8da39..da0c3966fa 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms256m -Xmx1024m -archash=81dbe69779811234169486401f68ff66bc573d58 +archash=7f42d930e71cad9bf0f461d0cc92c4963fcc8067