Skip to content
Snippets Groups Projects
Commit a22977e8 authored by Alexander Gauggel's avatar Alexander Gauggel
Browse files

[#69] Smooth particle color transitions to avoid pop

parent d3ef3d43
No related branches found
No related tags found
1 merge request!56Resolve "Partikelsystem"
...@@ -26,7 +26,7 @@ void main() ...@@ -26,7 +26,7 @@ void main()
vec3 main_color = imageLoad(colorBuffer, pixel_coord).rgb; vec3 main_color = imageLoad(colorBuffer, pixel_coord).rgb;
// composite blur and lens features // composite blur and lens features
float bloom_weight = 0.1f; float bloom_weight = 0.01f;
float lens_weight = 0.f; float lens_weight = 0.f;
float main_weight = 1 - (bloom_weight + lens_weight); float main_weight = 1 - (bloom_weight + lens_weight);
......
...@@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates; ...@@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates;
layout(location = 1) in vec3 passVelocity; layout(location = 1) in vec3 passVelocity;
layout(location = 2) in float passlifeTime; 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 { layout(set=0, binding=0) uniform uColor {
vec4 color; vec4 color;
...@@ -22,13 +22,22 @@ layout(set=0,binding=1) uniform uPosition{ ...@@ -22,13 +22,22 @@ layout(set=0,binding=1) uniform uPosition{
void main() void main()
{ {
vec2 mouse = vec2(Position.position.x, Position.position.y); 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) + vec3 c0 = vec3(1,1,0);
float(passlifeTime >= 2 && passlifeTime < 2.5f) * vec4(passlifeTime * 0.5,passlifeTime * 0.5,0,0) + vec3 c1 = vec3(1, passlifeTime * 0.5, 0);
float(passlifeTime >= 2.5f) * vec4(1,0,0,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 // make the triangle look like a circle
outColor *= circleFactor(passTriangleCoordinates); outColor *= circleFactor(passTriangleCoordinates);
// full color is achieved by additively blending many particles
outColor *= 0.5;
} }
\ No newline at end of file
...@@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates; ...@@ -8,7 +8,7 @@ layout(location = 0) in vec2 passTriangleCoordinates;
layout(location = 1) in vec3 passVelocity; layout(location = 1) in vec3 passVelocity;
layout(location = 2) in float passlifeTime; 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 { layout(set=0, binding=0) uniform uColor {
vec4 color; vec4 color;
...@@ -22,13 +22,22 @@ void main() ...@@ -22,13 +22,22 @@ void main()
{ {
float normlt = 1-normalize(passlifeTime); float normlt = 1-normalize(passlifeTime);
vec2 mouse = vec2(Position.position.x, Position.position.y); 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) + vec3 c0 = vec3(0.2,0.5,1);
float(passlifeTime >= 2 && passlifeTime < 4.f) * vec4(0.5,0.9,1,0) + vec3 c1 = vec3(0.3, 0.7,1);
float(passlifeTime >= 4.f) * vec4(0.9,1,1,0); 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 // make the triangle look like a circle
outColor *= circleFactor(passTriangleCoordinates); outColor *= circleFactor(passTriangleCoordinates);
// full color is achieved by additively blending many particles
outColor *= 0.5;
} }
...@@ -59,7 +59,7 @@ int main(int argc, const char **argv) { ...@@ -59,7 +59,7 @@ int main(int argc, const char **argv) {
} }
// use space or use water // use space or use water
bool useSpace = true; bool useSpace = false;
vkcv::shader::GLSLCompiler compiler; vkcv::shader::GLSLCompiler compiler;
vkcv::ShaderProgram computeShaderProgram{}; vkcv::ShaderProgram computeShaderProgram{};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment