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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 U)<6?#0{mOLT1JnmA2`SU50H%)4gdfE 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