From 83d7f26f3343770d38a802cfb300aba0d13c09f1 Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 23 Feb 2026 07:40:51 -0800 Subject: [PATCH] Fix visible square behind sun by switching celestial to additive blending Alpha blending caused faint quad edges to be visible against the sky gradient. Additive blending correctly adds glow light without the outline artifact. Edge fade starts earlier and discard threshold raised. --- assets/shaders/celestial.frag.glsl | 9 +++++---- assets/shaders/celestial.frag.spv | Bin 5340 -> 5392 bytes src/rendering/celestial.cpp | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/shaders/celestial.frag.glsl b/assets/shaders/celestial.frag.glsl index 8ccd7eb7..a3d673b9 100644 --- a/assets/shaders/celestial.frag.glsl +++ b/assets/shaders/celestial.frag.glsl @@ -37,8 +37,8 @@ void main() { // Combine disc and glow float alpha = max(disc, glow) * push.intensity; - // Fade to zero at quad edges to prevent visible box - float edgeFade = 1.0 - smoothstep(0.4, 0.5, dist); + // Fade to zero well before quad edges + float edgeFade = 1.0 - smoothstep(0.35, 0.48, dist); alpha *= edgeFade; vec3 color = push.celestialColor.rgb; @@ -56,6 +56,7 @@ void main() { float phaseShadow = smoothstep(-0.1, 0.1, phaseX); alpha *= mix(phaseShadow, 1.0, step(0.5, push.intensity)); - if (alpha < 0.001) discard; - outColor = vec4(color, alpha); + if (alpha < 0.003) discard; + // Pre-multiply for additive blending: RGB is the light contribution + outColor = vec4(color * alpha, alpha); } diff --git a/assets/shaders/celestial.frag.spv b/assets/shaders/celestial.frag.spv index d587579183b2d35a26739bf45c1511e28b8ee324..9716ef19e2665357489a2184f3bf1e2e15116f2f 100644 GIT binary patch delta 1047 zcmYk5J7^S96o${tWD_4*P%JD&6vV;=MH>;q1_W)iiL8Y-V!%KO!GKB{VUUo*!WYvB zRyH;k5>`!otR_*T#*HSvqLMKiUyX=Zh$0Gp|6~rh;p6`2Kj++ga_{cUx-%`sC|uKI z7T97d+UK*yok2RVw;Zk=HM5@X&cj`M%nJOCdtC1BJaDKt^U`E091PORiKrY#r$>Jz zvxRC`BZb#sqE>5fwFWzi9)k!JEB_eCS3R!H$0d)ai7%et*0!4Z8MJzPpe>Kn*#&ZpV!<#t4@A9 zrw_2o^ZJ`;d0u}DE$T71S($82Uj&D;|MiP`w6H zZX`*IE8@GT-LM_}=zD1SKHhz_yydW!9eY_Hz!4Y&?|Yd0epQc%)hl18>cZuD{e;<$ z%xty=+1)-N8Nepc8)xszs%CwGl=tSRXn8)+WO8BAvUmz-5}J8gz1B0(jvIk*qABmE zJx43I0km5SsNPR_fj$U+4KLC1)TfD*ljrrX%;L-(;*L&|cnz2~4L@mk%c{?BUP-w( zAn%ujnf}8#((<&aUhW;}wfvA-v<^O%zib_?8u=xQ=YJn_1S;A^k#6BV)IlHjKA`KM p8*uMq?uD!!+@O9lpFsVpS6+MTzfW0}`^yenV6)DutY31u;UCxcs3HIW delta 979 zcmYk5%}Z2a6vofJ*J=82pls11q99tN5VchlTC~ZH!xZQy5E5Jj3KedGA;d+CK)D`Iqy05J+Gt9$;m<#9?zQvw$BRo zWvtK{B$b|0c;b{N^yLg?% zCm;eX)?mA^D}Z>-{bxIVyZdkO2bzXkkCFcYuG&G+mib8>hV5NEf1GqHLe+ZX0 z4m@XCNB*BwBZz1dpo>w4u`@u$inRb0OP>WJKts!)1JabQffSpIzZDLbAHyzybHH2A z!=?Lp3vg+Nz*$Zl!afDpfL7ymi<$0MwS=!)>FTNrm*)9(v-7FgXuH$9T_qTRGeA4m zUP(%e^getMsaaSamples()) .setLayout(pipelineLayout_) .setRenderPass(vkCtx_->getImGuiRenderPass()) @@ -157,7 +157,7 @@ void Celestial::recreatePipelines() { .setTopology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) .setRasterization(VK_POLYGON_MODE_FILL, VK_CULL_MODE_NONE) .setDepthTest(true, false, VK_COMPARE_OP_LESS_OR_EQUAL) - .setColorBlendAttachment(PipelineBuilder::blendAlpha()) + .setColorBlendAttachment(PipelineBuilder::blendAdditive()) .setMultisample(vkCtx_->getMsaaSamples()) .setLayout(pipelineLayout_) .setRenderPass(vkCtx_->getImGuiRenderPass())