From d6ca80c67831b97a2ebc9d437cfee91c7c247371 Mon Sep 17 00:00:00 2001 From: emil28092005 Date: Thu, 18 Jun 2026 12:39:51 +0300 Subject: [PATCH] fix: add normal-based diffuse lighting so cube is visible as 3D - Fragment shader: directional light dot(normal, lightDir) with 0.2 ambient - Vertex shader: pass normal through mat3(model) to fragment - Same-color faces now have different shading based on orientation --- .../Shaders/triangle.frag | 5 ++++- .../Shaders/triangle.frag.spv | Bin 500 -> 908 bytes .../Shaders/triangle.vert | 2 ++ .../Shaders/triangle.vert.spv | Bin 1544 -> 1880 bytes 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag index 7122ce8..b0205a1 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag @@ -1,8 +1,11 @@ #version 450 layout(location = 0) in vec3 fragColor; +layout(location = 1) in vec3 fragNormal; layout(location = 0) out vec4 outColor; void main() { - outColor = vec4(fragColor, 1.0); + vec3 lightDir = normalize(vec3(0.5, 0.8, 0.3)); + float diff = max(dot(normalize(fragNormal), lightDir), 0.2); + outColor = vec4(fragColor * diff, 1.0); } diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv index 828f1e56b1fa987e9bc5cdb272d43039ab4f4c08..4a5184bc719093628c3e3d83731db0076a082173 100644 GIT binary patch literal 908 zcmYk4%Su8~7=^dlF-!B3rQJJb1EG)x6+xtf3MV2(PauePKs#VI?+F?;>m7QC#s$4X zZ_y-ZecQ9c4U7G+^pPI;utFkfgO7x^o=Xg@)iX@^9|v3MdRa*=ZZyJ5|}+5y}uxvzE=W17q={%+!uA?Eh_@C z=xJ3#D+%OQ1^n!Qp7h7(YHiBqeQ@%&1Y(|5o0<3rh(W)J`uVcmzu~lUq|wu9yOG9@ Yu2qd4R|H=m9zVNeE_ROZS5uz~e~BUHvU*YjxR3HRdgatLN(oJ#4g!*TfV$| zu}8Ft9y&P&oHC|HeA1Ld|Lb#zJ;i2yU%VD8j*vXfcv>x=D>$V~-H8G|YkjJEfP)^V z$t}|Ph;tn_B#zO$i?#kk{!Oy4kzbd!9y0a&WcAkSTV$S)xO!`Mkd3I-c8G}W-Gn!| zk6wPx_=4o*8>q7n2>TaMd%Gng{jpxj^r&?Gk~x3Q_U?a3*stDu_qfH?_jvcsmRH0N D$)gy> diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert index d587a87..9b81756 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert @@ -5,6 +5,7 @@ layout(location = 1) in vec3 inColor; layout(location = 2) in vec3 inNormal; layout(location = 0) out vec3 fragColor; +layout(location = 1) out vec3 fragNormal; layout(row_major, set = 0, binding = 0) uniform CameraUBO { mat4 vp; @@ -17,4 +18,5 @@ layout(row_major, push_constant) uniform PC { void main() { gl_Position = vp * pc.model * vec4(inPosition, 1.0); fragColor = inColor; + fragNormal = mat3(pc.model) * inNormal; } diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.vert.spv index edfeddb33d4d1e99fac4fcba0ca89073fe8ad874..b9f3c50d5f35dfe6c62faf446604e4d07c99808d 100644 GIT binary patch delta 388 zcmZXQy-osA5QS%UK_G|KumZ6TH1XO3&T@b+43Tk zBz%Xk6?gMxW=>|#ox97^^;sbdZZl?XdCOWaE;KzKzf?T>{TO-ib3XZc{hrSzQ?oQ* zwEFR}=iJPOmZIDQ|6Zw5)*ysSUjE_Ad>0LjcFxqPH2Gfi^oupk@{wa_#qqhzQ}E?wv(7roiZ{(T)Z gEhBUF>JeJ-2_lGjgz7G+SNgM+!u^kuxW%#qJ3v7nJOBUy delta 60 zcmcb?*TKWf%%sfDz`)4B&A`E+Katmzk!zx}>c$)o#?2=feHb^ZFrQ##m1kgJ(AzA? NYR<^<7pT+%hyh!L3pD@$