From ad8a14a4f74614f72752a9858c2dab9e46ccd771 Mon Sep 17 00:00:00 2001 From: emil28092005 Date: Thu, 18 Jun 2026 19:50:20 +0300 Subject: [PATCH] =?UTF-8?q?debug:=20hardcoded=20light=20in=20fragment=20sh?= =?UTF-8?q?ader=20=E2=80=94=20no=20UBO=20light=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Light at (0,10,0) hardcoded in GLSL. Tests if lighting math works. If light works: problem is UBO layout for light data (std140 padding). If artifacts: problem is in fragWorldPos or fragNormal. --- .../Shaders/triangle.frag | 11 ++++++----- .../Shaders/triangle.frag.spv | Bin 2220 -> 2004 bytes 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag index 82d0e14..58ea62f 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag @@ -8,22 +8,23 @@ layout(location = 0) out vec4 outColor; layout(set = 0, binding = 0) uniform CameraUBO { mat4 vp; - vec4 pointLightPos; - vec4 pointLightColor; }; void main() { vec3 N = normalize(fragNormal); - vec3 toLight = pointLightPos.xyz - fragWorldPos; + + // Hardcoded light at (0, 10, 0) — test if lighting works at all + vec3 lightPos = vec3(0.0, 10.0, 0.0); + vec3 toLight = lightPos - fragWorldPos; float dist = length(toLight); vec3 L = normalize(toLight); float NdotL = max(dot(N, L), 0.0); float atten = 1.0 / (1.0 + dist * dist * 0.05); - float intensity = pointLightPos.w; + float intensity = 30.0; - vec3 color = fragAlbedo * pointLightColor.xyz * NdotL * intensity * atten; + vec3 color = fragAlbedo * vec3(1.0, 0.9, 0.7) * NdotL * intensity * atten; color += fragAlbedo * 0.02; outColor = vec4(color, 1.0); diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv index 1babfe73ee4ea7e302bc39512829f35109b5ea27..886d5617694ad5409a0e7cafc90e35c3553bbd89 100644 GIT binary patch literal 2004 zcmZ9LNl#N@6ox-2tqhex6mY^898eI^0-_9^R8Skl7~{HHicMOsX|E>kG{(f0EB}H2 z#I>&d8!p|L_&&Gafrfi?a?bmn@tb1Z)5o0aas#f{m0bH9aou8^xJ0BkOV3L4t*|n` zxU@jTpo>L;#0GPNLEbMo%^BWxY*9TxO{!`ZA;?% zsZ(v1_qKy(qg-!ugW~G7z1QJR(2^O|I3XPdC0OA^)SJ8)L9<@zh?`JcrPd1Dc`Ds<6@>=+^q!dJk}q) z4U0Z3s`XG@vE0~gmY)}%$WEv~9N)V)YaQpysHp53a_JEI?%#)7LA)fMhRGq1xj!w5d$C&JdxRhjE`P2t+ z(r^g4U%JcVRgYOW+^jIULlQp2%&YADoV?T-kq`rqwmR$=b?7rLZL?UNi{hO7kTpCb z^y_D7-SG9u|0i$t*zeA{ZVFec)r0(7!kJ7aYjb6U=|LPmtGgz<|M&Mb_9rKsHS!*q zGcV0vrBA{h z8RpG(V&0o!_LFyIn0(%qVf@_1PCR`C^R~=SKJN;=u6fW&33nms&-u9QF3J6fb8bVc zU}ku1=H)I}{-|s?!>43(Cq8M_)E|=&15ZBdgR}V4vf=2@8J&^PzaYU!4toG^Ip<_s z4n59GY-W7quut%ob3r!iFr1Q2%s0(R-?W67lq9Li;ie?iosr<@-cy@B$44#VE=ict z@MVub``TB047_nyWy4eZqmR2Lo4btfi|1xNhmYQzFB~>!%lol4Ey(8m(1U$hl)&*u zY_=uY%>UKLEXyVi-ePXcrnbeb$R-ZnV(!Rh7K^znn>cu8<9B_C2+)AO*o4$$|nA)->ZAF;rNW>9>Z~t#y#*HZ*@nVa?+a;@`=aKInc8p Ljqjf-tVsR?Pa$?V literal 2220 zcmZ9L+fGwa5QZ0&a+ZV0!4tON0YwoN5an1?y-`;DWaW&I5|39;4&0+0C>tu&>Ew0CPx?LBqLDwqAiEEGcY<@RC(+JBm zbMv!!^tnXjh)=)ka&6j?{ZjP+LyzQ)_cMV)2e}2hCU*#U3*G0Du40@V^0ZpYKKF>-P&6`Uhr=m{~w)D1T*d`f#t!X48d4|~k{5$X66&vK$K_+vk>-Rj~z z`Atb!hNmO+Va@PO;a@-VE8IUPJr&twfAGA-dbA*&`-yA!Gl%AUm%We0&k1+`{=Q6p zykTNl{$S{}qWjrD5>7vmt$50&hN>(#g+!9!SRz z-h7xVb(_y4>G;7@A8#KHe{#u6sL%W#doHKle4a?>9KGkvQwbct78B0=3)1o5@pIXh n4#zUCC>@U87`NlOR_#UIL~ox-IFCPeX3m{k+Ohprghk0e2D^dU