From 126b4f978d783dbadf48151eef40a1b7cf282989 Mon Sep 17 00:00:00 2001 From: Peter Li Date: Fri, 25 Apr 2025 00:09:14 -0700 Subject: [PATCH] fixed the rest of my mouse and camera attachment issues --- engine/rend/shaders/lit_mesh.frag.hlsl | 9 +++- engine/rend/src/camera/CameraComponent.zig | 15 ++++-- engine/rend/src/sgpu/renderer.zig | 13 ++++-- .../content/_shaders/dxil/lit_mesh.frag.dxil | Bin 5536 -> 5548 bytes .../content/_shaders/msl/lit_mesh.frag.msl | 43 +++++++++--------- .../content/_shaders/spv/lit_mesh.frag.spv | Bin 3128 -> 3188 bytes projects/sampleGame/main.zig | 19 +++++--- 7 files changed, 61 insertions(+), 38 deletions(-) diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index bb17255..aa4df15 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -13,7 +13,7 @@ float3 BlinnPhong(float3 normal, float3 fragPos, float3 lightPos, float3 lightCo { float dist = length(lightPos - fragPos); // attenuation - float maxDist = 5; + float maxDist = 15; float cutoff1 = 2; float cutoff2 = 4; float cutoffFactor = 0.5; @@ -31,6 +31,11 @@ float3 BlinnPhong(float3 normal, float3 fragPos, float3 lightPos, float3 lightCo { attenuation = 0; } + + if (attenuation > 1.0) + { + attenuation = 1.0; + } if(length(normal) < 0.1) { return fragPos * lightColor * (1 / (dist * dist)) * attenuation; @@ -76,7 +81,7 @@ float4 main( float3 lightPos = lightPosition.xyz; //+ float3(0, 20, 0); float3 lightColor = float3(0.8, 0.8, 0.5); - float3 ambient = lerp(float3(0.01, 0.01, 0.003), float3(0.004, 0.004, 0.06), dot(Normal, float3(0.0,1.0,0.0)) ) * 0.1; + float3 ambient = lerp(float3(0.01, 0.01, 0.003), float3(0.004, 0.004, 0.06), dot(Normal, float3(0.0,1.0,0.0)) ) * 0.001; float3 col = s.xyz; diff --git a/engine/rend/src/camera/CameraComponent.zig b/engine/rend/src/camera/CameraComponent.zig index 00a5a92..bc44f11 100644 --- a/engine/rend/src/camera/CameraComponent.zig +++ b/engine/rend/src/camera/CameraComponent.zig @@ -33,6 +33,10 @@ pub fn initECS(self: *@This(), handle: core.SetHandle) void { self.entity = core.Entity.fromHandle(handle); } +pub fn forward(self: *@This()) core.Vectorf { + return core.Vectorf.fromZm(mul(self.worldTransform, core.Vectorf.Forward.toZm())); +} + pub fn updateProjections(self: *@This()) void { self.projection = zm.perspectiveFovLh(core.radians(self.fov), 16.0 / 9.0, 0.1, 200000); // self.projection[1][1] *= -1; @@ -60,15 +64,18 @@ pub fn resolve(self: *@This()) void { position.x = -position.x; { var base = core.zm.identity(); - base = mul(core.zm.rotationY(-self.yaw), base); + base = mul(core.zm.rotationY(self.yaw), base); base = mul(core.zm.rotationX(self.pitch), base); base = mul(core.zm.rotationZ(self.roll), base); - const pr2 = core.scene.SceneObjectPosRot{ - .position = position, + var posRot: core.scene.SceneObjectPosRot = .{ + .rotation = scene.getRotation(), + .position = scene.getPosition(), }; + posRot.rotation.quat[0] *= 1; + posRot.rotation.quat[1] *= -1; - self.worldTransform = mul(base, pr2.toTransform()); + self.worldTransform = mul(posRot.toTransform(), base); } // calculate viewProjections diff --git a/engine/rend/src/sgpu/renderer.zig b/engine/rend/src/sgpu/renderer.zig index 34eba6a..871b3d7 100644 --- a/engine/rend/src/sgpu/renderer.zig +++ b/engine/rend/src/sgpu/renderer.zig @@ -254,6 +254,11 @@ pub const Renderer = struct { self.meshPipe = self.device.createGPUGraphicsPipeline(&pci); } + pub fn preTick(self: *@This(), dt: f64) !void { + _ = self; + _ = dt; + } + pub fn createBuffers(self: *@This()) !void { // ssbo buffer @@ -384,10 +389,6 @@ pub const Renderer = struct { // self.device.unmapGPUTransferBuffer(self.colorBufferTransfer); - if (self.activeCamera) |camera| { - camera.resolve(); - } - const copyPass = cmd.beginGPUCopyPass(); // copyPass.uploadToGPUBuffer(&.{ .transfer_buffer = self.colorBufferTransfer, .offset = 0 }, &.{ // .buffer = self.colorBuffer, @@ -414,6 +415,10 @@ pub const Renderer = struct { pub fn tick(self: *@This(), dt: f64) void { self.totalTime += dt; + if (self.activeCamera) |camera| { + camera.resolve(); + } + const cmd = self.device.acquireGPUCommandBuffer(); self.frameUploads(); try self.uploadUniforms(cmd); diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index eecd278ff19c5c915a54f94b10d5c3a5989020f6..96f27bf3c8f3fdee64aa8f0505b482e3cdf94156 100644 GIT binary patch delta 775 zcmZ3Wy+&KoCBn(se8W@k?cc3uo_rFy_;2AseX6Oc(swJcsoOi>33c zQ*Kf+RWft0``v1mUZ>#_;prp7&A^ZVRC|<(fdRy40BRHf^8au#FgQ6MxTna&z_4fY zPOkfGjLef~3K~e*_@91a<~HHglKi4%mR#xmpUm7geBN>Iogz)Y!&uJ zwl#9_Onj2eD0kv`lNnG=u7Z3vv-O02*4COd&Mv`bRt86d1rHKMk0|gQaNs$_zymd6 zQhNl4jso+~84hfpHa7A+F;1%AzyNe{i0y$x3M`ck?BxbY1t5Vi+b2!}Tw)WNYJ3=2 zfA&boFmNP-g+h8jdH)tqStmY(H-p96a8}X=mp10j65D{ur|Ipw1E`|9gZe&H#_o#@N6?sIO1^B0mzBa-&5aQqa)Y!4Gnt=deCuu{13* z2-$HU@A#`(2~Qs^w>;ny;pxM{&A^ZVRC|btfdRy40BRHf@;`7fFgQ6MxTna&z_4@k zPOkfGj0}@!3K~dk(t2%a?k4cKaBq1s%X^<$89>hJO>$+E9|}t9u1YX)V`x(7XgVmt z$kC+0!IsRTz|r)>+-8h)fnvMCv`OzLMX zRgmYt22``Au_lN2g@c`#$fudA8g4vd3@is5irPaMn$I&gpO=Q{=ah?6+~C0TB)LiA z#Bnym3FkWwGBqej1blwL)huwQQMUfd!H$EBK#_>g1>BAD5dvJF3=i@@F-|IA0Qw}- z_5qXpiNhIA3_WTb2Qv;SNXYYiG_;d=lw4zQB>hMNqk{mCM*WFaM-Dbc38;lCb&4C5 zCiIIo)vS?tl6;s&URv$P4TFO))ss2ekyY2Lo*XhqZS&Y4bQ4K-_W7 zYmajRw=x?WLsNpnP8TZ{v6kimzW=AUPT zM3_aJb$Qqf0}O8*Y7k%+Wd?E*cVFQ9w6UDyQSx2^{!bedmi4yU^FWyskHVQ#Sv`2n4m8)~bg=)tp}_wM8d;jUUP;hk@YMBz zF*9}jfJ_fiY(CKqI;3-^Nxe<5nT5g8z~P>fp6Z!HI!R6_@=5AVaCwk)Ns Texture [[texture(0)]], sampler Sampler [[sampler(0)]]) { main0_out out = {}; - float4 _58 = Texture.sample(Sampler, in.in_var_TEXCOORD0); - float _59 = _58.w; - if (_59 < 0.00999999977648258209228515625) + float4 _59 = Texture.sample(Sampler, in.in_var_TEXCOORD0); + float _60 = _59.w; + if (_60 < 0.00999999977648258209228515625) { discard_fragment(); } - float3 _115; + float3 _118; do { - float3 _73 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; - float _74 = length(_73); - float _75 = _74 * _74; - float _76 = 1.0 / _75; - float _81; - if (_74 > 2.0) + float3 _74 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1; + float _75 = length(_74); + float _76 = _75 * _75; + float _77 = 1.0 / _76; + float _82; + if (_75 > 2.0) { - _81 = 0.5 / _75; + _82 = 0.5 / _76; } else { - _81 = _76; + _82 = _77; } - float _86; - if (_74 > 4.0) + float _87; + if (_75 > 4.0) { - _86 = _81 * 0.5; + _87 = _82 * 0.5; } else { - _86 = _81; + _87 = _82; } - float _88 = (_74 > 5.0) ? 0.0 : _86; + float _89 = (_75 > 15.0) ? 0.0 : _87; + float _91 = (_89 > 1.0) ? 1.0 : _89; if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625) { - _115 = ((in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _76) * _88; + _118 = ((in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _77) * _91; break; } - float3 _96 = fast::normalize(_73); - _115 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_96, in.in_var_TEXCOORD2), 0.0)) * _88) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_96 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _88); + float3 _99 = fast::normalize(_74); + _118 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_99, in.in_var_TEXCOORD2), 0.0)) * _91) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_99 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _91); break; } while(false); - out.out_var_SV_Target0 = float4(powr(_58.xyz * ((mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) * 0.100000001490116119384765625) + _115), float3(0.4545454680919647216796875)), _59); + out.out_var_SV_Target0 = float4(powr(_59.xyz * ((mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) * 0.001000000047497451305389404296875) + _118), float3(0.4545454680919647216796875)), _60); return out; } diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index ed95d7b9cfbbadbcfdc2650bd68fc77fe2b33aca..d93bfcc8a3a3ef8f05fe85ad6fb12e2c3a872aa9 100644 GIT binary patch literal 3188 zcmZXUNpqA{6ox+%lQ6`DAprrE4gp2M1`!a+EWw~g6G#Yggw`~nHJy%~P5`HZqO5YI z8+Y!l;vY~fU5B-Q!KE9^xytAH`a7vEy;X1DbKZ0AneKPHxv94;Nj4-&(vf`0uWMV< zlrmeA)^r~mpBm3E*XHskP9D?VkuKhL@>=CuKr7e^qn$)Z%_%<% z(SlX3c5A7aKR%Z)l?(Gl^cGHUWS=hHtgTdwso$pXTP~EB7K&BW)NeEUR7M$ZOZZ({ zEM2Qq%ggAkc*?t0OT`)%(&h~QV|%_HtBte&vmFncGpnrB(x6i_SEdWq`C^Tz&ZTkA z=6Dp}bbj@@tPgPvU+>{bgR<1EN8O&)twG(G>gH|q_YU?q*wuT0OMhqIXjgBvJ1_0l zp}%_A&yzjwq!->5ob}0VZQ!g?E(gYl=vldL;&!m-fai8%>&*1S*p!X4`KR7~b$z!1 zeZ#&T`Qh65Q0P0*Swp+|>fOLILf<&I6ZwblNBhEW7rMEHw(xrlxw8Fk zU+BBhzx{D#AkOVU*GFgzzrDz=&>v5=+v{~dflk~rVfQYNKKOYs;_gG23xr<|E=iU~ zLhniSWH@y1FiCE&>)yk|wY355&hvm~R`?%GwO>Yd^WWh6c7D#=`--LR$`RwKx|sUz z!OOQU|8&Nydl!e;jaC1S>)(%D@Sb@F-8_CDo_UttGjiGwvzuF9{Ya*JujelId@Qk{3nb+FXt;;?e zb>C~~*6DlojBmg{j~sA$59%+ZT9TaNty#OdT=w!i+6ndne4WKfU@UcKaSE6}^cRuM zuWs+Bf&Hm_KQ96Mo59QZoB{gCU#8OfT^5Zu&tVF#mlxXF34neLKHl8Dw|; zNj_~uK+Zmt|7J4EawEj>K8Ara_PtxDHH?5^FhTY9`7)3bt_{FBMQvx1?OlE{d;g=z z@`3g&*162jS^M^V$NGLlJ?44^=;J$${A0-WE?kk{p3m2*O7u?sv18uOZum z_tj2)&hvF(9C__u;VVB5w27}X?hR!BN3=bFbM|ineR_a(Ot8D0y|zgpXD!MR>jJX> zhsOE?Tll#D%2(6Lei4|{9`yHoG z`B;noo{zk<$mY#~d)W-%LYDVG*R$dKHnKKn7QXKw%gbqtdw3T)?!j*;zU}vrwezj*MkYYctk|z}oyC{YJja zzK1zvZPweK-B}S?U++r0Gl^W+kgZ3bcz5&2zPke;-raR%`S|Wj$a2DE{3a0J^+(9| zs$bOnF>=(b{Z2NQ1!Qa19=>Jd@YNpuEh5{S_UNyI9Q|pxzpyQ3Hs7*-2SN1y39`NG z6I>NpzNdj(Ms`l#NBGr{^_7c0R*?18)_8B;pWm_fwhFvozYG1n(>Q+v+5Z@Q;+wgN z?0<|ldoso?V88aHeIJPbyHAm|yMp@+InD(4dB%BXlf*s5{sr*7{@VM&Am4W@yS9JG HdK&x-UvBk> literal 3128 zcmZXU%X3p@7>AFoZ3Sw%7Nn>o6h#FCA|P6NlVVY;Ewq$+rO}2GZJL^-1$2YMFyl%$ z?%cR?#{a-!>AI}_7hJkw@H*r3oSe6l(QoFL_xiop@1(u0zbi=|N|K}}`GQ~1_M|P< zY)Lv(IzBNyQK&Z-3MWn;)83P`OH$j`WK;4md>g0~%ggGus_OuqU>h3kB!X*C^>ZjX zu&Qg^TqzZfFBHm^;$jK8gWHclXG%93tF=<q7EUvn-SLmbD~Jv?bpjvARysiH3;6RIAIS)MgJNs6!tXKo>W0=I7PHxYviQkI)u=``|qxKb}grHtK!?`QG~aVA$Q|(YwD6McnH^`HLzg7q zkA$30iPm7QPgEBp_p_TNVL@?YTh?7W<>`-!9M$uZNXnr!OZhnL^B`lmC! zva>$~HCFT8Hs6c7(0k_@Wb^nQyz?y7JLa6Y+d%*D*JtgY@L3e z-to=*N0I{`_n@5qfk033ZCSgyJofTC(u>eRe4WJ!U@T>4aT1t6Pl{Up`f=O`G-07>WToT9c@;qBeIPi5cxS$OqczbYP-PGqi z-vGw3KJ9n#RsSZ?Ccesa6Y&0TXuFHf*}nz!$ph$}__y}HKcc9%qBiG09 z)}v2+OAGLROZ_0er4qdQc*|Ge)d`RB+d#b4MR=vLsJllut2&*1e{ z7k$*=_0`t8H}~h;bZ>Rwetj4EyVJPefOj_f#G6@#_kTm1JsD#SL{HlHgZK}-p4lNA lx*M6!JK=XT)48)L;vRy24!p0w_5m=&`|gBl`-iNj!M_5