From 6a7d6ee3eb7cc4d719a4d7c1337ff1cc0e511005 Mon Sep 17 00:00:00 2001 From: emil28092005 Date: Thu, 18 Jun 2026 19:27:05 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20single=20point=20light=20only=20?= =?UTF-8?q?=E2=80=94=20dark=20scene,=20dynamic=20light=20ball=20visible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Removed directional light from fragment shader - Ambient reduced to near-zero (0.01) — scene is dark - Only light source is the physics LightBall falling from y=15 - Objects near the ball are illuminated, far objects are in darkness - Dramatic contrast shows dynamic lighting clearly --- .../Shaders/triangle.frag | 14 ++++---------- .../Shaders/triangle.frag.spv | Bin 10104 -> 9464 bytes 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag index 4f25879..654a4cb 100644 --- a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag +++ b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag @@ -12,9 +12,7 @@ layout(set = 0, binding = 0) uniform CameraUBO { vec4 pointLightColor; // xyz = color, w = range }; -const vec3 DIR_LIGHT_DIR = normalize(vec3(0.5, 0.8, 0.3)); -const vec3 DIR_LIGHT_COLOR = vec3(0.4, 0.38, 0.33); -const vec3 AMBIENT = vec3(0.08, 0.09, 0.12); +const vec3 AMBIENT = vec3(0.01, 0.01, 0.02); const float PI = 3.14159265359; @@ -88,10 +86,9 @@ void main() float roughness = 0.5; float metallic = 0.1; - // Directional light (sun) - vec3 color = calcLight(N, V, DIR_LIGHT_DIR, DIR_LIGHT_COLOR, albedo, roughness, metallic); + // Only point light — no directional, near-zero ambient + vec3 color = AMBIENT * albedo; - // Point light vec3 lightPos = pointLightPos.xyz; float lightIntensity = pointLightPos.w; vec3 lightColor = pointLightColor.xyz; @@ -101,7 +98,7 @@ void main() float dist = length(toLight); vec3 L = toLight / max(dist, 0.001); - // Unity-style attenuation: smooth falloff at range edge + // Unity-style attenuation float attenuation = pow(clamp(1.0 - dist / lightRange, 0.0, 1.0), 2.0); vec3 radiance = lightColor * lightIntensity * attenuation; @@ -110,9 +107,6 @@ void main() color += calcLight(N, V, L, radiance, albedo, roughness, metallic); } - // Ambient - color += AMBIENT * albedo; - // Tonemap + gamma color = acesTonemap(color); color = pow(color, vec3(1.0 / 2.2)); diff --git a/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv b/src/Engine.Graphics.Vulkan/Shaders/triangle.frag.spv index b37f97236bc490e72f196c7c430855174ddce26c..8cf664694e8633fcfa322c1a7dca297592586889 100644 GIT binary patch delta 2550 zcmZ9OTXPgu6otPz}tw(Q#FX9SAhE1c$?s6=y><#Kedo_l|Ct0f(PE%*Q650b(_}KAmwVdd|cWd*CiX*trU}A zTJsau@S@aF^Y~0?CD}=3r0qSzT*i0SY07Iahufx`;?=K#r0?;c9m?izITeF!M9VSuxaQ8dEU~^MG6Yg;3x+E zjtowM-2x;aA@O}03*ubF!{3uNixa<3n0N}cd4 zeOY+lt6xW~E0H*w84KPKXK@PT4&k-rX~z$7L5NL6ZP&;XV7yIye}?1d8OZuM|Hkoi z{*5z#EW`2h3}pQ4(+40UxS8bd&K*;n@T|%S&vH(~y&hJBXx|W9MUw(3D)G>nTuCn~wr6~t^AeyibQVau1T zVL&=QYG7O8te5spn4@8QNO+y>k?-8F@SqHx`5Xf@#m8xa!y558F##;ffkb0b zl1`v!_$R`2gZcPB6($CqyGNT8KH+^GItOT5C@C!GlOOmJ{KnGD^1{KazTbh z(H8TiIGwPVuY}QvdG6;;i!&GBA6n;PPOnU^ztmowU&|!A6&+77$tm!XaJ!7+W;DXh z7YeWSzRMcn=DRA)7BcUOM!5OrgiGu{PTm*@=A0Mi*~iD*1CEcqD+|BreY{EF=KDr? zv-j~@B=ei}#k1Kj?$q;Swk}#7wj8uMGSRcn>#23kI9zL6QSD1NIT8K{F6Gr1Q o?Y`HLr5#KIzx5(Nb0sa=BmO`}0w&<+>0r^C@Pn7XZG7^^Kklv6N&o-= delta 3227 zcmZ9OT~L%|6vv+hUWf$y*fIu6QL-pSBl-{t1T2LjKC}-?D_0?0)7=$TQ~G#AG^xy0 z*RGnbx~Q9)X}oE?%Wie1yRN(IqFX0wrkVb~cb~KKvhVQt{Qu{F&Uw!Bxh@Yck2Y3U zwbeP7aI4%M?yJjDUcn!$;F~IV#|j>} zC&Z7YXAbAbvvaD2K?B!STnLgKU6S}t=A5f_bqs)El~@bfEp z;0ne6YIk9{H<=Ih0Oz5RVT&jxW~?8 zDfO%%T94<<8{7Tj&j_~)tBZ<-KdS~Oep@0eIg^lpUiAd1{UqSH!dTE^asewz$6j`xH4NZ1zz2&hYndd(H5P41Z1hT;>bng&VhfZTZiL6NDd{ z#eE^X_4=RX<-H(|%^HPY6lW4ll$C-P)QV?UErmQU95e)OJI_m;^Ss14&r6*1ycn-n zJkLv<^Sl@*KhKMC`5%m)1vB6+3JqhOr)i5N$pEPm6lF67$By}0&q z&aIDgZhf3{>y49@TOa4#dgD~Vt%vt&S=AR?8h;2MmaSf`PrJdg!@cev5nk;zwg8SF z%g@yVv-Dgai+Nl)={2?ij>ZAqEWE~RY>9YS7PrXID#WbtOcR<&3oBD1wt{+#7A~Q<&8t zo