From d529627953ad62261e159eaa9e5c82b59c19b903 Mon Sep 17 00:00:00 2001 From: TheJackiMonster <thejackimonster@gmail.com> Date: Thu, 21 Jul 2022 20:51:39 +0200 Subject: [PATCH] Fixed blending artifacts finally with proper additive rendering Signed-off-by: TheJackiMonster <thejackimonster@gmail.com> --- projects/fire_works/shaders/add.comp | 6 ------ projects/fire_works/shaders/particle.frag | 2 +- projects/fire_works/shaders/smoke.frag | 4 +--- projects/fire_works/src/main.cpp | 10 ++++++---- src/vkcv/Core.cpp | 6 +++--- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/projects/fire_works/shaders/add.comp b/projects/fire_works/shaders/add.comp index 1846085e..3187e18d 100644 --- a/projects/fire_works/shaders/add.comp +++ b/projects/fire_works/shaders/add.comp @@ -18,12 +18,6 @@ void main() { vec4 outSmoke = imageLoad(inSmoke, uv); vec4 outTrails = imageLoad(inTrails, uv); - // 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 - clamp(outParticles.a, 0, 1); - outSmoke.a = 1.0f - clamp(outSmoke.a, 0, 1); - outTrails.a = 1.0f - clamp(outTrails.a, 0, 1); - // TODO: add noise to the smoke here! vec4 result = vec4( diff --git a/projects/fire_works/shaders/particle.frag b/projects/fire_works/shaders/particle.frag index 97221ef2..173c83ef 100644 --- a/projects/fire_works/shaders/particle.frag +++ b/projects/fire_works/shaders/particle.frag @@ -14,7 +14,7 @@ void main() { const float value = length(passPos); if (value < 0.5f) { - outColor = vec4(passColor, max(value * 2.0f, 0.0f)); // Use inverse alpha value + outColor = vec4(passColor, 1.0f - max(value * 2.0f, 0.0f)); } else { discard; } diff --git a/projects/fire_works/shaders/smoke.frag b/projects/fire_works/shaders/smoke.frag index ad4ae33d..7339c6ee 100644 --- a/projects/fire_works/shaders/smoke.frag +++ b/projects/fire_works/shaders/smoke.frag @@ -56,9 +56,7 @@ void main() { result.r = clamp(result.r, 0, 1); result.g = clamp(result.g, 0, 1); result.b = clamp(result.b, 0, 1); - - // Inverse alpha value - result.a = 1.0f - clamp(result.a, 0, 1);; + result.a = clamp(result.a, 0, 1);; if (result.a < 1.0f) { outColor = result; diff --git a/projects/fire_works/src/main.cpp b/projects/fire_works/src/main.cpp index 435bfc62..3d894904 100644 --- a/projects/fire_works/src/main.cpp +++ b/projects/fire_works/src/main.cpp @@ -260,7 +260,6 @@ int main(int argc, const char **argv) { particles.resize(PARTICLE_COUNT); initializeParticles(particles); - vkcv::Buffer<particle_t> particleBuffer = core.createBuffer<particle_t>( vkcv::BufferType::STORAGE, particles.size(), @@ -275,8 +274,7 @@ int main(int argc, const char **argv) { core.createBuffer<particle_t>(vkcv::BufferType::STORAGE, particles.size()); particleBufferCopy.fill(particles); - - + { vkcv::DescriptorWrites writes; writes.writeStorageBuffer(0, particleBuffer.getHandle()); @@ -393,7 +391,6 @@ int main(int argc, const char **argv) { core.writeDescriptorSet(generationDescriptorSet, writes); } - std::vector<smoke_t> smokes; smokes.reserve(SMOKE_COUNT); @@ -548,6 +545,8 @@ int main(int argc, const char **argv) { true }; + smokePipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; + vkcv::GraphicsPipelineHandle smokePipeline = core.createGraphicsPipeline(smokePipelineDefinition); const std::vector<vkcv::VertexAttachment> vaTrail = trailShaderProgram.getVertexAttachments(); @@ -570,6 +569,7 @@ int main(int argc, const char **argv) { }; trailPipelineDefinition.m_PrimitiveTopology = vkcv::PrimitiveTopology::PointList; + trailPipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; vkcv::GraphicsPipelineHandle trailPipeline = core.createGraphicsPipeline(trailPipelineDefinition); @@ -639,6 +639,8 @@ int main(int argc, const char **argv) { true }; + particlePipelineDefinition.m_blendMode = vkcv::BlendMode::Additive; + vkcv::GraphicsPipelineHandle particlePipeline = core.createGraphicsPipeline(particlePipelineDefinition); std::vector<vkcv::DrawcallInfo> drawcallsParticles; diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 06942b87..22cc66e7 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -249,9 +249,9 @@ namespace vkcv clearValues.emplace_back(std::array<float, 4>{ clear, - clear, - clear, - 1.f + clear, + clear, + 0.f }); } } -- GitLab