diff --git a/projects/fire_works/shaders/add.comp b/projects/fire_works/shaders/add.comp index eb20cc52eab6eeadcffcded6b2924c172aee58fc..70a15c4e93e07728c081c54d4fe49469277dab8f 100644 --- a/projects/fire_works/shaders/add.comp +++ b/projects/fire_works/shaders/add.comp @@ -18,5 +18,21 @@ void main() { vec4 outSmoke = imageLoad(inSmoke, uv); vec4 outTrails = imageLoad(inTrails, uv); - imageStore(outImage, uv, outParticles + outSmoke + outTrails); + // Reverse alpha values: + // -> Because clear value is always vec4(0, 0, 0, 1) which is now vec4(0, 0, 0, 0)! + outParticles.a = 1.0f - outParticles.a; + outSmoke.a = 1.0f - outSmoke.a; + outTrails.a = 1.0f - outTrails.a; + + // TODO: add noise to the smoke here! + + vec4 result = vec4( + outParticles.rgb * outParticles.a + + outSmoke.rgb * outSmoke.a + + outTrails.rgb * outTrails.a, + + outParticles.a + outSmoke.a + outTrails.a + ); + + imageStore(outImage, uv, result); } \ No newline at end of file diff --git a/projects/fire_works/shaders/particle.frag b/projects/fire_works/shaders/particle.frag index 0733da739934384082c0c9c3040ee7d6a24ad122..e1fa6de0a0280c4be1e09cc8e29346b3e11b19cc 100644 --- a/projects/fire_works/shaders/particle.frag +++ b/projects/fire_works/shaders/particle.frag @@ -4,7 +4,7 @@ layout(location = 0) in vec2 passPos; layout(location = 1) in flat vec3 passColor; layout(location = 2) in flat float passLifetime; -layout(location = 0) out vec3 outColor; +layout(location = 0) out vec4 outColor; void main() { if (passLifetime <= 0.0f) { @@ -14,7 +14,7 @@ void main() { const float value = length(passPos); if (value < 0.5f) { - outColor = passColor * max(0.0f, 0.5f - value) * 2.0f; + outColor = vec4(passColor, value * 2.0f); // Use inverse alpha value } else { discard; } diff --git a/projects/fire_works/shaders/smoke.frag b/projects/fire_works/shaders/smoke.frag index a7e6415d71b1b708fd52be716f68eb2242c26fbd..30fb3667ef1f54d68540fd760c846c8dca6d0aa4 100644 --- a/projects/fire_works/shaders/smoke.frag +++ b/projects/fire_works/shaders/smoke.frag @@ -10,7 +10,7 @@ layout(location = 2) in vec3 passColor; layout(location = 3) in float passDensity; layout(location = 4) in flat int passSmokeIndex; -layout(location = 0) out vec3 outColor; +layout(location = 0) out vec4 outColor; layout(set=1, binding=0, std430) readonly buffer randomBuffer { float randomData []; @@ -53,16 +53,12 @@ void main() { ); } - result.a += (1.0f + randomData[passSmokeIndex % randomData.length()] * 0.1f) * result.a; + // Inverse alpha value + result.a = 1.0f - result.a; - if (result.a <= 0.0f) { + if (result.a < 1.0f) { + outColor = result; + } else { discard; } - - result.r = clamp(result.r, 0.0f, 1.0f); - result.g = clamp(result.g, 0.0f, 1.0f); - result.b = clamp(result.b, 0.0f, 1.0f); - result.a = clamp(result.a, 0.0f, 1.0f); - - outColor += vec3(result.rgb * result.a); } \ No newline at end of file diff --git a/projects/fire_works/src/main.cpp b/projects/fire_works/src/main.cpp index 2aa5b4c3f72dac8201dfae2e59a5c2ee02421748..acd9411255e0bf33f3aa930a74d5466f8c12ca7b 100644 --- a/projects/fire_works/src/main.cpp +++ b/projects/fire_works/src/main.cpp @@ -762,8 +762,6 @@ int main(int argc, const char **argv) { vkcv::PushConstants pushConstantsDraw0 (sizeof(draw_particles_t)); pushConstantsDraw0.appendDrawcall(draw_particles); - core.recordImageMemoryBarrier(cmdStream, colorBuffers[0]); - core.recordBeginDebugLabel(cmdStream, "Draw particles", { 1.0f, 0.0f, 1.0f, 1.0f }); core.recordDrawcallsToCmdStream( cmdStream, @@ -786,8 +784,6 @@ int main(int argc, const char **argv) { vkcv::PushConstants pushConstantsDraw1 (sizeof(glm::mat4) * 2); pushConstantsDraw1.appendDrawcall(smokeMatrices); - core.recordImageMemoryBarrier(cmdStream, colorBuffers[1]); - core.recordDrawcallsToCmdStream( cmdStream, renderPass, @@ -802,8 +798,6 @@ int main(int argc, const char **argv) { core.recordBufferMemoryBarrier(cmdStream, trailBuffer.getHandle()); core.recordBufferMemoryBarrier(cmdStream, pointBuffer.getHandle()); - core.recordImageMemoryBarrier(cmdStream, colorBuffers[2]); - core.recordBeginDebugLabel(cmdStream, "Draw trails", { 0.75f, 0.5f, 1.0f, 1.0f }); core.recordDrawcallsToCmdStream( cmdStream,