From 4d6a175e25a8a2d5928dc0d2947ccff8a5c9f746 Mon Sep 17 00:00:00 2001 From: Peter Li Date: Mon, 21 Apr 2025 22:34:25 -0700 Subject: [PATCH] saving --- engine/rend/shaders/debug.vert.hlsl | 4 +-- engine/rend/shaders/debug.vert.json | 2 +- engine/rend/shaders/lit_mesh.frag.hlsl | 10 ++++-- engine/rend/src/camera/CameraComponent.zig | 1 + engine/rend/src/sgpu/DebugDrawSystem.zig | 2 +- .../content/_shaders/dxil/lit_mesh.frag.dxil | Bin 5164 -> 5308 bytes projects/content/_shaders/msl/debug.vert.msl | 4 +-- .../content/_shaders/msl/lit_mesh.frag.msl | 15 ++++++--- projects/content/_shaders/spv/debug.vert.spv | Bin 1456 -> 1488 bytes .../content/_shaders/spv/lit_mesh.frag.spv | Bin 2288 -> 2364 bytes projects/sampleGame/main.zig | 30 +++++++++++++++--- 11 files changed, 51 insertions(+), 17 deletions(-) diff --git a/engine/rend/shaders/debug.vert.hlsl b/engine/rend/shaders/debug.vert.hlsl index 032bcf0..43f1679 100644 --- a/engine/rend/shaders/debug.vert.hlsl +++ b/engine/rend/shaders/debug.vert.hlsl @@ -14,7 +14,7 @@ struct Output struct Scene { float4x4 Model; - float3 Color; + float4 Color; }; StructuredBuffer scene: register(t0, space0); @@ -31,7 +31,7 @@ Output main(Input input) float4 pos = float4(input.Position, 1.0); output.Position = mul(ViewProjection, mul(scene[input.Instance].Model, pos)); - output.Color = scene[input.Instance].Color; + output.Color = scene[input.Instance].Color.xyz; return output; } diff --git a/engine/rend/shaders/debug.vert.json b/engine/rend/shaders/debug.vert.json index f3b65c7..24d64b6 100644 --- a/engine/rend/shaders/debug.vert.json +++ b/engine/rend/shaders/debug.vert.json @@ -18,7 +18,7 @@ }, { "name" : "Color", - "type" : "vec3", + "type" : "vec4", "offset" : 64 } ] diff --git a/engine/rend/shaders/lit_mesh.frag.hlsl b/engine/rend/shaders/lit_mesh.frag.hlsl index eeffff9..2ed0b54 100644 --- a/engine/rend/shaders/lit_mesh.frag.hlsl +++ b/engine/rend/shaders/lit_mesh.frag.hlsl @@ -59,19 +59,25 @@ float4 main( float3 Normal: TEXCOORD2 ) : SV_Target0 { + float4 s = Texture.Sample(Sampler, UV); + float alpha = s.w; + + if(alpha < 0.01) + { + discard; + } float3 lightPos = float3(0, 20 + -4, -5); 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)) ); - float4 s = Texture.Sample(Sampler, UV); - float alpha = s.w; float3 col = s.xyz; float3 c2 = col * ambient + col * BlinnPhong(Normal, WorldPos, lightPos, lightColor); float4 rv = float4(pow(c2, 1.0 / 2.2), alpha); + return rv; } diff --git a/engine/rend/src/camera/CameraComponent.zig b/engine/rend/src/camera/CameraComponent.zig index b29a911..5182c72 100644 --- a/engine/rend/src/camera/CameraComponent.zig +++ b/engine/rend/src/camera/CameraComponent.zig @@ -51,6 +51,7 @@ pub fn resolve(self: *@This()) void { position.z = -position.z; position.y = -position.y; + position.x = -position.x; { var base = core.zm.identity(); base = mul(core.zm.rotationY(-self.yaw), base); diff --git a/engine/rend/src/sgpu/DebugDrawSystem.zig b/engine/rend/src/sgpu/DebugDrawSystem.zig index 807bc43..8cf20e4 100644 --- a/engine/rend/src/sgpu/DebugDrawSystem.zig +++ b/engine/rend/src/sgpu/DebugDrawSystem.zig @@ -95,7 +95,7 @@ pub fn onUpload(p: *anyopaque, copyPass: *gpu.GPUCopyPass) void { var primitive: DebugPrimitive = self.debugDraws.pop().?; uploadMapped[offset] = .{ .Model = primitive.resolve(), - .Color = @bitCast(primitive.color), + .Color = @bitCast(primitive.color.toZm()), }; self.drawsThisFrame.append(self.allocator, primitive) catch unreachable; diff --git a/projects/content/_shaders/dxil/lit_mesh.frag.dxil b/projects/content/_shaders/dxil/lit_mesh.frag.dxil index 779aff1d0834d7033ae42a4f643a96000dd317cf..13e86127bc5c52a90a19ca5d4833c90d3a95c925 100644 GIT binary patch delta 3170 zcmd^AeNYo;9^Oqhn@!jxiwG_T!csmaSo9Xe1T9B5A#zefhqe@H%jt#yl|m3jTe(uR zn}jr4C{dt*^lVV-*lHx-*+Wm6pyr&+~ijpCj=V(e<9 zmsN}b=%icbcFXQivWwA?R}6|BtYQXK41t1veIY5G!lbuJSp^kzosr$ik-R3f32!@gJ4r{%<=E`t zIDL8$d0wlVg7lCWS#p$Zd>%SpkVpXtM{i(}K9&LSISkN)F(4QqKCs-**Lgf*76Jeh z-5`Ld`3E3lABr%6_ZV3AG&u(F=P*#jHf|8ar-(^cC0}gWwFd{4mSm+nQk&}&`rO@sA+T)&{<})VB5oC0*fC?IidAvlEg@kGMLG#ek;i>E{(|2zy z```nvl1`3xwj&=#=U#uS2oxZoi6Npe>cKu{)aPFEANOD|Cl;b=&vt>vY5;0+mMj zkpxWAD36&X-V{^5L(N!Ioz|7OpK{)f(j|BA&*C#pjH5W3K_i9fWW* z`2Y+Sc63K$wGw_*9k071m9HjhC1&E0_(gt|Jx}$!zPejW>nbWNRBqzvgn!Z>kJwfl zm))9rqn_iXAjLm=?v#JhG17eXwcgLp95>N=L#iNmjo{gQLEgq%va+^AEN}mP``X3N zwaG6v5r?$)8-?rQ)h&1ZsyJe=^J?!{ZO?e~nQYOnRYlvERc$mB6>rJjR8~}6{tT}Z z4d3@h!T7`rf1Jo4pJ<{E>+CnQEy8tSKL6d!MVWyd>eWjAibEM(QtpMc=v1p0Wv)}j z(bhn+;)<5E#_JyghX^Nk)PO(#j5kQ4>^z zuOq^1hzx+hU~eV>AdcH#1|%)tr|n=;DBJzdO>(cQ;MDDVS}If!+$<%VY#`FQVdCSs zHGS6~Yxs>0B7>tx&>#bUxbptFZ)A>G;0s#N*d>YpgB$;hMS&%af5Sreh_O`{%1(AY z7+rk0?CBR>Hw%7@320t!Kn=Ny&AeY~U>awCsDX97#+P_|!F97D*!ll0f{*_S5p3l+ zZd`@_mxb_g2`R4pN$?u0C7Pe)t(Cye!Uj_59_A#Zq>qX1hoaFG9;a)ZWSxiEN>yyX zH>H0BJ8uW}5>AgwL%2k|U=xMxY;&+Y74#M4K~G4K%}J6Z%xwq0rgThmHg?YSHC7%1 zfy5VKZ}~HA?;~ZCH?wwawB+Q3*!Ewl?230|QP{#@G zf*;egj?jI{H8cj7kZ@l(YT&fXQqngXu#^QXDFKT;Ift*JlZ$^?9UA{iUM43n-6HMo zSurF(_tRlRA4{*IQ?u#hJ)LLaQW z@j#skScrR853VUYxALF$!L6UQjb6evrXN4LRUh2+S=-Dd97HTGvD63=h$R)T3ud_8 zMe@i%AYwK`OV+=$U!6I9+FUWUV>wqA0AgSfV4=H*HQV6LnDCNA!(#}%d@J3?Mhvp* zLMK2V@C%Uz8%bf+bUhvmAQtwj@ac#VcCmgglz!le6>bCI3v;2kiyCGlk7!oRg=Q*q zw^s^H^n7TvI8SlKgBO_RW9z){3ahWcWAm|{%uQC|)~M!V6N+B#7M8f`@ieY1m?AcI zE46O2#x0aD--`hUL|Sq$i5w91lM%uCe)V54#N%K=uKmRKUGOGyEirbyf8e9I^pBVR zJv=ENz#x8U=n#!rG)SfyMFGgeJYTy4NmTlb+UO{``2JYRnE_0f9)?W!#O`hofi;

V`0I8Yt4o`rrH79d~PxjeBye0+~a$M3kc~Q_yG{@h7 zZH1F_3ba)8DJd>-1|1M-$h`z|z%1&cOUV9#v$Uh3&4axYY!v_+(s>qK2uI^Ky59{@ z7^A)Oa$a40PvoH@{ z_(an@hI5~2<>2h3Io7%|vYPtS(Yg6xPC%=gbXjieFOF^L&@YaC841MfECc@mXVX_U delta 2990 zcmeHJeN+=y7Jri&CPSEk311F`k4aPt>e3-#0F9oR!1{q<54!4NOKlPq&MVF&++WpiPCO8`)Bvh zeP`yp`|f-1ckjFJ-QRm>Gy2jK3QIKwFZ9i>zHxeI?HT^ar>~B_eFy>oEZLtR3qvFT z&;$7qqJ?M00O$nu*Fs-m=~^uiYEoz)7xbC}_oN&LVA{Du)CFyFhQYL{!-KKmKvDsw zF}Lnjka3(u%z+{c#GUD6aiA9{~IT2rpYb$#|KvY<<)>XNV1X()n^d$T+*U zQ&H5>5U+c!(e4lLz+%aq3K(*3Mc&QJVSy0MhlL5eXa?9^LpKrwL7||BirY~s644Ju z0L=2XFvRVwCF0;g7C39e(sD-M*1-~M^8pG4LgQ;FBjh(D<-i@E31}~iUVneZZp9x zA8F6)<_QnOrJp3cf$GwxTr;2N;`6CHIy|O8%KS(rH7;E*<3G1^O_D`!;=jL+sqQv?gmCqWt#US3EtV7R#zjXC# zTR;BwrLT(nt9gUub+hD+ZpoW&iGEyC5T{a|Q60(|ROY^)!Id=PSI+foYcjtYt1e=5 zPo;Nf&^z`XvLj!|D8J5la@GFg( zQTCmdXbP*(ur(AVmh%{i>?{<-QK9#z=~-`>-( zabePfkxaV{!aAOvI3-`>yS=>a$wGvY%E$2tJ>t9*o&*uj2uUim*|}Jbx0)m3|VBv3Wab@*`BQ;fYH@3rBT$D7=!f zafwE(lUVnypy>-~#zPuvlqLM;i|wDx+te|!CE;`A=zD2cn2Mv16W&;{EZ$4Fr-)%1 zNAqYe8>vF-UHU3`8BoRk(exW}Vo77`SpV3<*1pTFHAUpcP!0yjkst@I#WCoQ(y}5(RQyJWbCj81T`;B+r`c+Mzv8KrJNoel6#b?$jx_Tmx zE$)go{#V}a5fUbJ6KI7x8#BLCjxGA1=4;{RATA{Q%1?lFdfw@3fWR~%n9|b#ToURS zgj*82-;#yj)(T42iwfJH@x*RTIH!Sgk8TM1O50B67{m~I+xtXEq#P^KDF!xo!Fq8LxLn!$^;}Uo11FWG>P|4q5iq4 zJ>9ptly**K2!@;}PH*w_V31FEj8t8&(twsU%v0s1ThdGG)E zy(JbLl~Xp|up6)>uGm<@yRDj)X|Z<)jyl@b9%#V1K)D5^u8Y3kLAom+jp`|N@oq2O z-Bw*mr+#sjU3m)CG-#{fdo9!wVc8x&;<>3DoNAb~dmtf3+S4vElvqlNO?R{8L?GL+ zE9B+oOq(Xb@2%31f`8sBFH@R;e>0$@Zk2CmhAW44kl@a1b@zA<6a33!0EzHbNkwv( z!qFCIZRn!{<-9mmroQK&^87G*PhR6sM<+k^lhN4*7cdECqtq@@%7i5u*D#O#xVHSV z21w?ksIa-@Ip1O=zR%jQ3daHBp*zJ}uqC^~?w7hf7eq=&n>4v$2?O8vvuH3&Nluk} zQ${W{t#GsvFVRP&Ff7E={=hP?X-@pt(H}+DI}ep@-Oa63xvdRGd)WOJiV`Bl6-Ix- z%!wPL13!q{qHhag=mbGM(O=Th3QLsl(N5Eg>LL~L=sWad-E~o($GX2~B|p6W{teJ@ BA%g$_ diff --git a/projects/content/_shaders/msl/debug.vert.msl b/projects/content/_shaders/msl/debug.vert.msl index 482ac8a..8dd4b36 100644 --- a/projects/content/_shaders/msl/debug.vert.msl +++ b/projects/content/_shaders/msl/debug.vert.msl @@ -6,7 +6,7 @@ using namespace metal; struct Scene { float4x4 Model; - float3 Color; + float4 Color; }; struct type_StructuredBuffer_Scene @@ -33,7 +33,7 @@ struct main0_in vertex main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], uint gl_InstanceIndex [[instance_id]]) { main0_out out = {}; - out.out_var_TEXCOORD0 = scene._m0[gl_InstanceIndex].Color; + out.out_var_TEXCOORD0 = scene._m0[gl_InstanceIndex].Color.xyz; out.gl_Position = Uniforms.ViewProjection * (scene._m0[gl_InstanceIndex].Model * float4(in.in_var_TEXCOORD0, 1.0)); return out; } diff --git a/projects/content/_shaders/msl/lit_mesh.frag.msl b/projects/content/_shaders/msl/lit_mesh.frag.msl index 766471f..7586c69 100644 --- a/projects/content/_shaders/msl/lit_mesh.frag.msl +++ b/projects/content/_shaders/msl/lit_mesh.frag.msl @@ -24,11 +24,16 @@ struct main0_in fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], texture2d Texture [[texture(0)]], sampler Sampler [[sampler(0)]]) { main0_out out = {}; - float4 _56 = Texture.sample(Sampler, in.in_var_TEXCOORD0); - float3 _59 = float3(0.0, 16.0, -5.0) - in.in_var_TEXCOORD1; - float3 _60 = fast::normalize(_59); - float _76 = 0.5 / length(_59); - out.out_var_SV_Target0 = float4(powr(_56.xyz * (mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_60, in.in_var_TEXCOORD2), 0.0)) * _76) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_60 + fast::normalize(in.in_var_TEXCOORD1 - float3(Uniforms.viewPos)))), 0.0), 30.0)) * 2.0) * _76))), float3(0.4545454680919647216796875)), _56.w); + float4 _54 = Texture.sample(Sampler, in.in_var_TEXCOORD0); + float _55 = _54.w; + if (_55 < 0.00999999977648258209228515625) + { + discard_fragment(); + } + float3 _63 = float3(0.0, 16.0, -5.0) - in.in_var_TEXCOORD1; + float3 _64 = fast::normalize(_63); + float _80 = 0.5 / length(_63); + out.out_var_SV_Target0 = float4(powr(_54.xyz * (mix(float3(0.00999999977648258209228515625, 0.00999999977648258209228515625, 0.0030000000260770320892333984375), float3(0.0040000001899898052215576171875, 0.0040000001899898052215576171875, 0.0599999986588954925537109375), float3(in.in_var_TEXCOORD2.y)) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_64, in.in_var_TEXCOORD2), 0.0)) * _80) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_64 + fast::normalize(in.in_var_TEXCOORD1 - float3(Uniforms.viewPos)))), 0.0), 30.0)) * 2.0) * _80))), float3(0.4545454680919647216796875)), _55); return out; } diff --git a/projects/content/_shaders/spv/debug.vert.spv b/projects/content/_shaders/spv/debug.vert.spv index ea987d8dc41db3cfe432e811b82011864e66406c..16f3db59c8d61829e81b7eef167a2f0762f06797 100644 GIT binary patch delta 212 zcmXYqK?=e^3`H}|h)S74ZATG71y`cA+k)W6t>QsEflJRY7qNH|FC_Q^4m^H-@{@Vx zpFC)`8HzX&DWvU#YFLUFS~7t$HM(+Dy6R$E<1-k;j7&reP*~%qsNIR_sjZ8t*Ymu@ yADLC?2yEYcor1r+_xaQV-(* delta 180 zcmXYqK?=e^5CnTND=N!+a1%q2sNm74S3&gRb9{lvykS0K@FRXmutz);J;gS?@A!;K zi|rT?05cqhq}tX9$Ug^^xuUazImy=QT1va-8wv2E8@DbLLyg joDlE3SC+zE^6L?zbY9w%j$HX=_`BaD-aGQ)^oe`{P+JbH diff --git a/projects/content/_shaders/spv/lit_mesh.frag.spv b/projects/content/_shaders/spv/lit_mesh.frag.spv index a77c1438576c5e24c2a1ac34cd0737da110599b8..e6a567c7e1a0040a186a9c8c03560c6ffa7abd64 100644 GIT binary patch literal 2364 zcmZ9MNl#Q!5QU#0;DD$&;t1kAv=ffVq$mz3Ac&|7(}}I=#0Jtd4m*u8aitq~Zd~~r zj4R_>*Zu{U?leXdzwh~qbi7IRtyAaRd#mcc+qE_A4M{RDNs^}I7Qc?=NlhAAoYbfD zz~Ja$Zl-c4*Ky>4d{a{ElyXaxg~@#U8myErP8ydrR)^JN%ZSKx5MFH>pCC{NYpn8k zx{y0`Cs!=x?-jsxtX{x8R(MpIEf-SV!qCm+OVjrYWnijX#5|gX+;4H{u1yy2PL)eD z;ChtC9hG9qBj#dO{-9WRI6O6jsxD~+S1l#dkk(V2%st4Lb7N;G&I}D*?N9q4XPy6X z2MML?tp7jmP;mBTYPOPYIy!!PEMLA?sIaTGSNGC0mY_|0^sn~0Mh&2~*PGmwAvPbe zb&1VE?4DxJt=8M;Emgd@4Rffsztz0Bnzvu_=Am93{CQ4~zPA&1M9ln*nePCr)tTce zB2CP#n3~maOEbI&PJbD;=xh6_z{|moz|ARo(ieC|ir;=*!}^u@?qR-r>4ta}<{qw7 z8|zl%fB8Jv6L<}n(G%;|0@P@7p=-f^_olxybnC$8tjUFLJ^oblv(CU9z^^{dcE!4l zU^SXt=)AxEAHH>mZZp_en7Zm7#=3v^@_nu^-W#L0g*WUwv@iDDdx#-+w6bU1q1tt* ze3QnvDqx5=fxS!jvbXZvnBCL3cd(sV-kAIj=6RTL@y-mpUi~g+^?obzyP3T|<15%@ z4|5xlz0CUS@qIJqxe|UKv+Huqp6R}wVC(UFcZjXS@7p0ZZ@*{Ph|SY;%~fok=2VS+ zZ-LFz_vV_TyajV}FNeAQ1np<;Vi#-Y`KMa3Ir>N9{(=4TaDTD29mdRGZ0|cT^B+fL z{YNl0#;=o!{W^*n_bkTyZ9s0kiT;Evi z+lg=9_GCDFZ>R8$hc!}#^>$(EyeHp`-@n?SjPJ%bN6n$uem)~#*Y{w)W&75coz;u4 z?kpz%I;*!2zZWyNM!IPaPGf3^F?s(JUS@lr!S}tZ=_6*2{g~fJD;9U;ImRQWbNJ?C zJaQVq_Z(yLPqQ=5 z6R|7!#&vY2Z^cO#3{Fb}h@Z{#NCdiCQ>YhC*S{)NU6LP85_S2-|W>g`CN`QdLiMerHa)1_2hOU`6$*!X3gZhaqAoMAEYBSyY4twu+VUGkeX z_sfRF;=so-e&Fo2>JG!VDo*4Wk%{4OO;L8rP9{m-~=y@yfS2c6L#5=Uh zkmj%=!lBNWj*tzD>jM1~ejj{Lc>zhVAR*ndU8^kGy+jPsK2jo)-}I4qaF^3g5H;6J#!r{%*@dq~;Siy7HrAE@E*JAdc)o)zXB zMl-J%?_f^G-S*3@zw`3vWR}xi`Q$^~a$1njIphTY+MTf|pPb-Li^jC@mj6BZ> {any}", .{scene.getPosRot().position}); + core.debugSphere(scene.getPosRot().position.add(.{ .z = 2 }), 0.3, .{}); + core.debugSphere( + scene.getPosRot().position.add(.{ .z = 2 }), + 0.1, + .{ .color = .{ .x = 1.0 } }, + ); } - core.debugSphere(.{ .y = 0 }, 4, .{}); - var show: bool = true; ig.showDemoWindow(&show);