From a22977e864aab76bc056eb550a42ee5c2020ab61 Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Sat, 26 Jun 2021 19:59:39 +0200 Subject: [PATCH] [#69] Smooth particle color transitions to avoid pop --- .../shaders/bloom/composite.comp | 2 +- .../shaders/shader_space.frag | 23 +++++++++++++------ .../shaders/shader_water.frag | 23 +++++++++++++------ projects/particle_simulation/src/main.cpp | 2 +- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/projects/particle_simulation/shaders/bloom/composite.comp b/projects/particle_simulation/shaders/bloom/composite.comp index 66d3cd4b..87b5ddb9 100644 --- a/projects/particle_simulation/shaders/bloom/composite.comp +++ b/projects/particle_simulation/shaders/bloom/composite.comp @@ -26,7 +26,7 @@ void main() vec3 main_color = imageLoad(colorBuffer, pixel_coord).rgb; // composite blur and lens features - float bloom_weight = 0.1f; + float bloom_weight = 0.01f; float lens_weight = 0.f; float main_weight = 1 - (bloom_weight + lens_weight); diff --git a/projects/particle_simulation/shaders/shader_space.frag b/projects/particle_simulation/shaders/shader_space.frag index a1da5403..6e2974a1 100644 --- a/projects/particle_simulation/shaders/shader_space.frag +++ b/projects/particle_simulation/shaders/shader_space.frag @@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates; layout(location = 1) in vec3 passVelocity; layout(location = 2) in float passlifeTime; -layout(location = 0) out vec4 outColor; +layout(location = 0) out vec3 outColor; layout(set=0, binding=0) uniform uColor { vec4 color; @@ -22,13 +22,22 @@ layout(set=0,binding=1) uniform uPosition{ void main() { vec2 mouse = vec2(Position.position.x, Position.position.y); - outColor = float(passlifeTime < 1) * vec4(1,1,0,0) + - float(passlifeTime < 2 && passlifeTime > 1) * vec4(1,passlifeTime * 0.5,0,0) + - float(passlifeTime >= 2 && passlifeTime < 2.5f) * vec4(passlifeTime * 0.5,passlifeTime * 0.5,0,0) + - float(passlifeTime >= 2.5f) * vec4(1,0,0,0); + + vec3 c0 = vec3(1,1,0); + vec3 c1 = vec3(1, passlifeTime * 0.5, 0); + vec3 c2 = vec3(passlifeTime * 0.5,passlifeTime * 0.5,0); + vec3 c3 = vec3(1, 0, 0); + + if(passlifeTime < 1){ + outColor = mix(c0, c1, passlifeTime ); + } + else if(passlifeTime < 2){ + outColor = mix(c1, c2, passlifeTime - 1); + } + else{ + outColor = mix(c2, c3, clamp((passlifeTime - 2) * 0.5, 0, 1)); + } // make the triangle look like a circle outColor *= circleFactor(passTriangleCoordinates); - // full color is achieved by additively blending many particles - outColor *= 0.5; } \ No newline at end of file diff --git a/projects/particle_simulation/shaders/shader_water.frag b/projects/particle_simulation/shaders/shader_water.frag index b0b4cc70..4a62ad34 100644 --- a/projects/particle_simulation/shaders/shader_water.frag +++ b/projects/particle_simulation/shaders/shader_water.frag @@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates; layout(location = 1) in vec3 passVelocity; layout(location = 2) in float passlifeTime; -layout(location = 0) out vec4 outColor; +layout(location = 0) out vec3 outColor; layout(set=0, binding=0) uniform uColor { vec4 color; @@ -22,13 +22,22 @@ void main() { float normlt = 1-normalize(passlifeTime); vec2 mouse = vec2(Position.position.x, Position.position.y); - outColor =float(passlifeTime < 1) * vec4(0.2,0.5,1,0) + - float(passlifeTime < 2 && passlifeTime > 1) * vec4(0.3, 0.7,1,0) + - float(passlifeTime >= 2 && passlifeTime < 4.f) * vec4(0.5,0.9,1,0) + - float(passlifeTime >= 4.f) * vec4(0.9,1,1,0); + + vec3 c0 = vec3(0.2,0.5,1); + vec3 c1 = vec3(0.3, 0.7,1); + vec3 c2 = vec3(0.5,0.9,1); + vec3 c3 = vec3(0.9,1,1); + + if(passlifeTime < 1){ + outColor = mix(c0, c1, passlifeTime ); + } + else if(passlifeTime < 2){ + outColor = mix(c1, c2, passlifeTime - 1); + } + else{ + outColor = mix(c2, c3, clamp((passlifeTime - 2) * 0.5, 0, 1)); + } // make the triangle look like a circle outColor *= circleFactor(passTriangleCoordinates); - // full color is achieved by additively blending many particles - outColor *= 0.5; } diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp index 8d2a611a..0fbc8bdf 100644 --- a/projects/particle_simulation/src/main.cpp +++ b/projects/particle_simulation/src/main.cpp @@ -59,7 +59,7 @@ int main(int argc, const char **argv) { } // use space or use water - bool useSpace = true; + bool useSpace = false; vkcv::shader::GLSLCompiler compiler; vkcv::ShaderProgram computeShaderProgram{}; -- GitLab